NGINX代理到具有重写根路径的子目录

时间:2019-06-17 16:07:33

标签: nginx proxy

这是类别中的一个问题: “我什至不确定我想要的东西是否可行”。

所以我在LXC容器中有一个应用程序。我使用nginx代理将http://domain.name.com/service/client-name/转发到XXX.XXX.XXX.XXXX:5000(在主机上运行的LXC容器)。

这是我的/etc/nginx/sites-enabled/domain.name.com

server {
  listen 80;
  listen [::]:80;

  server_name domain.name.com;
  return 301 https://$host$request_uri;
}


server {
  listen 443 ssl;
  listen [::]:443 ssl;

  server_name domain.name.com;

  # Logs
  access_log            /var/log/nginx/access.log;
  error_log             /var/log/nginx/error.log;

  # SSL Cert
  ssl_certificate       /var/www/ssl/name.com_combined.crt;
  ssl_certificate_key   /var/www/ssl/name.com.key;

  auth_basic            "Contact company representative for auth";
  auth_basic_user_file  /etc/nginx/.htpasswd;


  # Proxy
  location /service/client-name/ {
    proxy_pass          http://XXX.XXX.XXX.XXXX:5000/;
    proxy_redirect      off;
    proxy_set_header    Host             Host $host;
    proxy_set_header    X-Real-IP        $remote_addr;
    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto $scheme;
  }
}

它正在工作。 有办法 网站开通了。

但是我的服务使用了大量对/的引用。例如,api/info/则请求/api/info。因此我的代理正在工作,正在加载应用程序的主页,但应用程序无法访问以/开头的任何路径。例如。它应该请求http://domain.name.com/service/client-name/api/,但请求http://domain.name.com/api/,因为代码中的路径是绝对路径(指向/)。

是否可以通过任何方式配置nginx以/替换所有以/service/client-name/开头的路径,或告诉浏览器根路径不是/而是/service/client-name/(也许提供一些标头,但我找不到类似的东西)?

我想要更多的服务,例如:

http://domain.name.com/service/client-name/
http://domain.name.com/service/another-client/
http://domain.name.com/service/and-one-more/

...所以我不能简单地将http://domain.name.com/api/重定向到http://domain.name.com/service/client-name/api,因为所有这些实例都会在http://domain.name.com/api/中寻找API。

我尽可能地用Google搜索,但是找不到解决方案。我相信这是一个有趣且颇受欢迎的案例,很难相信还没有人找到解决方案。

了解应用程序是用Node.js编写的,这可能会很有用。当然,我可以重构应用程序,但是我已经在不同版本中部署了许多实例,迁移将需要一些时间。

0 个答案:

没有答案