NGINX:没有重定向的子域到子目录

NGINX: Subdomain to subdirectory without redirection

我需要将子域转换为子目录,例如 abc.example.com => example.com/abc,我阅读了 nginx 论坛并尝试使用如下配置进行代理传递:

abc.example.com nginx 配置文件:

location / {
    proxy_pass  http://example.com/abc;
    proxy_set_header 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;
}

example.com nginx 配置文件:

upstream example { 
    least_conn;
    server ip_addr_1:port;
    server ip_addr_2:port;
}
server {
    listen    80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}
server {
    listen 443;
    server_name example.com
    root /var/www/test/public_html;
    index index.html index.htm;
    ssl on;    
    ssl_certificate /etc/nginx/ssl/example.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/example.key;

    location / {
        proxy_pass http://example;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

配置文件有效,但打开空白页面并显示控制台错误:

Uncaught SyntaxError: Unexpected token <

我意识到对于像 /api 和 /css 这样的调用,必须按如下方式进行

example.com/api
example.com/css

而不是 abc.example.com:

abc.example.com/api
abc.example.com/css

所以在我如上所述更改配置文件后,如果我尝试打开 abc.example.com 而不是获取示例,我会得到 example.com 的主页。com/abc.

总体:需要帮助将子域映射到子路径/子目录,而无需更改 URL(重定向关闭)和 /api 和 /css 应该在顶级(根)域调用。

感谢您耐心阅读整题并帮助解决问题![​​=16=]

P.S. 我修改配置如下:paste。我们能够获得 URI 保留为 abc.example.com 的映射,但无法摆脱 /abc。因此,出现的 URI 是 abc.example.com/abc,而我们需要它只是 abc.example.com。简而言之,需要帮助摆脱出现在客户面前的 URL 中的额外 /abc

尝试这样的事情:

server {
  server_name abc.example.com;
  location / {
     proxy_pass http://example/abc/;
     proxy_set_header Host "example.com";
  }
  location /api {
     proxy_pass http://example;
     proxy_set_header Host "example.com";
  }
  location /css {
     proxy_pass http://example;
     proxy_set_header Host "example.com";
  }
}