Nginx http 重定向到 https

Nginx http 重定向到 https

我有这样的配置:

server {
    listen 80;
    server_name example.pl *.example.pl;
    rewrite ^/(.*)$ http://www.example.pl/$1 permanent;

}

server {
    listen 80;

    listen 443 ssl;

    ssl on;
    ssl_certificate /opt/nginx/ssl/server.pem; 
    ssl_certificate_key /opt/nginx/ssl/server.key;

    server_name www.example.pl;
    root /var/www/example/public/;   # <--- be sure to point to 'public'!
}

因此现在每个子域名(如 xx234.example.pl)都会被重写为http://www.example.pl

现在我尝试设置 https。https://www.example.pl运行正常,但我无法将流量从 http 重定向到 https。当我执行此操作时:

server {
    listen 80;
    server_name example.pl *.example.pl;
    #rewrite ^/(.*)$ http://www.example.pl/$1 permanent;
    return         301 https://$server_name$request_uri;
}

这是重定向,但https://example.pl没有 www。如何正确重定向。我想要相同的配置,但使用 https。

这也不起作用:

server {
    listen 80;
    server_name example.pl *.example.pl;
    rewrite ^/(.*)$ https://www.example.pl/$1 permanent;

}

答案1

您有两个问题:

首先,您从使用切换www.example.pl$server_name(这就是www.消失的原因)。

其次,您的其他服务器块已经在处理http://www.example.pl

listen 80;从第二个块中删除server,以便它仅处理https连接。用于return 301 https://www.example.pl$request_uri;执行重定向到正确的方案和服务器名称。

例如:

server {
    listen 80;
    server_name example.pl *.example.pl;
    return 301 https://www.example.pl$request_uri;
}

server {
    listen 443 ssl;
    server_name www.example.pl;
    ...
}

答案2

server_name设置虚拟服务器的名称,例如:

server {
    server_name example.com www.example.com;
}

名字将成为主服务器名称。

现在,正如你所言server_name example.pl *.example.pl;example.pl已经成为你的主服务器名称你正在使用

return 301 https://$server_name$request_uri;

example.pl重定向到而不是并不奇怪www.example.pl。要更改它,只需www.example.pl在开头添加:

server {
    listen 80;
    server_name www.example.pl example.pl *.example.pl;
    return 301 https://$server_name$request_uri;
}

现在您也可以listen 80;从 SSLserver{}部分中删除它,因为它已经变得不再必要了。

相关内容