2013-01-18 88 views
1

我想設置一個基於位置而不是偵聽端口或server_name的nginx代理。基於位置的nginx代理

upstream cluster 
{ 
    server cluster1:8080; 
    server cluster2:8080; 
} 
server 
{ 
    listen 80; 
    server_name mydomain.com; 
    location /hbase 
    { 
     proxy_pass http://cluster; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 
    } 
} 

我知道這可能是一個非常簡單的東西,我失蹤了。基本上路由似乎工作,但它實際上最終調用「http:// cluster1:8080/hbase」時,它應該只是將流量路由到服務器沒有hbase部分。

重寫規則可以工作,但我似乎無法找到一種方法來重寫nginx;我可以讓它重定向,但我希望實際的端口對外界不可見。

這工作完全,但我只希望允許在端口80

upstream cluster 
{ 
    server cluster1:8080; 
    server cluster2:8080; 
} 
server 
{ 
    listen 555; 
    server_name mydomain.com; 
    location/
    { 
     proxy_pass http://cluster; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 
    } 
} 

交通是否有可能使用正則表達式從轉發的請求刪除HBase的一種方式?

解答:

location /hbase 
{ 
    rewrite ^/hbase$|^/hbase/$|^/hbase/(.*)$ /$1 break; 
    proxy_pass http://cluster; 
} 

回答

1

存在一個有效rewritenginx的。以下應該工作(沒有嘗試)

location /hbase 
    { 
    rewrite ^.*$/break; 
    proxy_pass http://cluster; 
+0

謝謝。我曾嘗試過,但並未考慮將所有三種情況都添加到正則表達式中。 – Eulalie367

+0

噢好吧,不知道'/ hbase /'後面有什麼東西。很高興它的工作! –