在Nginx中将HTTP重定向到HTTPS

时间:2020-03-05 15:30:28  来源:igfitidea点击:

在本教程中,我们将说明如何在Nginx中将HTTP通信重定向到HTTPS。

Nginx的发音是“ engine x”,它是一个免费的,开源的,高性能的HTTP和反向代理服务器,负责处理Internet上一些最大站点的负载。

如果我们是开发人员或者系统管理员,则很可能会定期与Nginx打交道。
我们可能要执行的最常见的任务之一是将HTTP流量重定向到的安全(HTTPS)版本。

与HTTP(以纯文本形式发送和返回请求和响应)不同,HTTPS使用TLS/SSL加密客户端和服务器之间的通信。

通过HTTP使用HTTPS有很多好处,例如:

  • 所有数据都是双向加密的。结果,如果拦截了敏感信息,则无法读取。
  • Google Chrome浏览器和所有其他流行的浏览器都会将标记为安全。
  • HTTPS允许我们使用HTTP/2协议,这可以显着提高站点性能。
  • Google偏爱HTTPS。如果通过HTTPS提供服务,则排名将会更高。

在Nginx中将HTTP重定向到HTTPS的首选方法是为站点的每个版本配置一个单独的服务器块。
我们应该避免使用if指令重定向流量,因为它可能会导致服务器的意外行为。

每个站点将HTTP重定向到HTTPS

通常,当在域上安装SSL证书时,该域将有两个服务器块。
第一个用于端口80的站点的HTTP版本,另一个用于端口443的HTTPS版本。

要将单个重定向到HTTPS,请打开域配置文件并进行以下更改:

server {
    listen 80;
    server_name theitroad.com www.theitroad.com;
    return 301 https://theitroad.com$request_uri;
}

让我们逐行分解代码:

  • 'listen 80'-服务器块将侦听指定域在端口80上的传入连接。
  • “ server_name theitroad.com www.theitroad.com”-指定服务器块的域名。确保将其替换为域名。
  • 'return 301 https://theitroad.com$request_uri'-将流量重定向到的HTTPS版本。 '$request_uri'变量是完整的原始请求URI,包括参数。

通常,我们还将希望将站点的HTTPS www版本重定向到非www站点,反之亦然。
推荐的重定向方式是为www和非www版本创建一个单独的服务器块。

例如,要将HTTPS www请求重定向到非www,可以使用以下配置:

server {
    listen 80;
    server_name theitroad.com www.theitroad.com;
    return 301 https://theitroad.com$request_uri;
}
server {
    listen 443 ssl http2;
    server_name www.theitroad.com;
    # . . . other code
    return 301 https://theitroad.com$request_uri;
}
server {
    listen 443 ssl http2;
    server_name theitroad.com;
    # . . . other code
}

每当我们对配置文件进行更改时,都需要重新启动或者重新加载Nginx服务,以使更改生效:

sudo systemctl reload nginx

将所有站点重定向到HTTPS

如果服务器上托管的所有都配置为使用HTTPS,并且我们不想为每个站点创建单独的HTTP服务器块,则可以创建一个通用的HTTP服务器块。
该块会将所有HTTP请求重定向到适当的HTTPS块。

要创建一个将所有访问者重定向到站点的HTTPS版本的单个HTTP包,请打开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重定向。