Saya mengalami kesalahan saat mencoba mengalihkan https://example.com ke https://www.example.com .
Ketika saya pergi ke https://example.com , itu tidak mengarahkan dan mengembalikan status halaman / 200.
Saya tidak ingin ini, saya ingin mengarahkan ulang ke https://www.example.com .
Ketika saya mengunjungi http://example.com , itu dialihkan ke https://www.example.com
Adakah yang bisa memberitahu saya di mana saya salah?
Ini adalah file konfigurasi default dan ssl default saya:
default.conf
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
default-ssl.conf
upstream app_server_ssl {
server unix:/tmp/unicorn.sock fail_timeout=0;
}
server {
server_name example.com;
return 301 https://www.example.com$request_uri
}
server {
server_name www.example.com;
listen 443;
root /home/app/myproject/current/public;
index index.html index.htm;
error_log /srv/www/example.com/logs/error.log info;
access_log /srv/www/example.com/logs/access.log combined;
ssl on;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /srv/www/example.com/keys/ssl.crt;
ssl_certificate_key /srv/www/example.com/keys/www.example.com.key;
ssl_ciphers AES128-SHA:RC4-MD5:ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:!ADH:!AECDH:!MD5:AES128-SHA;
ssl_prefer_server_ciphers on;
client_max_body_size 20M;
try_files $uri/index.html $uri.html $uri @app;
# CVE-2013-2028 http://mailman.nginx.org/pipermail/nginx-announce/2013/000112.html
if ($http_transfer_encoding ~* chunked) {
return 444;
}
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server_ssl;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/app/example/current/public;
}
}
nginx
ssl
ssl-certificate
https
Thomas V.
sumber
sumber
Jawaban:
Anda kehilangan
listen
arahan dalam filedefault-ssl.conf
. Tambahkanlisten 443;
direktif iniSecara default, jika Anda menghilangkan direktif ini, nginx menganggap bahwa Anda ingin mendengarkan pada port 80. Berikut dokumentasi perilaku default ini.
Sunting: Terima kasih atas komentar dari @TeroKilkanen.
Di sini konfigurasi lengkap untuk default-ssl.conf Anda
Sidenote : Anda dapat mengganti
ssl on;
direktif denganlisten 443 ssl;
rekomendasi dari dokumentasi nginx .sumber
ssl_certificate
danssl_certificate_key
mengarahkan dalam blok ini, dan menggunakannyalisten 443 ssl;
agar itu adalah vhost SSL.default-ssl.conf
. Mungkin beberapa kesalahan ketik atau pemesanan ulang menyebabkan hal itu.Masukkan saja pernyataan if dan Anda harus segera pergi. Saya memeriksa hasilnya di curl.exe -Saya dan semua kasus selain https://www.example.com diperlakukan sebagai 301. SSL rumit karena diperiksa sebelum Anda mendapatkan 301 redirection URL. Karenanya, Anda mendapatkan kesalahan sertifikat.
Secara pribadi, saya suka menghapus www dari domain tetapi saya menulis kode saya di bawah untuk menjawab pertanyaan Anda.
sumber
Cara saya melakukannya adalah dengan menggunakan pernyataan if di dalam blok server ssl yang dialihkan ke https www
Tentu saja, kapan pun Anda ingin menggunakan pernyataan if dalam file konfigurasi nginx; Anda seharusnya sudah membaca: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
sumber
if ($host = 'www.example.com')
tidak perlu.Ini 2018 sekarang dan saya pikir untuk memberikan yang ini kesempatan baru jika seseorang mencari solusi sederhana.
Pandangan saya tentang ini sebagai pendatang baru adalah membuat segala sesederhana mungkin. Pada dasarnya Anda ingin mengarahkan kembali http://example.com dan https://example.com ke https : // www .example.com. Dan Anda hanya berhasil mengarahkan ulang http://example.com
Ini adalah operasi yang sangat mudah yang hanya membutuhkan dua blok server (saya akan menunjukkan ini secara singkat dalam satu file konfigurasi)
Sekarang http://example.com dan https://example.com keduanya harus dialihkan ke https://www.example.com . Pada dasarnya pengaturan ini mengalihkan semua yang non-www dan / atau non-https ke https: // www .
sumber
Untuk mengalihkan semua permintaan ke
https://www.example
buat blok server untuk pengalihan dan domain utama pada port SSL Anda (biasanya 443) serta port http default 80
simpan dan ikuti
sudo nginx -s reload
Ini akan mengarahkan ulang
sumber
;
di blok server kedua di klausa if. Seharusnyareturn 301 https://www.example.com$request_uri;
http
pada443
?