Nginx上游用http& HTTPS

时间:2015-03-16 06:58:53

标签: http ssl nginx https reverse-proxy

我有一些关于nginx的问题,http和https绕过,在上游块

上游区块:

upstream bypass{
      server 192.168.99.1:80; #http
      server 192.168.99.2:443 backup; #https
}

当http 80出现问题(服务器关闭等)时,我想重定向到https 443,

此块对我不起作用。

位置栏:

location / {
      proxy_pass https://bypass;
      proxy_redirect off;
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这很有效:为不同端口上的每个后端创建服务器配置部分,并在没有 ssl 的情况下在内部转发到两个端口。

在此示例中,您可以看到第一个服务器如何充当具有缓存内容(通过 https 可用)的主服务器,如果缓存内容不可用,则使用第二个服务器(通过 http)。

(使用nginx 1.19.6,仅供参考)

upstream backends {
    server 127.0.0.1:8082;
    server 127.0.0.1:8081 backup;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name example.com;

    # ssl certs etc here

    location / {
        proxy_pass http://backends;
        proxy_next_upstream error timeout http_404 http_403;
    }

    access_log  /var/log/nginx/access.log upstreamlog;
}

server {
    listen 8081;
    location / {
        add_header X-Cache MISS;
        proxy_pass http://server1;
        proxy_set_header Host server1;
    }
}


server {
    listen 8082;
    location / {
        add_header X-Cache HIT;
        proxy_pass https://server2;
        proxy_set_header Host server2;
    }
}

答案 1 :(得分:0)

在黑暗中拍摄。假设您在上游混合使用HTTP和HTTPS时遇到问题,可以在 A a = new A(); 块中尝试:

location

如果这不起作用,请将location { try_files @bypass-http @bypass-https =404; location @bypass-http { proxy_pass http://bypass; proxy_redirect off; } location @bypass-https { proxy_pass https://bypass; proxy_redirect off; } } 上游块拆分为bypassbypass1,并在相应的位置块中相应地引用它们:

bypass2

第三个选项是在端口80上引用它们,并确保第二个上游服务器将HTTP请求重定向到HTTPS。