GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Panduan Pemula untuk LXD:Menyiapkan Proksi Terbalik untuk Meng-host Situs Web Mulitple

Pengantar

LXD (diucapkan "Lex-Dee") adalah manajer container sistem yang dibangun di atas Linux Containers (LXC) yang didukung olehCanonical. Tujuan LXD adalah untuk memberikan pengalaman yang mirip dengan mesin virtual tetapi melalui containerisasi daripada virtualisasi perangkat keras. Dibandingkan dengan Docker untuk memberikan aplikasi, LXD menawarkan fungsionalitas sistem operasi yang hampir lengkap dengan fitur tambahan seperti snapshot, migrasi langsung, dan manajemen penyimpanan.

Proksi terbalik adalah server yang berada di antara aplikasi internal dan klien eksternal, meneruskan permintaan klien ke server yang sesuai. Meskipun banyak aplikasi umum, seperti Node.js, dapat berfungsi sebagai server sendiri, mereka mungkin kekurangan sejumlah fitur penyeimbangan beban, keamanan, dan akselerasi lanjutan.

Panduan ini menjelaskan pembuatan proxy terbalik dalam wadah LXD untuk meng-host beberapa situs web, masing-masing dalam wadah tambahannya sendiri. Anda akan menggunakan server web NGINX dan Apache, sambil juga mengandalkan NGINX sebagai proxy terbalik.

Silakan lihat diagram berikut untuk memahami proxy terbalik yang dibuat dalam panduan ini.

Dalam panduan ini Anda akan:

  • Instal dan konfigurasikan container untuk server web NGINX dan Apache.

  • Pelajari cara memasang dan mengonfigurasi proxy terbalik dalam sebuah wadah.

  • Dapatkan dukungan SSL/TLS melalui sertifikat Let's Encrypt dengan perpanjangan sertifikat otomatis.

  • Memecahkan masalah kesalahan umum.

Catatan Untuk mempermudah, istilah wadah digunakan di seluruh panduan ini untuk menjelaskan wadah sistem LXD.

Sebelum Anda Mulai

  1. Panduan Lengkap untuk Pemula LXD:Menyiapkan Server Web Apache Dalam Wadah. Panduan ini menginstruksikan Anda untuk membuat wadah bernama web dengan server web Apache untuk tujuan pengujian. Hapus wadah ini dengan menjalankan perintah berikut.

    lxc stop web
    lxc delete web
    
    Catatan

    Untuk panduan ini diperlukan LXD versi 3.3 atau yang lebih baru. Periksa versi dengan perintah berikut:

    lxd --version
    

    Jika versinya bukan 3.3 atau yang lebih baru, perbarui ke versi terbaru dengan menginstal paket snap seperti yang diinstruksikan dalam Panduan Pemula untuk LXD:Menyiapkan Server Web Apache Dalam Wadah dan gunakan perintah berikut:

    sudo lxd.migrate
    
  2. Panduan ini menggunakan nama host apache1.example.com dan nginx1.example.com untuk dua situs web contoh. Ganti nama-nama ini dengan nama host yang Anda miliki dan atur entri DNS-nya untuk mengarahkannya ke alamat IP server yang Anda buat. Untuk bantuan terkait DNS, lihat Panduan Manajer DNS kami.

Membuat Container

  1. Buat dua wadah bernama apache1 dan nginx1 , satu dengan server web Apache dan satu lagi dengan server web NGINX. Untuk situs web tambahan apa pun, Anda dapat membuat wadah baru dengan perangkat lunak server web pilihan Anda.

    lxc launch ubuntu:18.04 apache1
    lxc launch ubuntu:18.04 nginx1
    
  2. Buat proxy wadah untuk proxy terbalik.

    lxc launch ubuntu:18.04 proxy
    
  3. Buat daftar container dengan perintah list.

    lxc list
    
  4. Outputnya terlihat seperti berikut ini.

    +---------+---------+---------------------+-----------------------------------------------+------------+-----------+
    |  NAME   |  STATE  |        IPV4         |                     IPV6                      |    TYPE    | SNAPSHOTS |
    +---------+---------+---------------------+-----------------------------------------------+------------+-----------+
    | apache1 | RUNNING | 10.10.10.204 (eth0) | fd42:67a4:b462:6ae2:216:3eff:fe01:1a4e (eth0) | PERSISTENT |           |
    +---------+---------+---------------------+-----------------------------------------------+------------+-----------+
    | nginx1  | RUNNING | 10.10.10.251 (eth0) | fd42:67a4:b462:6ae2:216:3eff:febd:67e3 (eth0) | PERSISTENT |           |
    +---------+---------+---------------------+-----------------------------------------------+------------+-----------+
    | proxy   | RUNNING | 10.10.10.28 (eth0)  | fd42:67a4:b462:6ae2:216:3eff:fe00:252e (eth0) | PERSISTENT |           |
    +---------+---------+---------------------+-----------------------------------------------+------------+-----------+

    Ada tiga kontainer, semuanya dalam MENJALANKAN negara – masing-masing dengan alamat IP pribadi mereka. Catat alamat IP (baik IPv4 dan IPv6) untuk wadah proxy . Anda akan membutuhkan mereka untuk mengonfigurasi proxy wadah di bagian selanjutnya.

    Sekarang wadah telah dibuat, langkah-langkah berikut akan menjelaskan cara menyiapkan perangkat lunak server web di apache1 dan nginx1 wadah, dan proxy wadah sehingga server web dapat diakses dari internet.

Mengonfigurasi Wadah Server Web Apache

Saat menggunakan proxy terbalik di depan server web, server web tidak mengetahui alamat IP pengunjung. Server web hanya melihat alamat IP dari proxy terbalik. Namun, setiap server web memiliki cara untuk mengidentifikasi alamat IP jarak jauh sebenarnya dari pengunjung. Untuk Apache, ini dilakukan dengan modul Remote IP Apache. Agar modul berfungsi, proxy terbalik harus dikonfigurasi untuk meneruskan informasi alamat IP jarak jauh.

  1. Mulai shell di apache1 wadah.

    lxc exec apache1 -- sudo --user ubuntu --login
    
  2. Perbarui daftar paket di apache1 wadah.

    sudo apt update
    
  3. Instal paket apache2 dalam wadah.

    sudo apt install -y apache2
    
  4. Buat file /etc/apache2/conf-available/remoteip.conf .

    File:remoteip .conf
    1
    2
    
    RemoteIPHeader X-Real-IP
    RemoteIPTrustedProxy 10.10.10.28 fd42:67a4:b462:6ae2:216:3eff:fe00:252e

    Anda dapat menggunakan nano editor teks dengan menjalankan perintah sudo nano /etc/apache2/conf-available/remoteip.conf . Perhatikan, ini adalah alamat IP dari proxy wadah yang ditunjukkan sebelumnya, untuk IPv4 dan IPv6. Ganti ini dengan IP dari lxc list your keluaran.

    Catatan Alih-alih menentukan alamat IP, Anda juga dapat menggunakan nama host proxy.lxd . Namun, modul RemoteIP Apache aneh ketika menggunakan nama host dan hanya menggunakan satu dari dua alamat IP (baik IPv4 atau IPv6), yang berarti server web Apache tidak mengetahui alamat IP sumber sebenarnya untuk beberapa koneksi. Dengan mencantumkan alamat IPv4 dan IPv6 secara eksplisit, Anda dapat yakin bahwa RemoteIP berhasil menerima informasi IP sumber dari semua koneksi proxy terbalik.
  5. Aktifkan remoteip.conf baru konfigurasi.

     sudo a2enconf remoteip
    
    Enabling conf remoteip.
    To activate the new configuration, you need to run:
    systemctl reload apache2
  6. Aktifkan remoteip Modul Apache.

     sudo a2enmod remoteip
    
    Enabling module remoteip.
    To activate the new configuration, you need to run:
    systemctl restart apache2
  7. Edit halaman web default Apache untuk membuat referensi yang dijalankan di dalam wadah LXD.

     sudo nano /var/www/html/index.html
    

    Ubah baris "Berhasil!" (nomor baris 224) ke "Ini berfungsi di dalam wadah LXD!" Simpan dan keluar.

  8. Mulai ulang server web Apache.

     sudo systemctl reload apache2
    
  9. Keluar kembali ke host.

     exit
    

Anda telah membuat dan mengkonfigurasi server web Apache, tetapi server tersebut belum dapat diakses dari Internet. Ini dapat diakses setelah Anda mengonfigurasi proxy wadah di bagian selanjutnya.

Membuat Wadah Server Web NGINX

Seperti Apache, NGINX tidak mengetahui alamat IP pengunjung saat menggunakan proxy terbalik di depan server web. Itu hanya melihat alamat IP dari proxy terbalik saja. Setiap perangkat lunak server web NGINX dapat mengidentifikasi alamat IP jarak jauh sebenarnya dari pengunjung dengan modul IP Asli. Agar modul berfungsi, proxy terbalik harus dikonfigurasi sesuai untuk meneruskan informasi mengenai alamat IP jarak jauh.

  1. Mulai shell di nginx1 wadah.

    lxc exec nginx1 -- sudo --user ubuntu --login
    
  2. Perbarui daftar paket di nginx1 wadah.

    sudo apt update
    
  3. Instal NGINX dalam wadah.

    sudo apt install -y nginx
    
  4. Buat file /etc/nginx/conf.d/real-ip.conf .

    File:real -ip.conf
    1
    2
    
    real_ip_header    X-Real-IP;
    set_real_ip_from  proxy.lxd;

    Anda dapat menggunakan nano editor teks dengan menjalankan perintah sudo nano /etc/nginx/conf.d/real-ip.conf .

    Catatan Anda telah menentukan nama host dari proxy terbalik, proxy.lxd . Setiap wadah LXD secara otomatis mendapatkan nama host, yang merupakan nama wadah ditambah akhiran .lxd . Dengan menentukan set_real_ip_from bidang dengan proxy.lxd , Anda menginstruksikan server web NGINX untuk menerima informasi alamat IP asli untuk setiap koneksi, selama koneksi tersebut berasal dari proxy.lxd . Informasi alamat IP asli ditemukan di header HTTP X-Real-IP di setiap koneksi.
  5. Edit halaman web default untuk NGINX untuk membuat referensi yang dijalankan di dalam wadah LXD.

     sudo nano /var/www/html/index.nginx-debian.html
    

    Ubah baris "Selamat datang di nginx!" (baris nomor 14) ke “Selamat datang di nginx yang berjalan dalam wadah sistem LXD!”. Simpan dan keluar.

  6. Mulai ulang server web NGINX.

     sudo systemctl reload nginx
    
  7. Keluar kembali ke host.

     exit
    

Anda telah membuat dan mengonfigurasi server web NGINX, tetapi server tersebut belum dapat diakses dari Internet. Ini dapat diakses setelah Anda mengonfigurasi proxy wadah di bagian berikutnya.

Menyiapkan Proksi Terbalik

Di bagian ini Anda akan mengonfigurasi proxy penampung . Anda akan menginstal NGINX dan mengaturnya sebagai proxy terbalik, lalu menambahkan perangkat proxy LXD yang sesuai untuk mengekspos port 80 dan 443 ke internet.

  1. Tambahkan perangkat proxy LXD untuk mengalihkan koneksi dari internet ke port 80 (HTTP) dan 443 (HTTPS) di server ke port masing-masing di proxy wadah.

     lxc config device add proxy myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80 proxy_protocol=true
     lxc config device add proxy myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443 proxy_protocol=true
    
    Device myport80 added to proxy
    Device myport443 added to proxy

    lxc config device add perintah mengambil sebagai argumen:

    Argumen Penjelasan
    proxy Nama wadah.
    myport80 Nama untuk perangkat proxy ini.
    proxy Jenis perangkat LXD (LXD proxy perangkat).
    listen=tcp:0.0.0.0:80 Perangkat proxy mendengarkan host (default) pada port 80, protokol TCP, pada semua antarmuka.
    connect=tcp:127.0.0.1:80 Perangkat proxy terhubung ke wadah pada port 80, protokol TCP, pada antarmuka loopback. Di versi LXD sebelumnya, Anda dapat menentukan localhost di sini. Namun, di LXD 3.13 atau yang lebih baru, Anda hanya dapat menentukan alamat IP.
    proxy_protocol=true Minta untuk mengaktifkan protokol PROXY sehingga proxy terbalik mendapatkan alamat IP asal dari perangkat proxy.
    Catatan

    Jika Anda ingin menghapus perangkat proxy, gunakan lxc config device remove . Jika Anda ingin menghapus perangkat di atas myport80 , jalankan perintah berikut:

    lxc config device remove proxy myport80
    

    Di mana proxy adalah nama wadah, dan myport80 adalah nama perangkat.

  2. Mulai shell di proxy wadah.

    lxc exec proxy -- sudo --user ubuntu --login
    
  3. Perbarui daftar paket.

    sudo apt update
    
  4. Instal NGINX di wadah.

    sudo apt install -y nginx
    
  5. Keluar dari penampung.

    logout
    

Lalu Lintas Langsung ke Server Web Apache Dari Proksi Terbalik

Wadah proxy terbalik sedang berjalan dan paket NGINX telah diinstal. Untuk bekerja sebagai proxy terbalik, tambahkan konfigurasi situs web yang sesuai sehingga NGINX dapat mengidentifikasi (dengan server_name di bawah) nama host yang sesuai, lalu berikan (dengan proxy_pass di bawah) koneksi ke wadah LXD yang sesuai.

  1. Mulai shell di proxy wadah.

    lxc exec proxy -- sudo --user ubuntu --login
    
  2. Buat file apache1.example.com di /etc/nginx/sites-available/ untuk konfigurasi situs web pertama Anda.

    File:apache1 .contoh.com
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    server {
            listen 80 proxy_protocol;
            listen [::]:80 proxy_protocol;
    
            server_name apache1.example.com;
    
            location / {
                    include /etc/nginx/proxy_params;
    
                    proxy_pass http://apache1.lxd;
            }
    
            real_ip_header proxy_protocol;
            set_real_ip_from 127.0.0.1;
    }

    Anda dapat menjalankan sudo nano /etc/nginx/sites-available/apache1.example.com untuk membuka editor teks dan menambahkan konfigurasi. Catatan, dalam hal ini Anda hanya perlu mengedit server_name menjadi nama host situs web.

  3. Aktifkan situs web.

    sudo ln -s /etc/nginx/sites-available/apache1.example.com /etc/nginx/sites-enabled/
    
  4. Mulai ulang proxy terbalik NGINX. Dengan memulai ulang layanan, NGINX membaca dan menerapkan instruksi situs baru yang baru saja ditambahkan ke /etc/nginx/sites-enabled .

    sudo systemctl reload nginx
    
  5. Keluar dari wadah proxy dan kembali ke host.

    logout
    
  6. Dari komputer lokal Anda, kunjungi URL situs web Anda dengan browser web Anda. Anda akan melihat halaman Apache default:

    Catatan Jika melihat file Apache access.log (file default /var/log/apache2/access.log ), itu masih menunjukkan alamat IP pribadi dari proxy wadah alih-alih alamat IP asli. Masalah ini khusus untuk server web Apache dan berkaitan dengan cara server mencetak log. Perangkat lunak lain di server web dapat menggunakan IP asli. Untuk memperbaikinya melalui log Apache, lihat bagian Pemecahan Masalah.

Lalu Lintas Langsung ke Server Web NGINX Dari Proksi Terbalik

Wadah proxy terbalik sedang berjalan dan NGINX paket telah diinstal. Untuk bekerja sebagai proxy terbalik, Anda perlu menambahkan konfigurasi situs web yang sesuai sehingga NGINX dapat mengidentifikasi (dengan server_name di bawah) nama host yang sesuai, lalu berikan (dengan proxy_pass di bawah) koneksi ke wadah LXD yang sesuai dengan perangkat lunak server web yang sebenarnya.

  1. Mulai shell di proxy wadah.

    lxc exec proxy -- sudo --user ubuntu --login
    
  2. Buat file nginx1.example.com di /etc/nginx/sites-available/ untuk konfigurasi situs web kedua Anda.

    File:nginx1 .contoh.com
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    server {
            listen 80 proxy_protocol;
            listen [::]:80 proxy_protocol;
    
            server_name nginx1.example.com;
    
            location / {
                    include /etc/nginx/proxy_params;
    
                    proxy_pass http://nginx1.lxd;
            }
    
            real_ip_header proxy_protocol;
            set_real_ip_from 127.0.0.1;
    }

    Anda dapat menjalankan sudo nano /etc/nginx/sites-available/nginx1.example.com untuk membuat konfigurasi. Catatan, Anda hanya perlu mengedit kolom server_name menjadi nama host situs web.

  3. Aktifkan situs web.

    sudo ln -s /etc/nginx/sites-available/nginx1.example.com /etc/nginx/sites-enabled/
    
  4. Mulai ulang layanan proxy terbalik NGINX.

    sudo systemctl reload nginx
    
  5. Keluar dari wadah proxy dan kembali ke host.

    logout
    
  6. Dari komputer lokal Anda, kunjungi URL situs web Anda dengan browser web Anda. Anda akan melihat halaman NGINX default berikut.

Menambahkan Dukungan untuk HTTPS dengan Let's Encrypt

  1. Mulai shell di proxy wadah.

    lxc exec proxy -- sudo --user ubuntu --login
    
  2. Tambahkan repositori ppa:certbot/certbot dengan menjalankan perintah berikut.

    sudo add-apt-repository ppa:certbot/certbot
    
  3. Outputnya terlihat seperti berikut.

    This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).
          More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
         Press [ENTER] to continue or Ctrl-c to cancel adding it.
    
         Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
         ...
         Fetched 3360 kB in 2s (2018 kB/s)
         Reading package lists... Done

  4. Instal dua paket berikut untuk a) mendukung pembuatan sertifikat Let's Encrypt; dan b) konfigurasi otomatis proxy terbalik NGINX untuk menggunakan sertifikat Let's Encrypt. Paket ditarik dari repositori yang baru dibuat.

    sudo apt-get install certbot python-certbot-nginx
    
    Catatan Ini mengonfigurasi proxy terbalik untuk juga bertindak sebagai Proxy Penghentian TLS . Konfigurasi HTTPS apa pun hanya ditemukan di proxy wadah. Dengan demikian, tidak perlu melakukan tugas apa pun di dalam wadah server web yang berkaitan dengan sertifikat dan Let's Encrypt.
  5. Jalankan certbot sebagai root dengan --nginx parameter untuk melakukan konfigurasi otomatis Let's Encrypt untuk situs web pertama. Anda diminta untuk memberikan alamat email yang valid untuk pembaruan mendesak dan pemberitahuan keamanan. Anda kemudian diminta untuk menerima Persyaratan Layanan dan apakah Anda ingin dihubungi oleh Electronic Frontier Foundation di masa mendatang. Selanjutnya, berikan situs web tempat Anda mengaktifkan HTTPS. Terakhir, Anda dapat memilih untuk menyiapkan fasilitas yang secara otomatis mengalihkan koneksi HTTP ke koneksi HTTPS.

    sudo certbot --nginx
    
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator nginx, Installer nginx
    Enter email address (used for urgent renewal and security notices) (Enter 'c' to
    cancel): [email protected]
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Please read the Terms of Service at
    https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
    agree in order to register with the ACME server at
    https://acme-v02.api.letsencrypt.org/directory
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (A)gree/(C)ancel: A
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Would you be willing to share your email address with the Electronic Frontier
    Foundation, a founding partner of the Let's Encrypt project and the non-profit
    organization that develops Certbot? We'd like to send you email about our work
    encrypting the web, EFF news, campaigns, and ways to support digital freedom.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (Y)es/(N)o: N
    
    Which names would you like to activate HTTPS for?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: apache1.example.com
    2: nginx1.example.com
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate numbers separated by commas and/or spaces, or leave input
    blank to select all options shown (Enter 'c' to cancel): 1
    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for apache1.example.com
    Waiting for verification...
    Cleaning up challenges
    Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/apache1.example.com
    
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: No redirect - Make no further changes to the webserver configuration.
    2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
    new sites, or if you're confident your site works on HTTPS. You can undo this
    change by editing your web server's configuration.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
    Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/apache1.example.com
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations! You have successfully enabled https://apache1.example.com
    
    You should test your configuration at:
    https://www.ssllabs.com/ssltest/analyze.html?d=apache1.example.com
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/apache1.example.com/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/apache1.example.com/privkey.pem
       Your cert will expire on 2019-10-07. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot again
       with the "certonly" option. To non-interactively renew *all* of
       your certificates, run "certbot renew"
     - Your account credentials have been saved in your Certbot
       configuration directory at /etc/letsencrypt. You should make a
       secure backup of this folder now. This configuration directory will
       also contain certificates and private keys obtained by Certbot so
       making regular backups of this folder is ideal.
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
  6. Jalankan certbot sebagai root dengan --nginx parameter untuk melakukan konfigurasi otomatis Let's Encrypt untuk situs web kedua. Ini adalah kedua kalinya kami menjalankan certbot , oleh karena itu kita diminta langsung untuk memilih situs web yang akan dikonfigurasi.

    sudo certbot --nginx
    
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator nginx, Installer nginx
    
    Which names would you like to activate HTTPS for?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: apache1.example.com
    2: nginx1.example.com
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate numbers separated by commas and/or spaces, or leave input
    blank to select all options shown (Enter 'c' to cancel): 2
    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for nginx1.example.com
    Waiting for verification...
    Cleaning up challenges
    Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/nginx1.example.com
    
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: No redirect - Make no further changes to the webserver configuration.
    2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
    new sites, or if you're confident your site works on HTTPS. You can undo this
    change by editing your web server's configuration.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
    Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/nginx1.example.com
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations! You have successfully enabled https://nginx1.example.com
    
    You should test your configuration at:
    https://www.ssllabs.com/ssltest/analyze.html?d=nginx1.example.com
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/nginx1.example.com/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/nginx1.example.com/privkey.pem
       Your cert will expire on 2019-10-07. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot again
       with the "certonly" option. To non-interactively renew *all* of
       your certificates, run "certbot renew"
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
  7. Setelah menambahkan semua situs web, lakukan uji coba untuk menguji pembaruan sertifikat. Periksa apakah semua situs web berhasil diperbarui untuk memastikan fasilitas otomatis memperbarui sertifikat tanpa upaya lebih lanjut.

    sudo certbot renew --dry-run
    
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Processing /etc/letsencrypt/renewal/apache1.example.com.conf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Cert not due for renewal, but simulating renewal for dry run
    Plugins selected: Authenticator nginx, Installer nginx
    Renewing an existing certificate
    Performing the following challenges:
    http-01 challenge for apache1.example.com
    Waiting for verification...
    Cleaning up challenges
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    new certificate deployed with reload of nginx server; fullchain is
    /etc/letsencrypt/live/apache1.example.com/fullchain.pem
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Processing /etc/letsencrypt/renewal/nginx1.example.com.conf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Cert not due for renewal, but simulating renewal for dry run
    Plugins selected: Authenticator nginx, Installer nginx
    Renewing an existing certificate
    Performing the following challenges:
    http-01 challenge for nginx1.example.com
    Waiting for verification...
    Cleaning up challenges
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    new certificate deployed with reload of nginx server; fullchain is
    /etc/letsencrypt/live/nginx1.example.com/fullchain.pem
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ** DRY RUN: simulating 'certbot renew' close to cert expiry
    **          (The test certificates below have not been saved.)
    
    Congratulations, all renewals succeeded. The following certs have been renewed:
      /etc/letsencrypt/live/apache1.example.com/fullchain.pem (success)
      /etc/letsencrypt/live/nginx1.example.com/fullchain.pem (success)
    ** DRY RUN: simulating 'certbot renew' close to cert expiry
    **          (The test certificates above have not been saved.)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    IMPORTANT NOTES:
     - Your account credentials have been saved in your Certbot
       configuration directory at /etc/letsencrypt. You should make a
       secure backup of this folder now. This configuration directory will
       also contain certificates and private keys obtained by Certbot so
       making regular backups of this folder is ideal.
    Catatan certbot paket menambahkan pengatur waktu systemd untuk mengaktifkan pembaruan otomatis sertifikat Let's Encrypt. Anda dapat melihat detail pengatur waktu ini dengan menjalankan systemctl list-timers .
  8. Alat certbot mengedit dan mengubah file konfigurasi NGINX situs web Anda. Dalam melakukannya, certbot tidak mematuhi listen awal direktif (listen 80 proxy_protocol; ) dan tidak menambahkan proxy_protocol parameter ke listen 443 ssl; yang baru ditambahkan garis. Anda harus mengedit file konfigurasi untuk setiap situs web dan menambahkan "proxy_protocol" ke setiap "listen 443 ssl;" baris.

     sudo nano /etc/nginx/sites-enabled/apache1.example.com
     sudo nano /etc/nginx/sites-enabled/nginx1.example.com
    
    listen 443 ssl proxy_protocol; # managed by Certbot
    listen [::]:443 ssl proxy_protocol; # managed by Certbot
    Catatan Setiap file konfigurasi situs web memiliki dua pasang listen arahan:HTTP dan HTTPS, masing-masing. Yang pertama adalah pasangan asli untuk HTTP yang ditambahkan di bagian sebelumnya. Pasangan kedua ditambahkan oleh certbot untuk HTTPS. Ini adalah pasangan karena mereka mencakup IPv4 dan IPv6. Notasi [::] mengacu pada IPv6. Saat menambahkan parameter proxy_protocol , tambahkan sebelum ; pada setiap baris seperti yang ditunjukkan di atas.
  9. Mulai ulang NGINX.

    sudo systemctl restart nginx
    

Pemecahan masalah

Kesalahan Peramban “SSL_ERROR_RX_RECORD_TOO_LONG”

Anda telah mengonfigurasi Certbot dan membuat konfigurasi Let's Encrypt yang sesuai untuk setiap situs web. Tetapi ketika Anda mengakses situs web dari browser Anda, Anda mendapatkan kesalahan berikut.

Secure Connection Failed

An error occurred during a connection to apache1.example.com. SSL received a record that exceeded the maximum permissible length. Error code: SSL_ERROR_RX_RECORD_TOO_LONG

    The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
    Please contact the website owners to inform them of this problem.

This error is caused when the NGINX reverse proxy in the proxy container does not have the proxy_protocol parameter in the listen 443 directives. Without the parameter, the reverse proxy does not consume the PROXY protocol information before it performs the HTTPS work. It mistakenly passes the PROXY protocol information to the HTTPS module, hence the record too long error.

Follow the instructions in the previous section and add proxy_protocol to all listen 443 directives. Finally, restart NGINX.

Error “Unable to connect” or “This site can’t be reached”

When you attempt to connect to the website from your local computer and receive Unable to connect or This site can’t be reached errors, it is likely the proxy devices have not been configured.

Run the following command on the host to verify whether LXD is listening and is able to accept connections to ports 80 (HTTP) and 443 (HTTPS).

sudo ss -ltp '( sport = :http || sport = :https )'
Catatan

The ss command is similar to netstat and lsof . It shows information about network connections. In this case, we use it to verify whether there is a service on ports 80 and 443, and which service it is.

  • -l , to display the listening sockets,
  • -t , to display only TCP sockets,
  • -p , to show which processes use those sockets,
  • ( sport = :http || sport = :https ) , to show only ports 80 and 443 (HTTP and HTTPS, respectively).

In the following output we can verify that both ports 80 and 443 (HTTP and HTTPS, respectively) are in the LISTEN state. In the last column we verify that the process listening is lxd itself.

State     Recv-Q  Send-Q   Local Address:Port   Peer Address:Port
LISTEN    0       128                  *:http              *:*       users:(("lxd",pid=1301,fd=7),("lxd",pid=1301,fd=5))
LISTEN    0       128                  *:https             *:*       users:(("lxd",pid=1349,fd=7),("lxd",pid=1349,fd=5))

If you see a process listed other than lxd , stop that service and restart the proxy container. By restarting the proxy container, LXD applies the proxy devices again.

The Apache access.log Shows the IP Address of the Proxy Container

You have set up the apache1 container and verified that it is accessible from the internet. But the logs at /var/log/apache2/access.log still show the private IP address of the proxy container, either the private IPv4 (10.x.x.x ) or the private IPv6 addresses. What went wrong?

The default log formats for printing access logs in Apache only print the IP address of the host of the last hop (i.e. the proxy server). This is the %h format specifier as shown below.

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common

The %h must be manually replaced with the %a format specifier, which prints the value as returned by the real RemoteIP Apache module.

LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O" common
  1. Run the following command in the apache1 container to edit the configuration file httpd.conf and perform the change from %h to %a .

    sudo nano /etc/apache2/apache2.conf
    
  2. Reload the Apache web server service.

     sudo systemctl reload apache2
    

Next Steps

You have set up a reverse proxy to host many websites on the same server and installed each website in a separate container. You can install static or dynamic websites in the containers. For dynamic websites, you may need additional configuration; check the respective documentation for setup using a reverse proxy. In addition, you may also use NGINX as a reverse proxy for non-HTTP(S) services.

Informasi Lebih Lanjut

Anda mungkin ingin berkonsultasi dengan sumber daya berikut untuk informasi tambahan tentang topik ini. Meskipun ini disediakan dengan harapan dapat bermanfaat, harap perhatikan bahwa kami tidak dapat menjamin keakuratan atau ketepatan waktu materi yang dihosting secara eksternal.

  • LXD Introduction
  • LXD support community
  • Try LXD Online
  • NGINX Web Server
  • Apache Web Server
  • NGINX Reverse Proxy Settings
  • Proxy Protocol
  • TLS Termination Proxy

Docker
  1. Menyiapkan server Nginx Reverse Proxy di Debian Linux

  2. Cara Mengatur Proksi Terbalik Nginx

  3. Apa itu Docker Container:Panduan Pengantar untuk Pemula

  1. Reverse Proxy dengan Nginx:Panduan Pengaturan Langkah-demi-Langkah

  2. Panduan Pemula untuk SELinux

  3. Panduan Pemula untuk Konfigurasi yum

  1. Host Banyak Situs Web di Docker Containers

  2. Mengatur Nginx sebagai Proxy Terbalik di Ubuntu 20.04 - Panduan langkah demi langkah?

  3. Panduan pemula untuk multipathing Device Mapper (DM)