nginx从https重定向两次到http

时间:2016-07-28 12:11:36

标签: nginx https

我有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

有什么不对吗???

1 个答案:

答案 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,如果不是在同一本地网络上,则可能是安全漏洞。