如何将NGINX请求从非WWW重定向到WWW

时间:2020-01-09 10:39:34  来源:igfitidea点击:

说明

在本教程中,我们将学习如何在NGINX中使用重定向将流量强制到www域。

HTTP重定向

HTTP请求可能有两种重定向类型。第一个是状态302,在维护站点或者从临时平台托管时临时使用该状态。

第二种重定向是状态301,它是永久重定向。这指示Web浏览器和Web搜寻器输入的URL不再有效,并且内容已永久移动。

将非WWW重定向到WWW

要重定向流量,NGINX必须首先监听非WWW的请求。为此,我们将创建一个侦听器来捕获此类流量。一旦被捕获,流量将被重定向到正确的主机名。

捕获非WWW流量

以下示例NGINX虚拟服务器将监听名为theitroad.com的域的非WWW通信。

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

上面的虚拟服务器在端口80上侦听针对theitroad.com的任何请求。然后,使用return指令重定向此侦听器捕获的所有流量。

返回直接将状态设置为301,以传达内容已永久移动。返回指令包含一个变量$ request_uri,该变量添加到目标URL。这指示NGINX将传入请求的整个URI添加到重定向。

监听WWW流量

NGINX还必须侦听WWW流量。我们创建第二个虚拟服务器来处理此请求。

server {
  listen 80;
  server_name www.theitroad.com

  location / {
    proxy_pass http://backend
  }
}

upstream backend {
  ip_hash;
  server app01:8080;
  server app02:8080;
}

测试重定向

可以使用Web客户端(例如Web浏览器或者curl命令)测试重定向。从浏览器重定向到非WWW重定向到WWW是足够可见的。

但是,使用类似这样的命令可以提供有关如何处理请求的更多详细信息。要验证重定向是否正常工作,可以使用以下命令。

curl -IL http://theitroad.com/

该命令的输出将类似于以下示例。要注意的关键行项目是HTTP / 1.1 301永久移动行。这让我们知道重定向正在按预期工作。

HTTP/1.1 301 Moved Permanently
Server: nginx/1.14.0 (Ubuntu)
Date: Wed, 29 May 2019 03:43:15 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Mon, 27, May 2019 22:49:05 GMT
Connection: keep-alive