我查看了类似问题的其他答案以及 DigitalOcean 等网站上的教程,但均未成功。抱歉,这可能是一个很明显的问题 - 我是新手。
本质上,我需要设置重定向,以便 http://,https://www。, 和http://www.全部重定向至 https://.
目前,https:// 运行正常,http:// 重定向到 https://。我需要重定向 www 流量,因为 SSL 证书仅针对非 www 配置。但是,当我尝试向配置中添加另一个服务器块以将 www(http 和 https)重定向到 https:// 时,服务器会关闭所有 4 个变体上的连接。
这是我的配置:
# HTTP - redirect to HTTPS
server {
listen 80;
server_name www.example.com example.com;
return 301 https://example.com$request_uri;
}
# HTTPS www - redirect to non-www RESETS CONNECTION
#server {
# listen 443;
# server_name www.example.com;
# return 301 https://example.com$request_uri;
#}
# HTTPS — proxy all requests to the Node app
server {
# Enable HTTP/2
listen 443 ssl http2;
server_name example.com;
# Use the Let’s Encrypt certificates
ssl_certificate /etc/not/my/path/live/example.com/fullchain.pem;
ssl_certificate_key /etc/not/my/path/live/example.com/privkey.pem;
# Include the SSL configuration from cipherli.st
include snippets/ssl-params.conf;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://0.0.0.0:2368/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}
有人能告诉我我做错了什么吗?我再说一遍,我知道这可能很明显,但我就是无法让它工作。我应该用 NGINX 重定向以外的其他方法来完成这个任务吗?
答案1
除非您拥有 的证书,否则您无法将www.example.com
https 流量重定向到。SSL 协商使用域名,并且仅在协商 SSL 层后才会发生重定向。example.com
www.example.com
答案2
server {
server_name www.example.com example.com
listen 80;
location / {
rewrite ^/(.*)$ https://example.com/$1 permanent;
}
}
server {
server_name www.example.com;
listen 443 ssl;
[... ssl configuration ...]
location / {
rewrite ^/(.*)$ https://example.com/$1 permanent;
}
}
server {
server_name example.com;
listen 443 ssl;
[ ... main block ... ]
}