我们的内部服务器使用nginx,做网站测试之用。不同域名使用端口号区分,如www用默认的80端口,其它域名用81,82...
比如858端口下有个hx目录,这样正常访问:http://192.168.8.58:858/hx/ 估计应该是和nginx自动加斜杠的问题相关,试了下,果然如此。
在某些情况下(具体可参考 wiki.nginx.org),Nginx 内部重定向规则会被启动,例如,当 URL 指向一个目录并且在最后没有包含“/”时,Nginx 内部会自动的做一个 301 重定向,这时会有两种情况:
引用
原配置,没有加server_name:
复制代码代码如下:
server {
listen 858; }
修改后:
复制代码代码如下:
server {
listen 858; server_name 192.168.8.58; } 或: server { listen 858; server_name_in_redirect off; } 此问题解决。访问http://192.168.8.58:858/hx可以正常跳转到http://192.168.8.58:858/hx/了。
分析:服务器的hostname是localhost.localdomain,当没有设置server_name时,server_name就变成hostname了。
另,如果使用了范解析,一般会这个配置:
复制代码代码如下:
server{
listen 80; server_name _; }
如果有个phpcheck目录,有人不小心链了http://www.jbxue.com/phpcheck这样一个链接,就会重定向到http://_/phpcheck/。
复制代码代码如下:
server{
listen 80; server_name _; server_name_in_redirect off; } 这时,访问www.jbxue.com/phpcheck,就会自动并且正确的跳转到www.jbxue.com/phpcheck/了。
附:晚上升级一台服务器的nginx版本时,在changes里看到:
*) Change: now the "server_name" directive default value is an empty
*) Change: now the "server_name_in_redirect" directive default value is |