pengantar
Saya memiliki server dev (saat ini menjalankan Ubuntu 14.04 LTS), yang telah saya gunakan untuk sementara waktu sekarang untuk hosting berbagai alat pengembangan pada port yang berbeda. Karena port-port itu sulit untuk diingat, saya telah memutuskan untuk menggunakan port 80 untuk semua layanan saya dan melakukan penerusan port secara internal, berdasarkan nama host.
Alih-alih menulis domain.com:5432, saya cukup mengaksesnya melalui sub.domain.com
Misalnya aplikasi X, yang menggunakan port 7547 dan berjalan pada sub.domain.com memiliki konfigurasi nginx berikut:
upstream sub {
server 127.0.0.1:7547;
}
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
access_log /var/log/nginx/sub.log combined;
location / {
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_pass http://127.0.0.1:7547;
proxy_set_header Authorization "";
}
}
Pertanyaan
Mengingat struktur konfigurasi saat ini, yang telah saya pilih, apakah mungkin untuk menggunakan letsencrypt dan menjalankan berbagai layanan di bawah https?
nginx
https
jira
lets-encrypt
0x450
sumber
sumber
Jawaban:
Ya, Anda dapat memiliki permintaan proxy nginx ke server HTTP, dan kemudian itu sendiri menanggapi klien melalui HTTPS. Saat melakukan ini, Anda akan ingin memastikan bahwa koneksi proxy nginx <-> tidak mungkin terendus oleh siapa pun yang diharapkan sebagai penyerang Anda. Pendekatan yang cukup aman mungkin termasuk:
Proksi ke host lain di Internet publik sepertinya tidak cukup aman.
Berikut adalah petunjuk untuk mendapatkan sertifikat Let's Encrypt menggunakan server web yang sama yang Anda gunakan sebagai proxy.
Meminta sertifikat awal Anda dari Let's Encrypt
Ubah
server
klausa Anda untuk memungkinkan subdirektori.well-known
dilayani dari direktori lokal, misalnya:http://sub.domain.com/.well-known
Di sinilah server Let's Encrypt akan mencari jawaban atas tantangan yang dikeluarkannya.Anda kemudian dapat menggunakan klien certbot untuk meminta sertifikat dari Let's Encrypt menggunakan plugin webroot (sebagai root):
Kunci, sertifikat, dan rantai sertifikat Anda sekarang akan dipasang di
/etc/letsencrypt/live/sub.domain.com/
Mengkonfigurasi nginx untuk menggunakan sertifikat Anda
Pertama buat klausa server baru seperti ini:
Muat ulang nginx:
Verifikasi bahwa HTTPS sekarang berfungsi dengan mengunjungi
https://sub.domain.com
danhttps://www.sub.domain.com
di peramban Anda (dan peramban lain yang secara spesifik ingin Anda dukung) dan memeriksa bahwa mereka tidak melaporkan kesalahan sertifikat.Direkomendasikan: juga tinjau raymii.org: Keamanan SSL yang kuat pada nginx dan uji konfigurasi Anda di Labs SSL .
(Disarankan) Redirect permintaan HTTP ke HTTPS
Setelah Anda mengonfirmasi bahwa situs Anda berfungsi dengan
https://
versi URL, alih-alih beberapa pengguna menyajikan konten tidak aman karena mereka pergihttp://sub.domain.com
, arahkan mereka ke versi situs HTTPS.Ganti seluruh
server
klausa port 80 Anda dengan:Anda juga harus menghapus tanda komentar pada baris ini di konfigurasi port 443, sehingga browser ingat untuk tidak mencoba versi HTTP situs ini:
Perpanjang sertifikat Anda secara otomatis
Anda dapat menggunakan perintah ini (sebagai root) untuk memperbarui semua sertifikat yang dikenal dengan certbot dan memuat ulang nginx menggunakan sertifikat baru (yang akan memiliki jalur yang sama dengan sertifikat yang ada):
certbot hanya akan mencoba untuk memperbarui sertifikat yang berumur lebih dari 60 hari, jadi aman (dan disarankan!) untuk menjalankan perintah ini dengan sangat teratur , dan secara otomatis jika memungkinkan. Misalnya, Anda bisa memasukkan perintah berikut
/etc/crontab
:Anda dapat menguji pembaruan dengan menjalankan-kering, yang akan menghubungi server staging Let's Encrypt untuk melakukan tes nyata menghubungi domain Anda, tetapi tidak akan menyimpan sertifikat yang dihasilkan:
Atau Anda dapat memaksa pembaruan awal dengan:
Catatan: Anda dapat mengeringkan lari sesering yang Anda inginkan, tetapi pembaruan nyata tunduk pada batas tingkat Mari Enkripsi .
sumber
certbot
atau alat lain, Anda tidak bisa lupa menentukan domain Anda dalam format www dan non-www agar berfungsi.location /.well-known
, Anda harus.well-known
keluar di jalan. Gunakanalias /var/www/sub.domain.com
, bukanalias /var/www/sub.domain.com/.well-known
location '/.well-known' {
. Tidak yakin apakah ini versi versi atau hanya pengaturan saya tetapi kalau-kalau ada orang lain yang macet.Ya, Anda dapat menggunakan
nginx
sebagai titik akhir https dan bekerja sama dengan backend melalui http. Misalnya konfigurasi saya:Tapi seperti yang saya tahu, dengan mengenkripsi, Anda harus mengarahkan semua subdomain saat mendapatkan sertifikat, dan jika ini merupakan masalah, maka Anda memilih url
https://host/service
alih-alihhttps://service.host
sumber