Nginx发音为engine x,是一个开源的,高性能的HTTP和反向代理服务器,负责处理Internet上一些最大站点的负载。
如果您是开发人员或系统管理员,则可能会定期与Nginx打交道。您可能会执行的最常见任务之一是将HTTP重定向HTTPS。
与HTTP以纯文本形式发送和返回请求和响应不同,HTTPS使用TLS/SSL加密客户端和服务器之间的通信。
使用HTTPS有很多好处。例如:所有数据都是双向加密的。因此,如果被拦截,则无法读取敏感信息即不会出现被中间人攻击的情况。
Google Chrome浏览器和流行的浏览器都会将您的网站标记为安全。HTTPS允许您使用HTTP/2协议,Google偏爱HTTPS网站。如果通过HTTPS提供服务,您的网站将排名更高。
在Nginx中将HTTP重定向到HTTPS的首选方法是为站点的每个虚拟主机配置一个单独的server块。
您应该避免使用if指令重定向流量,因为它可能导致服务器的行为无法预测。
在本教程中,我们将说明如何在Nginx中将HTTP重定向HTTPS。包括将每个站点的HTTP重定向HTTPS,将所有站点/虚拟主机重定向到HTTPS,将非www重定向到www。
如果你不想研究这些,可以参考我们的教程如何在Ubuntu 20.04的Nginx上配置Let's Encrypt SSL证书。
将每个站点的HTTP重定向HTTPS
要将单个网站重定向到HTTPS,请打开server虚拟主机配置文件并进行以下更改:
server {
listen 80;
listen [::]:80;
server_name myfreax.com www.myfreax.com;
return 301 https://myfreax.com$request_uri;
}
listen 80
虚拟主机将监听端口80上指定域的传入连接。server_name myfreax.com www.myfreax.com
-指定server虚拟主机的域名。确保将其替换为您的域名。
return 301 https://myfreax.com$request_uri
将HTTP流量重定HTTPS。$request_uri
变量是包含参数的完整原始请求URI。
通常,您还希望将站点的非www开头重定向到www或者相反的方向。例如,要将www请求重定向到非www,请使用以下配置:
server {
listen 80;
listen [::]:80;
server_name myfreax.com www.myfreax.com;
return 301 https://myfreax.com$request_uri;
}
server {
listen 443 ssl http2;
server_name www.myfreax.com;
# . . . other code
return 301 https://myfreax.com$request_uri;
}
server {
listen 443 ssl http2;
server_name myfreax.com;
# . . . other code
}
将所有站点/虚拟主机重定向到HTTPS
如果服务器上托管的所有网站都配置为使用HTTPS,并且您不想为每个网站创建单独的虚拟主机配置,则可以创建一个通用的虚拟主机配置。该虚拟主机配置会将所有HTTP请求重定向HTTPS。
要创建一个通用的虚拟主机配置,它将访问者重定向HTTPS,请打开Nginx配置文件并进行以下更改:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
listen 80 default_server
将虚拟主机配置为默认为默认的 服务器,它将匹配所有域名。server_name _
是一个无效域名,从不与任何真实域名匹配。
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重定向。