Nginx上游与http&;https

Nginx上游与http&;https,http,ssl,nginx,https,reverse-proxy,Http,Ssl,Nginx,Https,Reverse Proxy,我对上游块中使用http和https旁路的nginx有一些问题 上游区块: 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_r

我对上游块中使用http和https旁路的nginx有一些问题

上游区块:

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;
}

我如何解决这个问题?

在黑暗中拍摄。假设您在上游混合HTTP和HTTPS时遇到问题,您可以在
位置
块中尝试此操作:

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;
    }
}
如果不起作用,则将
旁路
上游块拆分为
旁路1
旁路2
,并在相应的位置块中相应地引用它们:

upstream bypass1{
      server 192.168.99.1:80; #http
}

upstream bypass2{
      server 192.168.99.2:443; #https
}

location {
    try_files @bypass-http @bypass-https =404;

    location @bypass-http {
        proxy_pass http://bypass1;
        proxy_redirect off;
    }

    location @bypass-https {
        proxy_pass https://bypass2;
        proxy_redirect off;
    }
}

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

这很好:在不同端口上为每个后端创建服务器配置部分,并在内部转发到两个端口,而不使用ssl

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

(使用nginx 1.19.6,仅供参考)


你应该更具体地说明什么对你“不起作用”。您得到了什么错误或行为,以及希望发生什么?不幸的是,“try_files”只接受单个命名位置,并且仅作为最后一个参数。
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;
    }
}