Nginx、Weblogic 和按路径反向代理

Nginx、Weblogic 和按路径反向代理

在 nginx 中使用路径时,我无法让反向代理正常工作。我想做的是为应用程序设置一个地址,并用路径指定环境。根据路径,它会指向不同的服务器。使用直接链接时,我能够让反向代理正常工作,但使用路径会出现 404 错误。

app.foo.bar/dev = 404 错误 devapp.foo.bar = 成功

我在 app.foo.bar/dev 上做错了什么?

这是正在运行的反向代理设置,但我不想使用:

server  {
  listen  80;   # DEV Application Proxy
  server_name  devapp.foo.bar;
  location  / {
    proxy_pass  http://appserver.foo.bar:7010;
    proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-for $remote_addr;
        port_in_redirect off;
        proxy_redirect   http://appserver.foo.bar:7010/ /;
        proxy_connect_timeout 300;
    }
  }

这是我想要使用路径执行的部分操作,但是出现 404 错误。

# APP Environment Proxy

server {

  listen 80;
  server_name app.foo.bar;
     location /dev {
      proxy_pass http://appserver.foo.bar:7010;
      proxy_set_header    Host            $host;
      proxy_set_header    X-Real-IP       $remote_addr;
      proxy_set_header    X-Forwarded-for $remote_addr;
      port_in_redirect off;
      proxy_redirect     http://appserver.foo.bar:7010 /;
      proxy_connect_timeout 300;

  }
}

我已经在 Google 上搜索过这种设置,但找不到解决方案。在此先感谢您的帮助。

答案1

当您有时proxy_pass http://appserver.foo.bar:7010;,nginx 会将规范化的 URI 附加到传递给后端的请求 URL。

因此,当您请求时http://app.foo.bar/dev,请求将转到http://appserver.foo.bar:7010/dev。如果您的开发服务器没有此路径,则它将返回 404,nginx 将返回给客户端。

如果您希望所有以 开头的请求都http://app.foo.bar/dev转到 ,http://appserver.foo.bar:7010以便将 URI 的其余部分添加到后端服务器 URI,那么您可以使用此配置:

location ~ ^/dev(.+)$ {
    proxy_pass http://appserver.foo.bar:7010$1$is_args$args;
    ...
}

因此,我们将正则表达式后的部分捕获/dev到一个变量中,然后将该变量添加到proxy_pass路径的末尾。

相关内容