我有一个网站,可能链接到未知数量的 CNAME DNS 记录。我需要将所有 http 请求重定向到 https。我们将使用默认证书。无论是在浏览器中输入的 IP 地址还是 DNS 名称 - 都需要转发到 https
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
我也尝试过$server_name
。如果我访问 http://,它会将我重定向到“https://_RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}
“。Apache中是否有与之对应的内容?
答案1
看来 nginx 具有与 Apache 中的 HTTP_HOST 相同的功能。因此这对我来说有效:
return 301 https://$http_host$request_uri;
答案2
执行 Nginx 重定向的正确方法是使用 HTTP 301,而不是重写。请参阅这里。
至于您的服务器设置,请参阅下面的设置。我在端口 80 上定义服务器名称,然后重定向到端口 443 上的 HTTPS。所有内容(SSL 设置、根、索引等...)都应用于此 HTTPS 服务器块下。
server {
listen 80 default_server; #Listen on IPv4
listen [::]:80; #Listen on IPv6
server_name loganmarchione.com;
return 301 https://$host$request_uri; #Redirect HTTP to HTTPS
}
server {
listen 443 ssl spdy; #Listen on IPv4
listen [::]:443 ssl spdy; #Listen on IPv6
ssl_certificate /etc/nginx/ssl/unified2.crt;
ssl_certificate_key /etc/nginx/ssl/my-private-decrypted.key;
...