我的NGINX反向代理上有一个.conf文件。 我收到如下请求网址: http://www.example.com/messaging
我需要获取它来将/ messaging转换为/ system / console,转换为karaf容器。 看起来很简单,但事实并非如此,我会更好地解释原因。
容器位于另一个子域中,例如 http://subdomain.local.example.com/system/console
我能使它工作的唯一方法是不加载任何静态文件(图像,js,css),仅加载html,就像这样:
location /messaging {
expires -1;
add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
rewrite /messaging/(.*) /$1 last;
proxy_pass http://subdomain.local.example.com/system/console/;
}
通过这种方式,图像在http://subdomain.local.example.com/system/console/res/flags/en.gif处被请求 而不是消息传递/system/console/res/flags/en.gif。
这是我的完整配置文件(不幸的是,此处缩进不正确,我可以确保它在配置文件上是正确的):
upstream app-web-dev-lb {
server app-web-dev-01:8080;
server app-web-dev-02:8080;
}
server {
listen 80;
server_name app-dev.example.com;
client_max_body_size 50M;
location /my-services {
expires -1;
add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
proxy_pass http://app-cm-dev.local.example.com/my-services;
}
location /app-messaging {
expires -1;
add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
#rewrite /app-messaging/(.*) /system/console/$1 break;
#rewrite /system/console/(.*) /app-messaging/$1 break;
#rewrite /app-messaging/(.*) /$1 last;
rewrite /app-messaging/(.*) /$1 break;
#rewrite /system/console/res/(.*) /app-messaging/res/$1 last;
#rewrite /app-messaging/res/(.*) /system/console/res/$1 last;
#rewrite /app-web(.*) /$1 last;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header Host $http_host;
#proxy_set_header Host $host;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_pass http://servicemix-dev.local.example.com/system/console;
#proxy_pass http://servicemix-dev.local.example.com/system/console/bundles;
proxy_pass http://servicemix-dev.local.example.com\;
#proxy_redirect /system/console /app-messaging/system/console;
#proxy_redirect default;
#proxy_redirect off;
#proxy_set_header Host $host;
}
location / {
expires -1;
add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
rewrite /app-web(.*) /$1 last;
proxy_pass http://app-web-dev-lb/app-web/;
}
location /app-web {
expires -1;
add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
rewrite /app-web(.*) /$1 last;
proxy_pass http://app-web-dev-lb/app-web/;
}
}
最后一点,我不想将/ messaging重定向到/,因为我有一个默认的/地址,该地址已经重定向到其他路径。 因此,我不想添加/ system位置,因为我将拥有更多的Kafka容器。 我想了解为什么在/ messaging位置无法识别所有请求,为什么将某些请求重定向到/ system / console /.....
有人可以帮助我了解我在做什么错吗? 非常感谢您的帮助!
最好的问候, 路易斯·纳拜斯(Luis Nabais)
答案 0 :(得分:0)
您可以通过两种方式将URI从/messaging/foo
重写为/system/console/foo
。
方法一使用location
和proxy_pass
指令进行翻译。例如:
location /messaging {
expires -1;
add_header ...;
proxy_pass http://subdomain.local.example.com/system/console;
}
location
和proxy_pass
语句上的URI应该都带有尾随/
,或者都不应该带有尾随/
。有关详细信息,请参见this document。
方法二使用rewrite...break
。例如:
location /messaging {
expires -1;
add_header ...;
rewrite /messaging(/.*)?$ /system/console$1 break;
proxy_pass http://subdomain.local.example.com;
}
您必须使用break
,因为重写的URI需要在同一location
块中进行处理。有关详细信息,请参见this document。