【问题标题】:How to reverse proxy a site which use ssl by nginx?如何通过 nginx 反向代理使用 ssl 的站点?
【发布时间】:2017-01-19 15:42:09
【问题描述】:

例如: 我想使用域反向代理https://tw.godaddy.com,可以吗? 我的配置不起作用。

        location ~ /
    {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass https://tw.godaddy.com;
            proxy_set_header Host "tw.godaddy.com";
            proxy_set_header Accept-Encoding "";
            proxy_set_header User-Agent $http_user_agent;
            #more_clear_headers "X-Frame-Options";
            sub_filter_once off;
    }

【问题讨论】:

    标签: nginx proxy reverse


    【解决方案1】:

    是的。这是可能的。

    要求:

    • --with-stream编译
    • --with-stream_ssl_module编译

    您可以通过nginx -V 进行检查

    配置示例:

    stream {
    
        upstream backend {
            server backend1.example.com:12345;
            server backend2.example.com:12345;
            server backend3.example.com:12345;
       }
    
        server {
            listen     12345;
            proxy_pass backend;
            proxy_ssl  on;
    
            proxy_ssl_certificate         /etc/nginx/nginxb.crt;
            proxy_ssl_certificate_key     /etc/nginx/nginxb.key;
            proxy_ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
            proxy_ssl_ciphers             HIGH:!aNULL:!MD5;
            proxy_ssl_trusted_certificate /etc/ssl/certs/trusted_ca_cert.crt;
    
            proxy_ssl_verify        on;
            proxy_ssl_verify_depth  2;
            proxy_ssl_session_reuse on;
        }
    }
    

    说明:

    开启 ssl 后端:

    proxy_ssl  on;
    

    指定upstream服务器所需的SSL客户端证书的路径和证书的私钥:

    proxy_ssl_certificate         /etc/nginx/nginxb.crt;
    proxy_ssl_certificate_key     /etc/nginx/nginxb.key;
    

    这些客户端密钥/证书是您启动 ssl 会话到后端的证书。您可以通过以下方式创建自签名:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/nginxb.key -out /etc/nginx/nginxb.crt
    

    如果后端也是自签名的,则关闭 proxy_ssl_verify 并删除 ssl 深度。

    【讨论】:

    • 感谢您的帮助,您是我的英雄,我会努力的。但是我怎么能得到 backend.crt backend.keytrusted_ca_cert.crt?
    • @Farhad Farahi 如果上游服务器提供自己的证书,实际上仍然需要 2x 证书吗?在流块内操作时,它是否充当直通?
    • @Chris:它不会通过,如果您使用 ssl 客户端(nginx 反向代理具有 ssl 动词),nginx 将解密 ssl 会话,再次加密并将其发送到后端。要使用直通,您需要使用stream 块。
    • 嗯,没错,所以 nginx 反向代理本质上总是需要自己的证书。谢谢
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2016-11-17
    • 2020-06-06
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2017-09-19
    • 2018-05-31
    相关资源
    最近更新 更多