我想在NGINX服务器块中从httpredirect到https。
在一篇相关的文章中,我尝试在下面的NGINXconfiguration文件中添加另一个服务器模块,但是得到了一个“冲突的服务器名称”警告,因为(大概) server_name的值不包括协议前缀:
server { listen 80; listen 443 ssl; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; server_name sub.domain.co.uk; return 302 https://sub.domain.co.uk$request_uri; } server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; server_name sub.domain.co.uk; location / { root /home/saves/webapps/html/; index index.html; } location /api/ { [...] } }
问题是你已经configuration了两个服务器模块在同一个服务器端口上侦听SSL,并且nginx无法决定在这些情况下select哪一个。 将其更改为:
server { listen 80 default_server; listen 443 ssl default_server; server_name _; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; return 302 https://sub.domain.co.uk$request_uri; } server { listen 443; server_name sub.domain.co.uk; location / { root /home/saves/webapps/html/; index index.html; } location /api/ { [...] } }
我想了一下,做了一点研究,然后用一个更简单的服务器模块解决了这个问题 。
server { listen 80; location / { return 301 https://sub.domain.co.uk; } }
但是最后修改之后给了这个意见:
server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; server_name sub.domain.co.uk; location / { return 301 https://sub.domain.co.uk; root /home/saves/webapps/html/; index index.html; } [...] }
所以,感谢你们的迅速和有益的答复。