GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Menyebarkan Proksi Terbalik NGINX di Docker

Pendahuluan

Proxy terbalik memotong permintaan yang masuk dan mengarahkannya ke server yang sesuai. Ini tidak hanya mempercepat kinerja, tetapi juga memperkuat keamanan server.

Cara termudah untuk mengatur dan mengelola proxy terbalik adalah dengan menggunakan Nginx dan Docker. Panduan ini menyiapkan dua contoh layanan web di dalam wadah Docker dan proxy terbalik Nginx untuk layanan tersebut.

Dalam tutorial ini, Anda akan mempelajari cara menyiapkan proxy terbalik di Docker untuk dua server web sampel.

Prasyarat

  • Akun pengguna dengan sudo hak istimewa
  • Jendela baris perintah/terminal (Ctrl-Alt-T )
  • Docker terpasang di sistem Anda
  • Docker Compose terinstal di sistem Anda
  • Nama domain terdaftar dengan Sertifikat SSL yang terkait dengannya

Mengapa Anda Membutuhkan Proksi Terbalik?

Sementara server proxy standar melindungi klien, proxy terbalik melindungi server .

Proksi terbalik adalah jenis proksi yang dipasang di belakang firewall jaringan pribadi. Peran utamanya adalah untuk mencegat lalu lintas dan mengarahkan permintaan ke server yang sesuai di backend.

Alasan utama menggunakan proxy terbalik adalah untuk meningkatkan keamanan dan kinerja . Jika Anda memiliki layanan yang berjalan di beberapa pod, Anda dapat mengarahkan semua permintaan yang masuk ke jaringan untuk melewati sejumlah port yang ditentukan.

Selain itu, proxy terbalik juga dapat menangani enkripsi SSL, caching, dan kompresi data.

Langkah 1:Buat Layanan Web Contoh

1. Mulailah dengan membuat direktori baru untuk layanan web sampel pertama. Dalam tutorial ini, kita membuat direktori example1 , tetapi Anda dapat menggunakan nama pilihan Anda.

mkdir example1

2. Pindah ke direktori itu:

cd example1

3. Buat file konfigurasi YAML komposisi buruh pelabuhan untuk wadah pertama yang mendefinisikan layanan. Gunakan editor teks pilihan Anda (dalam contoh ini, kami menggunakan Nano).

sudo nano docker-compose.yml

4. Kemudian, tambahkan konten berikut ke dalam file .yaml:

version: '2'
services:
 app:
  image: nginx
  volumes:
   - .:/usr/share/nginx/html
  ports:
   - "80"

File docker-compose menetapkan bahwa ini adalah aplikasi layanan yang menggunakan nginx gambar. Itu memasang akar contoh1 dari Host Docker ke /usr/share/nginx/html/ . Terakhir, konfigurasi memperlihatkan layanan pada port 80 .

docker-compose.yml file bervariasi tergantung pada layanan yang ingin Anda jalankan. Konfigurasi di atas khusus untuk layanan web yang kami buat untuk tutorial ini.

4. Simpan dan keluar dari file.

5. Saat berada di dalam contoh1 yang sama direktori, buat file indeks untuk layanan web:

sudo nano index.html

6. Tambahkan beberapa baris sederhana untuk muncul di halaman web contoh:

<!DOCTYPE html>
<html>
<head>
<title>Website 1</title>
</head>
<body>
<h1>Hello! This is the first sample website.</h1>
</body>
</html>

7. Simpan dan tutup file.

8. Bangun layanan yang baru dibuat menggunakan docker-compose perintah:

sudo docker-compose build

Jika Anda menggunakan gambar bawaan, seperti dalam contoh ini, output merespons dengan aplikasi menggunakan gambar, melompati .

9. Selanjutnya, mulai wadah dengan:

sudo docker-compose up -d

Langkah 2:Buat Layanan Web Contoh Kedua

Buat layanan web sampel kedua dengan mengikuti proses yang sama.

Pastikan untuk kembali ke direktori home jika Anda masih berada di example1 . Untuk melakukannya, jalankan cd di jendela terminal.

1. Buat direktori baru tempat Anda akan menyimpan file docker-compose dan indeks untuk situs web kedua. Kami akan memberi nama direktori ini example2 .

mkdir example2

2. Pindah ke contoh2 dengan menjalankan:

cd example2

3. Buat file komposisi buruh pelabuhan:

sudo nano docker-compose.yml

4. Tentukan layanan menggunakan spesifikasi yang sama seperti pada Langkah 1. Tambahkan konten berikut ke file:

version: '2'
services:
 app:
  image: nginx
  volumes:
   - .:/usr/share/nginx/html
  ports:
   - "80"

5. Simpan dan keluar dari file.

6. Kemudian, buat file indeks untuk layanan web kedua dengan menjalankan:

sudo nano index.html

7. Tambahkan konten ke file:

<!DOCTYPE html>
<html>
<head>
<title>Website 2</title>
</head>
<body>
<h1>Hello! This is the second sample website.</h1>
</body>
</html>

8. Simpan perubahan dan keluar dari file.

9. Bangun layanan kedua dan mulai wadah dengan menjalankan perintah:

sudo docker-compose build
sudo docker-compose up -d

Langkah 3:Buat Daftar Penampung

Untuk memverifikasi container untuk kedua layanan aktif dan berjalan, daftar semua container dengan perintah:

docker ps -a

Anda akan melihat wadah untuk kedua layanan web tercantum dalam output.

Langkah 4:Siapkan Proksi Terbalik

Selanjutnya, Anda perlu mengatur dan mengonfigurasi wadah proxy terbalik. Ini memerlukan pembuatan beberapa file dan subdirektori, yang semuanya harus disimpan di dalam proxy direktori.

Oleh karena itu, langkah pertama adalah membuat dan menavigasi ke proxy direktori. Untuk melakukannya, jalankan perintah:

mkdir proxy
cd proxy

Konfigurasikan Dockerfile

1. Setelah berada di dalam proxy direktori, buat Dockerfile untuk gambar kustom baru:

sudo nano Dockerfile

2. File harus berisi berikut ini:

FROM nginx

COPY ./default.conf /etc/nginx/conf.d/default.conf

COPY ./backend-not-found.html /var/www/html/backend-not-found.html

COPY ./includes/ /etc/nginx/includes/

COPY ./ssl/ /etc/ssl/certs/nginx/

Dockerfile didasarkan pada gambar nginx. Itu juga menyalin sejumlah file dari mesin lokal:

  • konfigurasi default untuk layanan proxy
  • tanggapan kesalahan HTML
  • konfigurasi dan sertifikat proxy dan SSL

3. Simpan dan keluar dari Dockerfile.

Konfigurasikan File backend-not-found

Buat file indeks untuk tidak ditemukan tanggapan:

sudo nano backend-not-found.html

Tambahkan konten:

<html>
<head><title>Proxy Backend Not Found</title></head>
<body>
<h2>Proxy Backend Not Found</h2>
</body>
</html>

3. Simpan perubahan dan tutup file.

Konfigurasikan File default.conf

1. Buat default.conf file di dalam direktori proxy:

sudo nano default.conf

2. Tambahkan konten:

# web service1 config.
server {
listen 80;
listen 443 ssl http2;
server_name example1.test;

# Path for SSL config/key/certificate
ssl_certificate /etc/ssl/certs/nginx/example1.crt;
ssl_certificate_key /etc/ssl/certs/nginx/example1.key;
include /etc/nginx/includes/ssl.conf;

location / {
include /etc/nginx/includes/proxy.conf;
proxy_pass http://example_app_1;
}

access_log off;
error_log /var/log/nginx/error.log error;
}

# web service2 config.
server {
listen 80;
listen 443 ssl http2;
server_name example2.test;

# Path for SSL config/key/certificate
ssl_certificate /etc/ssl/certs/nginx/example2.crt;
ssl_certificate_key /etc/ssl/certs/nginx/example2.key;
include /etc/nginx/includes/ssl.conf;

location / {
include /etc/nginx/includes/proxy.conf;
proxy_pass http://example2_app_1;
}

access_log off;
error_log /var/log/nginx/error.log error;
}

# Default
server {
listen 80 default_server;

server_name _;
root /var/www/html;

charset UTF-8;

error_page 404 /backend-not-found.html;
location = /backend-not-found.html {
allow all;
}
location / {
return 404;
}

access_log off;
log_not_found off;
error_log /var/log/nginx/error.log error;
}

Konfigurasi terdiri dari dua layanan web – example1.test dan example2.test . Kedua komponen server mendengarkan port 80 dan mengarahkan Nginx ke sertifikat SSL yang sesuai.

Konfigurasikan File docker-compose.yml

1. Buat docker-compose.yml baru file untuk layanan proxy:

sudo nano docker-compose.yml

2. Salin dan tempel konten berikut ke dalam file:

version: '2'
services:
proxy:
build: ./
networks:
- example1
- example2
ports:
- 80:80
- 443:443

networks:
example1:
external:
name: example1_default
example2:
external:
name: example2_default

Dalam file ini, Anda menghubungkan proxy dan jaringan eksternal (layanan web example1 dan contoh2 ). Selain itu, port 80/443 dari layanan proxy terikat ke port 80/443 dari host Docker.

Buat Kunci dan Sertifikat

1. Mulailah dengan membuat subdirektori (ssl ) di dalam proxy map:

mkdir ssl

2. Navigasikan ke ssl subdirektori dengan:

cd ssl

3. Selanjutnya, jalankan setiap perintah sentuh yang tercantum di bawah ini untuk membuat file yang diperlukan:

touch example1.crt
touch example1.key
touch example2.crt
touch example2.key

4. Kemudian, gunakan OpenSSL untuk menghasilkan kunci dan sertifikat untuk layanan web Anda. Untuk layanan web pertama (example1 ), jalankan perintah:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example1.key -out example1.crt

Perintah tersebut menghasilkan kunci pribadi RSA 2048 bit dan menyimpannya ke dalam example1.key berkas.

Anda juga akan diminta untuk memberikan beberapa informasi yang dimasukkan ke dalam permintaan sertifikat. Anda dapat mengosongkan beberapa bidang.

5. Ulangi proses untuk menghasilkan kunci dan sertifikat untuk layanan web kedua (example2 ). Ketik perintah berikut di jendela terminal:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example2.key -out example2.crt

Ini menghasilkan kunci pribadi RSA 2048 bit untuk example2 dan menyimpannya di example2.key berkas.

Edit Konfigurasi Proxy dan SSL

1. Keluar dari ssl subdirektori dan kembali ke proxy . Untuk melakukannya, gunakan perintah:

cd ..

2. Kemudian, buat subdirektori baru dengan nama termasuk :

mkdir includes

3. Navigasikan ke termasuk dan buat file proxy.conf dan ssl.conf :

cd includes
touch proxy.conf
touch ssl.conf

4. Selanjutnya, buka proxy.conf berkas:

sudo nano proxy.conf

5. Tambahkan konfigurasi berikut:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_intercept_errors on;

6. Simpan dan keluar dari proxy.conf .

7. Buka file ssl.conf:

sudo nano ssl.conf

8. Tempel baris berikut di file:

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-
ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-
SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-
GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-
AES128-SHAECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-
SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:
DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-
DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:
AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-
CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

Edit File host

1. Kembali ke proxy direktori:

cd

2. Buka /etc/hosts berkas:

sudo nano etc/hosts

3. Tambahkan baris berikut untuk memetakan nama host dari layanan web ke alamat IP pribadi dari host Docker:

10.0.2.15 example1.test
10.0.2.15 example2.test

4. Simpan perubahan dan tutup file.

Langkah 5:Mulai Proksi Terbalik

1. Dengan file konfigurasi di tempat, gunakan perintah docker-compose untuk membangun wadah:

sudo docker-compose build

2. Kemudian, jalankan wadah:

sudo docker-compose up -d

3. Pastikan Anda tahu bahwa Anda memiliki tiga wadah – dua layanan web dan satu wadah proxy terbalik:

sudo docker ps -a

Langkah 6:Periksa Apakah Proksi Terbalik Berfungsi

Gunakan curl perintah untuk memeriksa apakah layanan web dan proxy terbalik berfungsi dengan benar. Setiap domain harus merespons dengan output yang sesuai.

1. Jalankan perintah berikut untuk memeriksa layanan web pertama:

sudo curl example1.test

Outputnya merespons dengan HTML yang dibuat untuk example1.test .

2. Kemudian, verifikasi bahwa layanan web kedua berfungsi dengan proxy terbalik dengan:

sudo curl example2.test

Output merespons dengan example2.test HTML.


Ubuntu
  1. Cara menginstal Odoo 11 di CentOS 7 dengan Nginx sebagai Proxy Terbalik

  2. Cara Menginstal Flectra di CentOS 8 dengan Nginx sebagai Proxy Terbalik

  3. Cara Menginstal Odoo 14 di CentOS 8 dengan Nginx sebagai Reverse Proxy

  1. Cara Mengatur Proksi Terbalik Nginx

  2. Cara Mengatur Nginx sebagai Proxy Terbalik di Ubuntu 20.04

  3. Cara Menginstal Odoo 10 di CentOS 7 dengan Nginx sebagai Proxy Terbalik

  1. Cara Mengatur &Menggunakan NGINX sebagai Proxy Terbalik

  2. Cara Menyebarkan Layanan Mikro dengan Docker

  3. Cara Menyebarkan Wadah nginx dengan Docker di Linode