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";
}
}
我需要将子域转换为子目录,例如 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";
}
}