【问题标题】:proxy pass configuration in nginxnginx中的代理传递配置
【发布时间】:2015-12-08 00:01:01
【问题描述】:

我是一名前端开发人员,上次尝试了 nginx 配置,效果很好。下面是配置:

server {
    listen       80;
    server_name  localhost;
    access_log  /var/log/nginx/localhost.access.log;
    location / {
             #By default route to node.js running on localhost:9000 port
             proxy_pass http://localhost:9000;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection 'upgrade';
             proxy_set_header Host $host;
             proxy_cache_bypass $http_upgrade;
    }
    #currently only one server but will have to redirect to n hosts based on a parameter
    location /hosts.json {
      proxy_pass      http://app-host.net:3000;
    }
    #currently only one server but will have to redirect to n hosts based on a parameter
    location /hosts/ {
      proxy_pass      http://app-host.net:3000;
    }
}

现在,我需要根据一个参数重定向到 4 个不同的服务器。即如果城市是Bangalore,我需要重定向到bangalore.corp.net:3000,如果城市是NewYork,那么我需要重定向到newyork.corp.net:3000,依此类推。

我有点期待:

location /app1/hosts/ {
      proxy_pass      http://app1-host.net:3000;
    }
#But the proxy pass should point to http://app1-host.net:3000/hosts and not http://app1-host.net:3000/app1/hosts

我们如何在 nginx 配置文件中处理这样的代理传递。请告诉我。

【问题讨论】:

  • 如果您正在寻找基于参数值的条件重写,您也许可以调整这个答案:serverfault.com/questions/488444/…
  • 是代理通行证还是重定向。我想要代理通行证而不是重定向
  • rewrite 可以做任何一个,见可选的[flag] 参数:nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
  • 您声明需要根据参数进行重定向。你能用一个具体的例子来更新你的问题吗?我不清楚参数是否是 URI 的查询元素的一部分,如果是,为什么不能使用路径元素。显然使用路径元素(nginx 调用位置)将是最有效的。
  • @RichardSmith 根据我分享的上述配置,我需要为特定请求代理传递到 4 个不同的应用服务器。说/hosts 我想调用4 个应用服务器中的任何一个proxy-pass http://app1-host.net:3000; http://app2-host.net:3000; http://app3-host.net:3000; http://app4-host.net:3000; 这应该基于我将传递的参数。说/app1/hosts 那么它应该代理传递给app1-host.net:3000;ope 我很清楚。还通过添加更多细节来编辑问题。希望这会有所帮助。

标签: nginx reverse-proxy proxypass


【解决方案1】:

您有一个 /app1/hosts/foo 形式的 URL,它应该映射到 http://app1-host.net:3000/hosts/foo。这可以通过在proxy_pass 指令中附加一个URI 来实现,它的作用类似于alias

location /app1/hosts/ {
  proxy_pass http://app1-host.net:3000/hosts/;
}

详情请见this document

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2017-05-16
    • 2012-05-09
    • 2018-05-06
    • 2018-01-07
    • 1970-01-01
    相关资源
    最近更新 更多