我有这样的configuration:
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工作正常,但我不能将stream量从httpredirect到https。 当我这样做:
server { listen 80; server_name example.pl *.example.pl; #rewrite ^/(.*)$ http://www.example.pl/$1 permanent; return 301 https://$server_name$request_uri; }
这是redirect,但没有www的https://example.pl 。 如何正确redirect。 我想要有相同的configuration,但与https。
这也不起作用:
server { listen 80; server_name example.pl *.example.pl; rewrite ^/(.*)$ https://www.example.pl/$1 permanent; }
你有两个问题:
首先你从使用www.example.pl切换到$server_name (这就是www.消失的原因)。
其次,您的其他服务器块已经在处理http://www.example.pl 。
删除listen 80; 从第二个server块,以便它只处理https连接。 使用return 301 https://www.example.pl$request_uri; 执行redirect到正确的scheme和服务器名称。
例如:
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; ... }
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;
这不是一个惊喜,redirect到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; 从您的SSL server{}部分,因为它已成为不必要的。