基于位置的nginx代理

时间:2013-01-18 17:11:20

标签: nginx reverse-proxy

我想设置一个基于位置而不是侦听端口或server_name的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 个答案:

答案 0 :(得分:1)

nginx 中有效率rewrite。以下应该有效(没试过)

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