我需要将子域转换为子目录,如abc.example.com => example.com/abc,我阅读了nginx论坛并尝试使用config进行代理传递,如下所示:
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";
}
}
配置文件有效,但它打开空白页,控制台错误为:
未捕获的SyntaxError:意外的标记<
我意识到对于像/ api和/ css这样的调用,它必须如下所示
example.com/api
example.com/css
而不是abc.example.com:
abc.example.com/api
abc.example.com/css
所以在我如上所述更改配置文件后,如果我尝试打开abc.example.com而不是获取example.com/abc,我会获得example.com的主页。
总体:需要帮助才能将子域映射到子路径/子目录而不需要修改URL(重定向关闭),并且应在顶级(根)域调用/ api和/ css。
感谢您耐心阅读整个问题并帮助解决问题!
P.S。 我按如下方式修改了配置:paste。我们能够将带有URI的映射保留为abc.example.com但不能删除/ abc。因此,出现的URI是abc.example.com/abc,而我们需要它只是abc.example.com。简而言之,需要帮助从出现在客户端的URL中删除额外的 / abc 。
答案 0 :(得分:1)
尝试这样的事情:
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";
}
}