nginx反向代理https訪問502, nginx反向代理, 支持SNI的https回源,SNI源點,nginx反向代理報錯


正常nginx配置了SSL是可以通過HTTPS訪問后端的,但是對有配置SNI + https后端的支持有點麻煩。

編譯安裝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

 

一些參考資料:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_name

一些參考資料:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_server_name

一些不重要的參考資料:https://www.jianshu.com/p/999ac06e3934 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM