http://www.easysb.cn/2020/03/575.html
server_name_in_redirect off;
port_in_redirect off;
location /autotest 中加入
proxy_set_header Host $host
关于Nginx请求URL自动添加斜杠/的端口问题
概述
最近在使用Nginx做了两层,第一层为用户访问的Nginx反向代理,监听端口为80,第二层为处理本地静态文件、并将json数据请求代理到apche,监听端口为8080。在测试的过程中,发现一个小问题,就是当请求的URL没有斜杠时,会自动默认301跳,转添加斜杠/,通过Location跳转,跳转时带上了后端nginx的端口,比如:
当我请求一下地址为:http://www.easysb.cn/product
时,返回的请求结果为Location跳转,新的URL为http://www.easysb.cn:8080/product/
,导致浏览器无法正确访问。
解决方案
通过查阅Nginx相关的文档,找到三个和此相关的配置指令,分别为:
- absolute_redirect: http://nginx.org/en/docs/http/ngx_http_core_module.html#absolute_redirect
Syntax: absolute_redirect on | off;
Default: absolute_redirect on;
Context: http, server, location
This directive appeared in version 1.11.8.
If disabled, redirects issued by nginx will be relative.
- server_name_in_redirect: http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name_in_redirect
Syntax: server_name_in_redirect on | off;
Default: server_name_in_redirect off;
Context: http, server, location
Enables or disables the use of the primary server name, specified by the
server_name directive, in absolute redirects issued by nginx. When the
use of the primary server name is disabled, the name from the “Host”
request header field is used. If this field is not present, the IP
address of the server is used.
- port_in_redirect: http://nginx.org/en/docs/http/ngx_http_core_module.html#port_in_redirect
Syntax: port_in_redirect on | off;
Default: port_in_redirect on;
Context: http, server, location
Enables or disables specifying the port in absolute redirects issued
by nginx.
简单来说,absolute_redirect
是指控制跳转的url是绝对路径还是相对路径,这个指令是在1.11.8
版本才出现。绝对路径就是刚刚上面的http://www.easysb.cn/product
,相对路径就是/product
。很显然,只有在这个开关为开的时候,才会影响到后面两个指令。我这部署的nginx为1.10.1
,所以在1.11.8
之前应该都是开的。
server_name_in_redirect
指令是只跳转的URL的域名是用配置文件nginx.conf中的配置的server_name
,还是用请求中获取。默认值为off,即从请求中获取。
port_in_redirect
指令是只跳转的URL的端口是用配置文件nginx.conf中的配置的port
,还是用请求中获取。默认值为on,即配置文件定义。
了解完三个指令之后,就很容易解决了,只需要将第二个nginx的port_in_redirect
将其关闭,直接从请求中获取,即:
# absolute_redirect on # 只有1.11.8 才支持,低版本不需要配置
server_name_in_redirect off;
port_in_redirect off;
网友评论