Nginx 反向代理到不同位置的多个站点
Nginx reverse proxy to multiple sites on different locations
是否可以配置 nginx 反向代理,其中 http://localhost/a/ 指向 1 个站点,而 http://localhost/b/ 指向另一个站点?我试过这个配置:
server {
listen 80;
server_name localhost;
location /a/ {
proxy_pass http://apache.org/;
}
location /b/ {
proxy_pass http://www.gnu.org/;
}
几乎可以,但是网页返回的link都缺少/a/或/b/前缀,因此无法加载任何图片、样式等。例如link http://localhost/css/styles.css 不工作,但是 http://localhost/a/css/styles.css 工作。
是否有一个指令可以在页面上附加所有 links 合适的前缀?或者有不同的方法将网站放在不同的位置?
@ivan-shatsky,非常感谢。
只是想在其他人需要时添加工作配置。
map $http_referer $prefix {
~https?://[^/]+/a/ a;
default b;
}
server {
listen 80;
server_name localhost;
location / {
try_files /dev/null @$prefix;
}
location /a/ {
proxy_pass http://apache.org/;
}
location @a {
proxy_pass http://apache.org;
}
location /b/ {
proxy_pass http://www.gnu.org/;
}
location @b {
proxy_pass http://www.gnu.org;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}```
是否可以配置 nginx 反向代理,其中 http://localhost/a/ 指向 1 个站点,而 http://localhost/b/ 指向另一个站点?我试过这个配置:
server {
listen 80;
server_name localhost;
location /a/ {
proxy_pass http://apache.org/;
}
location /b/ {
proxy_pass http://www.gnu.org/;
}
几乎可以,但是网页返回的link都缺少/a/或/b/前缀,因此无法加载任何图片、样式等。例如link http://localhost/css/styles.css 不工作,但是 http://localhost/a/css/styles.css 工作。
是否有一个指令可以在页面上附加所有 links 合适的前缀?或者有不同的方法将网站放在不同的位置?
@ivan-shatsky,非常感谢。
只是想在其他人需要时添加工作配置。
map $http_referer $prefix {
~https?://[^/]+/a/ a;
default b;
}
server {
listen 80;
server_name localhost;
location / {
try_files /dev/null @$prefix;
}
location /a/ {
proxy_pass http://apache.org/;
}
location @a {
proxy_pass http://apache.org;
}
location /b/ {
proxy_pass http://www.gnu.org/;
}
location @b {
proxy_pass http://www.gnu.org;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}```