我有2个服务器,一个有ssl,我就这样配置,
在具有SSL认证的服务器(https:// www.example.com)中:
location ~^/abc/.* {
proxy_pass http://www.example.com:8214/
}
在另一台服务器(http:// www.anotherExample.com)中:
server {
listen 8214;
server_name www.anotherExample.com;
rewrite ^/(.*)$ http://www.anotherExample.com:8080/$1 permanent;
}
并在访问https:// www.example.com/abc/api/getGroup
之后它无法重定向到http:// www.anotherExample.com:8080/api/getGroup
有什么不对吗???
答案 0 :(得分:1)
您可以采取一些措施来改善配置。
location ^~ /abc/ {
proxy_pass http://www.example.com:8214$uri;
#You should have other directives set here as well.
}
另外,请考虑设置upstream
。
然后,对于您的服务器块:
server{
listen 8124;
server_name www.anotherExample.com;
rewrite ^/abc/(.*)$ http://www.anotherExample.com:8080/$1 permanent;
}
server{
listen 8080;
server_name www.anotherExample.com;
location ^~ /api/ {
#your_config_here
}
}
解释:
在您的第一个location
区块中,您不应该在表达式中使用.*
。 Nginx将为您匹配。然后,当您进行代理时,您可以明确地告诉Nginx也发送URI。
接下来,您要发送包含www.anotherExample.com:8124
的URI /abc/
,以便在此之后提取所有内容。
最后,因为您已将其重写为指向8080
端口,所以您需要为此定义一个单独的服务器块。
我不知道你的目标是什么,但在大多数情况下,如此多的代理和重定向是不必要的,并且可能导致性能不佳。您应该考虑的另一个考虑因素是您将未加密的信息发送到anotherExample.com,如果不是在同一本地网络上,则可能是安全漏洞。