Nginx反向代理具有不同的上下文路径

我正在尝试使用nginx来反向代理同一主机/端口上的多个Web应用程序,并使用不同的路径来区分应用程序。

我的nginx配置如下所示:

proxy_set_header Host $http_host;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection $proxy_connection;

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 $proxy_x_forwarded_proto;

proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;

proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;

upstream app1 {

server 192.168.0.1:8080;

}

upstream app2 {

server 192.168.0.2:8080;

}

server {

server_name my-application-server;

listen 80;

location /app1/ {

proxy_pass http://app1/;

}

location /app2/ {

proxy_pass http://app2/;

}

}

这可以正确地代理对我的应用程序上的各个页面的任何请求-例如http://my-application-

server/app1/context/login,但是我的应用程序中的任何超链接都被破坏了,因为它们缺少app1路径的一部分-

例如,它们将我定向到http://my-application-server/context/login-success而不是http://my-

application-server/app1/context/login-success

我尝试为proxy_redirect和添加各种值rewrite,但是我没有办法说服这些链接正确呈现。

我的应用程序是在tomcat中运行的java

webapp,如果有什么区别的话。我已经看到了其他解决方案,可以在其中更改我的Web应用程序的上下文路径,但是我需要nginx透明地代理请求,而不必将tomcat配置为了解nginx路径。

回答:

首先,没有什么比将后端从根域透明地代理到具有添加的基本URL的域更好的了。

如果要代理http://xyz/abchttp://def则无法百分百保证一切正常。您需要特定于应用程序的更改

如果您的后端API不能返回访问当前URL的URL,那么您就不必担心proxy_pass。但是,如果您有html,则需要修复所有问题。

查看我为泛滥后端创建的简单配置

如所能,所有sub_filter都可以修复CSS,JavaScript和HTML中的URL。而且我必须运行它,查找问题,然后实施修复程序。下面是配置供您参考

location ~* /deluge/(.*) {

sub_filter_once off;

sub_filter_types text/css;

sub_filter '"base": "/"' '"base": "/deluge/"';

sub_filter '<head>' '<head>\n<base href="/deluge/">';

sub_filter 'src="/' 'src="./';

sub_filter 'href="/' 'href="./';

sub_filter 'url("/' 'url("./';

sub_filter 'url(\'/' 'url(\'./';

set $deluge_host 192.168.33.100;

set $deluge_port 32770;

proxy_pass http://$deluge_host:$deluge_port/$1;

proxy_cookie_domain $deluge_host $host;

proxy_cookie_path / /deluge/;

proxy_redirect http://$deluge_host:$deluge_port/ /deluge/;

}

您可以根据自己的应用自定义以上内容。但是下面是您需要的

location /app1/ {

sub_filter_once off;

sub_filter '<head>' '<head>\n<base href="/app1/">';

sub_filter 'src="/' 'src="./';

sub_filter 'href="/' 'href="./';

}

以上是 Nginx反向代理具有不同的上下文路径 的全部内容, 来源链接: utcz.com/qa/428313.html

回到顶部