首页 > Web开发 > 详细

nginx反向代理https访问502, nginx反向代理, 支持SNI的https回源,SNI源点,nginx反向代理报错

时间:2020-02-28 13:38:28      阅读:235      评论:0      收藏:0      [点我收藏+]

背景:

这事起源于需要一个反向代理,请求的后端是某开放云的CDN,CDN配置为基于HTTPS的虚拟主机(单IP多Host区分的虚拟主机)

注意:所以本文并不是你的nginx提供了https服务,而在于反向代理的后端是否为https服务。

正常nginx配置了SSL是可以通过HTTPS访问后端的,但是对SNI的支持有点麻烦。

代理服务器是nginx。以下为配置过程:

首先支持SNI协议的openssl版本最低为0.9.8f

Mozilla NSS 3.11.1 client-side only
OpenSSL
0.9.8f (released 11 Oct 2007) – not compiled in by default, can be compiled in with config option ‘–enable-tlsext’
0.9.8j (released 07 Jan 2009) through 1.0.0 (released 29 March 2010) – compiled in by default
GNU TLS
libcurl / cURL since 7.18.1 (released 30 Mar 2008) when compiled against an SSL/TLS toolkit with SNI support
Python 3.2 (ssl, urllib and httplib modules)
Qt 4.8
Oracle Java 7 JSSE

 

编译安装nginx后,看一下是否支持SNI

/usr/local/nginx/sbin/nginx -V 2>&1 |grep SNI

如果有TLS SNI support enabled就表示支持SNI

配置nginx

修改nginx安装后的conf/nginx.conf文件

以下是我的server配置节

upstream backend {
server 127.0.0.1:8443;
}

server {
        listen  443 ssl http2;
        server_name mytest.com;
        ssl_protocols SSLv3 TLSv1.2 TLSv1.1 TLSv1 SSLv2;
        access_log logs/proxy_access.log main;
        error_log logs/error.log info;
        underscores_in_headers on;
        
 

        location / {
#针对源点使用https+SNI,需要下面两段
            proxy_ssl_server_name on;
            prox_ssl_name $host;
#proxy_ssl_verify默认是off的,如果是on,源点的证书必须是正确的
            proxy_ssl_verify off;
            proxy_pass https://backend;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header cookie $http_cookie;
            proxy_set_header Proxy-Connection "";
            proxy_http_version 1.1;
        }
    }

最重要的就是

            proxy_ssl_server_name on;
            prox_ssl_name $host;

以上配置,注意以下几点:

1、proxy_pass 后面是upstream中设置的后端源点

2、建议不要设置proxy_ssl_verify 因为默认是off,如果配置了on,请确保你的源服务器中有正确的SSL证书,不能造假

3、这三个是一定要加的

proxy_set_header Host $http_host;
proxy_set_header Proxy-Connection "";
proxy_http_version 1.1;

这两个也是要加的
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 

4、处理源点是开启 https + SNI 的,最关键的两段
proxy_ssl_server_name on;
prox_ssl_name $host;

重启nginx

 

nginx反向代理https访问502, nginx反向代理, 支持SNI的https回源,SNI源点,nginx反向代理报错

原文:https://www.cnblogs.com/faberbeta/p/nginx012.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!