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
-
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
-
Panduan ini menggunakan nama host
apache1.example.com
dannginx1.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
-
Buat dua wadah bernama
apache1
dannginx1
, 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
-
Buat
proxy
wadah untuk proxy terbalik.lxc launch ubuntu:18.04 proxy
-
Buat daftar container dengan perintah list.
lxc list
-
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 mengonfigurasiproxy
wadah di bagian selanjutnya.Sekarang wadah telah dibuat, langkah-langkah berikut akan menjelaskan cara menyiapkan perangkat lunak server web di
apache1
dannginx1
wadah, danproxy
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.
-
Mulai shell di
apache1
wadah.lxc exec apache1 -- sudo --user ubuntu --login
-
Perbarui daftar paket di
apache1
wadah.sudo apt update
-
Instal paket apache2 dalam wadah.
sudo apt install -y apache2
-
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 perintahsudo nano /etc/apache2/conf-available/remoteip.conf
. Perhatikan, ini adalah alamat IP dariproxy
wadah yang ditunjukkan sebelumnya, untuk IPv4 dan IPv6. Ganti ini dengan IP darilxc 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. -
Aktifkan
remoteip.conf
baru konfigurasi.sudo a2enconf remoteip
Enabling conf remoteip. To activate the new configuration, you need to run: systemctl reload apache2
-
Aktifkan
remoteip
Modul Apache.sudo a2enmod remoteip
Enabling module remoteip. To activate the new configuration, you need to run: systemctl restart apache2
-
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.
-
Mulai ulang server web Apache.
sudo systemctl reload apache2
-
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.
-
Mulai shell di
nginx1
wadah.lxc exec nginx1 -- sudo --user ubuntu --login
-
Perbarui daftar paket di
nginx1
wadah.sudo apt update
-
Instal NGINX dalam wadah.
sudo apt install -y nginx
-
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 perintahsudo 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 menentukanset_real_ip_from
bidang denganproxy.lxd
, Anda menginstruksikan server web NGINX untuk menerima informasi alamat IP asli untuk setiap koneksi, selama koneksi tersebut berasal dariproxy.lxd
. Informasi alamat IP asli ditemukan di header HTTPX-Real-IP
di setiap koneksi. -
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.
-
Mulai ulang server web NGINX.
sudo systemctl reload nginx
-
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.
-
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 atasmyport80
, jalankan perintah berikut:lxc config device remove proxy myport80
Di mana proxy adalah nama wadah, dan myport80 adalah nama perangkat.
-
Mulai shell di
proxy
wadah.lxc exec proxy -- sudo --user ubuntu --login
-
Perbarui daftar paket.
sudo apt update
-
Instal NGINX di wadah.
sudo apt install -y nginx
-
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.
-
Mulai shell di
proxy
wadah.lxc exec proxy -- sudo --user ubuntu --login
-
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 mengeditserver_name
menjadi nama host situs web. -
Aktifkan situs web.
sudo ln -s /etc/nginx/sites-available/apache1.example.com /etc/nginx/sites-enabled/
-
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
-
Keluar dari wadah proxy dan kembali ke host.
logout
-
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 dariproxy
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.
-
Mulai shell di
proxy
wadah.lxc exec proxy -- sudo --user ubuntu --login
-
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 kolomserver_name
menjadi nama host situs web. -
Aktifkan situs web.
sudo ln -s /etc/nginx/sites-available/nginx1.example.com /etc/nginx/sites-enabled/
-
Mulai ulang layanan proxy terbalik NGINX.
sudo systemctl reload nginx
-
Keluar dari wadah proxy dan kembali ke host.
logout
-
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
-
Mulai shell di
proxy
wadah.lxc exec proxy -- sudo --user ubuntu --login
-
Tambahkan repositori
ppa:certbot/certbot
dengan menjalankan perintah berikut.sudo add-apt-repository ppa:certbot/certbot
-
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
-
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. -
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
-
Jalankan
certbot
sebagai root dengan--nginx
parameter untuk melakukan konfigurasi otomatis Let's Encrypt untuk situs web kedua. Ini adalah kedua kalinya kami menjalankancertbot
, 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
-
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 menjalankansystemctl list-timers
. -
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 menambahkanproxy_protocol
parameter kelisten 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 parameterproxy_protocol
, tambahkan sebelum;
pada setiap baris seperti yang ditunjukkan di atas. -
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 )'
CatatanThe
ss
command is similar tonetstat
andlsof
. 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
-
Run the following command in the
apache1
container to edit the configuration filehttpd.conf
and perform the change from%h
to%a
.sudo nano /etc/apache2/apache2.conf
-
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