如何在Nginx中将http://www.*重定向到https:// *
问题描述:
所以我想实现的4件事:如何在Nginx中将http://www.*重定向到https:// *
- 支持IP-v4和IP-V6
- 支持letsencrypt SSL证书(在HTTP极致挑战的位置)
- 重定向WWW非WWW
- 重定向HTTP到HTTPS
我想出了一个配置,但似乎没有工作。尝试访问http://www.MY_DOMAIN.COM时,出现“页面不存在”。 由于hsts设置,在访问https非www版本一次后,它会起作用。
请注意,我有SSL和无WWW域的SSL证书。
我怎样才能做到这一点/我是什么在我的配置做错了:
# HTTP server
#
server {
listen [::]:80;
server_name MY_DOMAIN.COM www.MY_DOMAIN.COM;
location /.well-known/acme-challenge {
root /var/www/letsencrypt;
try_files $uri $uri/ =404;
}
location/{
return 301 https://MY_DOMAIN.COM$request_uri;
}
}
# HTTPS server
#
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.MY_DOMAIN.COM;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.MY_DOMAIN.COM/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.MY_DOMAIN.COM/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/www.MY_DOMAIN.COM/fullchain.pem;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;
ssl_stapling on;
ssl_stapling_verify on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=86400; includeSubDomains";
return 301 https://MY_DOMAIN.COM$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server ipv6only=on;
server_name MY_DOMAIN.COM;
ssl on;
ssl_certificate /etc/letsencrypt/live/MY_DOMAIN.COM/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/MY_DOMAIN.COM/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/MY_DOMAIN.COM/fullchain.pem;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;
ssl_stapling on;
ssl_stapling_verify on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=86400; includeSubDomains";
root /var/www/MY_DOMAIN.COM;
index index.html;
}
另外,我不觉得这两个服务器块非常漂亮的复制粘贴性。
您需要将'listen 80'添加到顶部'server'块,以便IPv4也正在侦听。 –
@RichardSmith,你是对的。改变这个之后,它按预期工作......这是一个转储错误。但是,现在没有答案接受... – user1934514