nginx的HTTP重定向://WWW.example到https://例(SSL/HTTPS和非www)
问题描述:
我试图让nginx的HTTP重定向://WWW.example到https://例(SSL/HTTPS和非www)
http://www.domain
https://www.domain
http:// domain
https:// domain
所有重定向到4 https://domain
3和4都在4
1和2结束 - 不要在第4
我还试图使用S3桶和CloudFront的做WWW到非www重定向结束,但不幸的是,这会导致证书问题。
这是我目前在我的nginx的配置:
server {
listen 80;
server_name www.{{ nginx_server_name }} {{ nginx_server_name }};
return 301 https://{{ nginx_server_name }}$request_uri;
}
server {
listen 443;
server_name www.{{ nginx_server_name }}
ssl on;
charset utf-8;
ssl_certificate {{ certbot_output_dir }}/{{ letsencrypt_cert_filename }};
ssl_certificate_key {{ certbot_output_dir }}/{{ letsencrypt_privkey_filename }};
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-..........
ssl_prefer_server_ciphers on;
return 301 https://{{ nginx_server_name }}$request_uri;
}
server {
listen 443;
server_name {{ nginx_server_name }};
ssl on;
charset utf-8;
ssl_certificate {{ certbot_output_dir }}/{{ letsencrypt_cert_filename }};
ssl_certificate_key {{ certbot_output_dir }}/{{ letsencrypt_privkey_filename }};
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-..........
ssl_prefer_server_ciphers on;
答
你的配置似乎是正确的,但这些参数? 也许这对你的作品:
server {
listen 80;
server_name www.example.com example.com;
return 301 https://example.com$request_uri;
}
这将所有的HTTP请求www.example.com和example.com转发给https://example.com你应该再还与主机名www.example.com HTTPS创建一个监听器以相同的方式转发。 那么不使用参数,或者是因为混淆?
嗨斯蒂芬 的参数是ansible变量 nginx_server_name:domain.com 此外,将在第二服务块你所描述的不是吗? ,即这几行会在https上用主机名监听www.domain.com 服务器监听443; server_name www。{{nginx_server_name}} ssl on; –
如果您在返回301 ...行中指定域,它将修复您的问题。因为它是一个参数,它会一直匹配。 – Stephan