Nginx地址重定向使用

来源:互联网 发布:天猫旗舰店的流量数据 编辑:程序博客网 时间:2024/05/22 13:58

Nginx地址重定向使用

在使用Nginx作为服务器时,经常遇到的需求就是对地址进行重定向(301重定向),而重定向可以解决很多服务器应用需求,而且Nginx实现这一切都比较简单。那么,我们常见的重定向有哪些?这里我就罗列几个常见的需求:http重定向到https、www自动补全、redirect对https的支持。当然,也有很多人在使用rewrite重写地址实现重定向,但在这里并不推荐,因为它在不同的Nginx版本是有缺别的,而301是推荐使用的,因为它是http/https通信协议的标准,与服务器本身无直接关系。

 

l   http到https

l   www自动补全

l   跳转对https支持

 

 

 

一、http到https

Https在Nginx的配置,读者可以查看文章《Nginx的CA证书使用总结》,这里有它详细的实现过程。其中,如何实现http到https的切换,就用到了Nginx的301重定向实现,具体如下样子(放在nginx.conf的Server区域):

if ($scheme = http) {

    return 301https://$server_name$request_uri;

}

 

 

二、www自动补全

www自动补全,指的是不需要输入www,仅输入一级域名即可自动在前面添加www,比如:xxx.com为一级域名,www.xxx.com为二级域名,那么输入xxx.com就可以自动切换为www.xxx.com访问。上面的情况是同一个域名的自动定位,其实我们可以直接在域名管理平台,如:阿里云上直接添加一个xxx.com记录值,将主机值设为@即可(推荐),并不是必须通过配置Nginx实现。

另外一种情况,就是在www.xxx.com中重定向到yyy.com一级域名,并实现自动定位到www.yyy.com二级域名,那么同样可以先在域名管理平台添加yyy.com一级域名,遇上面类似操作。然后,在Nginx添加如下配置即可:

 

server_name  yyy.com

if ($host =’yyy.com’) {

    return 301 http://www.yyy.com$request_uri;

}

 

如果想同时跳转到https,仅需要如下配置:

server_name  yyy.com

if ($host =’yyy.com’) {

    return 301 https://www.yyy.com$request_uri;

}

 

 

三、跳转对https支持

很多时候,我们所部署的应用程序,通过其本身提供的redirect实现跳转功能时,如果跳转前为https方式请求,跳转后,则协议默认改为http了,结果引发了很多需要https才能访问的操作都不能进行。那么,此时我们就需要配置nginx.conf,使其在跳转时,支持自动从http跳转到https,其实配置较简单,具体如下:

location /xxx {

   proxy_set_header Host$host;

   proxy_set_headerX-Forwarded-For $remote_addr;

   proxy_pass  https://www.yyy.com:port;

   index index.htmlindex.htm index.php;

   proxy_redirect http://$scheme://;

}

 

正如上面所示,该配置情况是使用nginx作为代理服务器,通过proxy_pass中转到tomcat服务器(这是较常见的使用)。那么,通过proxy_redirect配置,就可以完美实现应用程序使用redirect跳转时,做到保留对https的切换,因为大部分应用程序的redirect仅支持默认的http协议方式。

 

 

 

实际上,Nginx的301重定向可以解决很多需求,需要读者灵活使用即可。