Saya memiliki sertifikat SSL wildcard dan beberapa subdomain pada ip yang sama. Sekarang saya ingin nginx saya hanya menangani nama server yang disebutkan dan memutuskan koneksi untuk yang lain sehingga sepertinya nginx
tidak berjalan untuk nama server yang tidak terdaftar (tidak merespons, menolak, mati, bukan byte tunggal sebagai tanggapan). Saya melakukan hal berikut
ssl_certificate tls/domain.crt;
ssl_certificate_key tls/domain.key;
server {
listen 1.2.3.4:443 ssl;
server_name validname.domain.com;
//
}
server {
listen 1.2.3.4:443 ssl;
server_name _;
// deny all;
// return 444;
// return 404;
//location {
// deny all;
//}
}
Saya sudah mencoba hampir semua yang ada di blok server terakhir, tetapi tidak berhasil. Saya mendapatkan respons yang valid dari server virtual yang dikenal atau kode kesalahan. Tolong bantu.
sumber
Jawaban oleh cjc sudah dengan benar menunjukkan masalah dengan mencoba mencocokkan nama host ketika SSL diaktifkan. Namun, dimungkinkan untuk melakukannya, seperti ini:
Catatan: ya memang benar bahwa pada umumnya
if
jahat , tetapi aman untuk digunakanif
dalam kasus ini. (Baca halaman tertaut jika Anda perlu meyakinkan diri sendiri.)Berlawanan dengan apa yang telah disarankan, hanya menambahkan blok berikut tidak akan berfungsi:
karena sertifikat SSL yang cocok
validname.domain.com
tidak akan cocok dengan beberapa nama domain acak. Saya sudah mencobanya, dan nginx bertindak seperti blok tidak ada sama sekali.Ini juga tidak akan berfungsi:
karena itu akan membuat setiap koneksi HTTPS tunggal pada port 443 gagal, bahkan yang harus melalui. Saya sudah mencoba yang ini juga.
wget
melaporkan kesalahan jabat tangan SSL.sumber
Sebagian besar jawaban di sini adalah tentang mengapa itu tidak berhasil, bukan bagaimana membuatnya bekerja.
Begini caranya - Anda perlu menjadikan catch-all server sebagai 'default_server' dan perlu memberikan path ke cert / key sehingga dapat mendekripsi permintaan ssl yang masuk dan cocok dengan header Host:
Perhatikan ssl_certificate / ssl_certificate_key di sana. Jika tidak ditentukan, nginx masih mencoba menggunakan default_server tersebut dan gagal karena tidak dapat menerima koneksi ssl dengan kunci / sertifikat. Seseorang dapat menggunakan sertifikat / kunci apa pun misalnya ditandatangani sendiri. ...
Untuk menghasilkan sertifikat yang ditandatangani sendiri:
Lihat juga /server//a/841643/87439
sumber
Saya menerapkan solusi di atas hari ini, dan itu berhasil dengan baik. Semua URL yang tidak ditentukan dihapus, sekarang. Menempatkan kode server ini sebelum entri server virtual yang sebenarnya adalah kunci - semua URL yang salah terbentuk sekarang masuk ke server 'default' ini.
sumber
Anda harus dapat menangani ini dengan membuat server yang menangani item yang tidak terdaftar sebagai blok server pertama dalam konfigurasi Anda.
Semua domain yang tidak diidentifikasi secara spesifik akan ditangani oleh blok server ini.
sumber