【问题标题】:nginx proxy based on location基于位置的 nginx 代理
【发布时间】:2013-01-19 03:27:45
【问题描述】:

我想设置一个基于位置而不是侦听端口或 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;
}

【问题讨论】:

    标签: nginx reverse-proxy


    【解决方案1】:

    nginx 中有一个高效的rewrite。以下应该可以工作(没有尝试)

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

    【讨论】:

    • 谢谢。我已经尝试过了,但没有考虑将所有三种情况都添加到正则表达式中。
    • 哦,好吧,不知道/hbase/之后还有什么东西。很高兴它有效!
    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多