Saya memiliki beberapa server yang berjalan di mesin yang sama, beberapa hanya dengan http, beberapa dengan http dan https. Ada beberapa blok server yang didefinisikan dalam file terpisah yang disertakan dari file konfigurasi utama.
Saya telah menyiapkan server "default" untuk http yang akan melayani "halaman pemeliharaan" generik untuk permintaan yang tidak cocok dengan nama server lain dalam file konfigurasi lainnya. Server default http berfungsi seperti yang diharapkan, ia menggunakan nama_server "_" dan muncul pertama dalam daftar include (karena saya telah mengamati bahwa dalam kasus duplikat nama_server di seluruh server, yang muncul pertama kali digunakan). Ini sangat bagus.
Saya akan mengharapkan blok server yang sama persis (hanya beralih "mendengarkan 80 default_server" untuk "mendengarkan 443 default_server" dan juga bukannya melayani halaman "mengembalikan 444") namun tidak. Sebagai gantinya, tampaknya server https default baru sebenarnya mengambil semua koneksi https yang masuk dan menyebabkannya gagal, meskipun blok server lain memiliki nama server yang lebih tepat untuk permintaan yang masuk. Menghapus server https default baru akan menyebabkan perilaku semi-benar untuk dilanjutkan: semua situs web dengan https akan memuat dengan benar; tetapi situs web tanpa https semua akan dialihkan ke server https pertama di file sertakan (yang menurut dokumen, jika tidak ada "default_server" muncul, maka blok server pertama yang muncul akan "default").
Jadi pertanyaan saya adalah, apa cara yang benar untuk mendefinisikan "server default" di nginx untuk koneksi ssl? Mengapa ketika saya secara eksplisit mengatur "default_server" itu menjadi serakah dan mengambil semua koneksi sedangkan ketika saya secara implisit membiarkan nginx memutuskan "server default" itu berfungsi seperti yang saya harapkan (dengan server yang salah ditetapkan sebagai default dan server nyata lainnya berperilaku dengan benar)?
Inilah "server default" saya. Http berfungsi tanpa merusak server lain. Https memecah server lain dan menghabiskan semuanya.
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
}
Adakah yang melihat apa yang salah di sini?