在本文中,我们将说明如何在Nginx服务器中将HTTP通信重定向到HTTPS。在Nginx中将HTTP重定向到HTTPS的首选方法是为站点的每个版本配置一个单独的server block,你应该避免使用if指令重定向流量,因为这可能会导致服务器的意外行为。开启HTTPS可参考网站从HTTP升级成HTTPS完全配置教程。
将站点HTTP重定向到HTTPS
要将单个网站重定向到HTTPS,请打开域配置文件并进行以下更改:
server {
listen 80;
listen [::]:80;
server_name linuxize.com www.linuxize.com;
return 301 https://linuxize.com$request_uri;
}
让我们逐行分解代码:
1、listen 80-server block将监听指定域在80端口上的传入连接。
2、server_name linuxize.com www.linuxize.com-指定server block的域名,确保将其替换为域名。
3、return 301 https://linuxize.com$request_uri-将流量重定向到站点的HTTPS版本$request_uri变量是包含参数的完整原始请求URI。
通常,你还希望将站点的HTTPS www版本重定向到非www,反之亦然,推荐的重定向方式是为www和非www版本创建一个单独的server block。
例如,要将HTTPS www请求重定向到非www,应使用以下配置:
server {
listen 80;
listen [::]:80;
server_name linuxize.com www.linuxize.com;
return 301 https://linuxize.com$request_uri;
}
server {
listen 443 ssl http2;
server_name www.linuxize.com;
# . . . other code
return 301 https://linuxize.com$request_uri;
}
server {
listen 443 ssl http2;
server_name linuxize.com;
# . . . other code
}
将所有站点重定向到HTTPS
如果服务器上托管的所有网站都配置为使用HTTPS,并且你不想为每个站点创建单独的HTTP服务器块,则可以创建一个通用的HTTP服务器块,该块会将所有HTTP请求重定向到适当的HTTPS块。
要创建一个通用的HTTP块,它将访问者重定向到站点的HTTPS版本,请打开Nginx配置文件并进行以下更改:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
让我们逐行分析代码:
1、listen 80 default_server-将此服务器块设置为所有不匹配域的默认块。
2、server_name _-_是一个无效域名,从不与任何实际域名匹配。
3、return 301 https://$host$request_uri-将通信重定向到状态代码为301(永久移动)的相应HTTPS服务器块,$host变量保存请求的域名。
例如,如果访问者在浏览器中打开http://example.com/page2,则Nginx会将请求重定向到https://example.com/page2。
如果可能,最好在每个域的基础上创建重定向,而不是从全局HTTP到HTTPS重定向。
结论
在网站上安装SSL证书后,应将HTTP流量重定向到HTTPS。
在Nginx中,将HTTP重定向到HTTPS的首选方法是创建一个单独的服务器块并执行301重定向。
相关主题