nginx:proxy_pass子目录到其他服务器

时间:2017-01-15 13:43:28

标签: ssl nginx reverse-proxy

我使用nginx作为Web服务器启用了SSL的反向代理。

Web服务器提供WoltLab Suite论坛5.0.0(以前称为刻录板),并将一些子域代理到不同的主机,如NodeJS后端,Tomcat后端和许多其他不同的服务。

到目前为止这种方法很有效,但现在我遇到了一个问题,即我不能再使用子域来实现这一目标。

请不要问为什么,请不要。

现在,我不能再使用子域了,我试图让它使用子目录。

一个例子:

xyz.example.com 指向 12.13.14.15 的nginx服务器。

nginx将对 xyz.example.com 的所有请求代理为 10.20.30.40:1234

现在我希望nginx将对 example.com/xyz / 的所有请求代理到 10.20.30.40:1234

我使用Apache Archiva作为后端服务,但是我的NodeJS后端等所有其他服务都拒绝使用我当前的配置正常工作。 它将我发送到BurningBoard,它向我显示了他们的页面未找到页面。

example.com/xyz/admin/index.php 变为 example.com/admin/index.php 当然不会工作。

代理Archiva的目录具有完全相同的配置,当然只有其他目录名称。  在我从Web上调用它后,Archiva URL看起来像这样:

example.com/repo/ 成为 example.com/repo/#welcome ,并向我展示Archivas欢迎页面。

这正是我对其他服务的要求。

以下是我目前的nginx配置文件(用X替换敏感数据):

<=== sites-available/default ===>

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name XXXX.XX www.XXXX.XX;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl default_server;
   listen [::]:443 ssl default_server;
   include snippets/ssl-XXXXX.XX.conf;
   include snippets/ssl-params.conf;

   root /var/www/html;
   include /etc/nginx/snippets/proxies.conf;

   # the last try_files argument is for SEO friendly URLs for the WSF 5.0
   location / {
     index index.php;
     try_files $uri $uri/ /index.php?$uri&$args;
   }

   location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
   }

   # Lets Encrypt automation
   location ~ /.well-known {
    allow all;
   }

   location ~ /\.ht {
    deny all;
   }

}

<===  snippets/proxies.conf ===>

# Apache Archiva
location /repo {
  rewrite ^/repo(/.*)$ $1 break;
  proxy_pass http://XXXXXXXX:XXXXX;
  return 404;
}

# Git Solution
location /git {
  rewrite ^/git(/.*)$ $1 break;
  proxy_pass http://XXXXXXXX:XXXXX;
  return 404;
}

# Filehosting
location /cloud {
  rewrite ^/cloud(/.*)$ $1 break;
  proxy_pass http://XXXXXXXX:XXXXX;
  return 404;
}

# NodeJS
location /webinterface {
  rewrite ^/webinterface(/.*)$ $1 break;
  proxy_pass https://XXXXXXXX:XXXXX;
  include /etc/nginx/snippets/websocket-magic.conf;
  return 404;
}

任何想法如何解决这个问题?

此外,如果您需要更多信息,请参阅nginx&#39;版本等。

0 个答案:

没有答案