Nginx地址重定向使用
Posted 云水之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx地址重定向使用相关的知识,希望对你有一定的参考价值。
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重定向可以解决很多需求,需要读者灵活使用即可。
以上是关于Nginx地址重定向使用的主要内容,如果未能解决你的问题,请参考以下文章