nginx入门二

反向代理:

proxy_pass

    server {
        listen       80;
	location /n {
		proxy_pass http://127.0.0.1:8000/test;

	}
	location /m {
		proxy_pass http://127.0.0.1:8000/test/;

	}
    }

 http://127.0.0.1:8000 是python 提供的http服务。


 

访问:http://127.0.0.1/n

结果重定向到:http://127.0.0.1/test/

404 Not Found


 

访问:http://127.0.0.1/n/

结果正常

Directory listing for /test/


 

访问:http://127.0.0.1/nhaha  ,  http://127.0.0.1/nhaha/

Error response

Error code 404.


 

访问:http://127.0.0.1/m

结果正常

Directory listing for /test/


 

访问:http://127.0.0.1/m/

结果正常

Directory listing for /test//


 

访问:http://127.0.0.1/mhaha

结果重定向到:http://127.0.0.1/test/haha/

404 Not Found


 

访问:http://127.0.0.1/mhaha/

结果正常

Directory listing for /test/haha/


 

 

只要是重定向的,请求都没有经过proxy_pass,nginx直接返回了。

但是如果在配置文件加入:

	location / {
		proxy_pass http://127.0.0.1:8000/;
		
	}

 

访问:http://127.0.0.1/n

重定向到:http://127.0.0.1/test/

结果正常

Directory listing for /test/

由此可知nginx的匹配应该是有一个优先级的。

	location /m2 {
		proxy_pass http://127.0.0.1:8000/test/haha/;

	}

 访问:http://127.0.0.1/m

那么肯定选择/m匹配,结果:

Directory listing for /test/


 

访问:http://127.0.0.1/m2

那么肯定选择/m2匹配,结果:

Directory listing for /test/haha/


 

访问:http://127.0.0.1/m3

由于配置文件没有/m3,所以nginx会尝试/m

/m=http://127.0.0.1:8000/test/

/m3=http://127.0.0.1:8000/test/3

所以重定向到:http://127.0.0.1/test/3/

Directory listing for /test/3/


 

分析总结:

nginx的匹配是:先窄范围后宽范围。这也解释了在添加 location /{...}之前重定向返回404,后来有正常。因为之前 / 指向的是nginx的html目录,配置后 /指向python监听的目录(/root/Downloads/)。

是否重定向由:匹配后的url后面是否有"/"决定。/m3=http://127.0.0.1:8000/test/3(重定向),/m3/=http://127.0.0.1:8000/test/3/(不重定向)

我们也发现这样的匹配会由超出预期的结果,比如/m3,/mhaha

所以在写匹配规则的时候还是:

	location /uri/ {
		proxy_pass http://127.0.0.1:8000/uri 或 proxy_pass http://127.0.0.1:8000/uri/
       }    

 

posted @ 2017-11-29 17:58  懒企鹅  阅读(261)  评论(0编辑  收藏  举报