如何使NGINX从httpredirect到https?

我想在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; } [...] } 

所以,感谢你们的迅速和有益的答复。