今天在配置一个location的时候,但愿使用一个变量如$host来指示nginx代理:nginx
- location /test/
- {
- proxy_pass http:
- }
如你想不到,这个配置是不能使用的,查看error.log,打出来的信息也没法帮助解决问题。
但相同状况下,root标签就工做得很好:web
- locatin /test/
- {
- root /dev/shm/$host;
- }
使人匪夷所思,估计这是nginx的一个bug,或者是一个搅不清的逻辑?
把上面的错误配置改为正则表达式
- location /test/
- {
- proxy_pass http:
- }
或者apache
- set $vhost "test.sudone.com";
- location /test/
- {
- proxy_pass http:
- }
等等,都不能解决问题,最后是用了个奇怪的配置方式,竟然能工做……后端
- location /test/ {
- proxy_pass http:
- proxy_set_header Host $host;
- }
这个配置就能工做正常,但上面这个配置只支持单ip的后端,能不能支持upstream呢?
再改一下测测服务器
- upstream backend.sudone.com
- {
- server 127.0.0.1:80;
- }
- location /test/
- {
- proxy_pass http:
- proxy_set_header Host $host;#$host=test.sudone.com;
- }
嗯?能用!
有了这个办法,我便不用在数十个主机配置内把/test/这个location贴上数十次,另外,它也能够支持这样的写法:fetch
- location /test/
- {
- proxy_pass http:
- proxy_set_header Host fetch.$host;
- }
还能够用正则表达式对host进行匹配:spa
- set $vhost $host;
- if ($host ~* "([^\.]+)\.92csz\.com")
- {
- set $vhost $1.92csz.com;
- }
- location /test/
- {
- proxy_pass http:
- proxy_set_header Host fetch.$host;
- }
可用的方面就广了。代理
---------------------------------------------------server
补充:
在这个配置里,个人nginx代理的后端(backend)也是nginx,目前尚不清楚其它的web服务器如apache等是否能在这样的配置下工做正常。