首页 > 解决方案 > 在 Nginx 中处理来自单个域的多个应用程序

问题描述

我试图将 Nginx 配置为处理多个应用程序(后端)以处理单个域(server_name),但我遇到了一个奇怪的问题。

我想做的是,

www.test.com -------------> serving the main application (127.0.0.1:7888)
             |
             -------------> management application (127.0.0.1:2666)

我的初始配置如下,

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

  server_name  test.com;

  ## SSL settings
  ssl on;

  location / {
    proxy_pass http://127.0.0.1:7888;

    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
  }

  location /management {
    rewrite ^/management/(.*)$ /$1 break;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    proxy_pass https://127.0.0.1:2666;
  }
}

这适用于主要应用程序。它也可以路由到/management应用程序,但是它试图management通过主应用程序访问静态文件并抛出404.

为了纠正这个问题,我将配置修改为,

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

  server_name  test.com;

  ## SSL settings
  ssl on;

  location / {
    proxy_pass http://127.0.0.1:7888;

    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    try_files $uri $uri/ @fallback;
  }

  location /management {
    rewrite ^/management/(.*)$ /$1 break;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    proxy_pass https://127.0.0.1:2666;
  }

  location @fallback {
    proxy_pass https://127.0.0.1:2666;
  }
}

/management由于配置,现在应用程序运行良好,但不是主应用程序try_files

有没有办法解决这个问题?

标签: nginx

解决方案


推荐阅读