Redirect NGINX:子域到子目录,无需重定向

Redirect NGINX:子域到子目录,无需重定向,redirect,nginx,subdomain,subdirectory,Redirect,Nginx,Subdomain,Subdirectory,我需要将子域转换为子目录,如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

我需要将子域转换为子目录,如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;
}
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";
    }
}
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;
}
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";
    }
}
配置文件可以工作,但它会打开空白页,控制台错误如下:


未捕获的语法错误:意外标记尝试以下操作:

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";
  }
}

但是,我必须补充一点,您可能希望从nginx静态地为/css提供服务器。谢谢您的回答!我试过你提到的配置。链接abc.example.com仍然将我带到example.com的主页,而不是example.com/abc,这是我们在proxy-pass中传递的内容。一定是您的上游配置导致了问题;您可能希望使用可选模块来确保在上游和代理传递问题上所有引用都已更改,并且它能够呈现abc.example.com,但URI=>abc.example.com/abc。Sub_过滤器也没有用。谢谢你的帮助@manishrw,你一定在用答案中提供的以外的东西。加载abc.example.com时,它应该可以在没有任何额外的
/abc
的情况下工作。