使用 Nginx 作为 HTTPS 反向代理

使用 Nginx 作为 HTTPS 反向代理

我正在尝试设置一个 Nginx 服务器来反向代理 tomcat web 服务(我无法访问)。这主要是因为 Tomcat 服务器正在运行 TLSv1.0,所以我试图提高版本。

但是,当我尝试访问代理时,出现了 502 错误。Ngnix 日志显示 - SSL_do_handshake() failed (SSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol) while SSL handshaking to upstream

这是我的 Nginx 配置 -

ssl_certificate  /etc/nginx/certs/public.pem;
ssl_certificate_key  /etc/nginx/certs/private.key;
ssl_session_timeout  5m;
ssl_prefer_server_ciphers  on;
ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers  AES256+EECDH:AES256+EDH:!aNULL;

server {
    listen 6003;
    server_name example.com;
    ssl on;
    location / {
        proxy_pass https://example.com:6003;
    }
}

我已经尝试使用 Apache 执行相同的操作,但看到完全相同的错误。有人有什么想法吗?

答案1

这是类似的答案nginx 作为带有上游 SSL 的反向代理. 有单独的SSL 设置设置上游代理可接受的协议

...

server {

    listen 6003;
    server_name example.com;
    ssl on;
    ssl_certificate  /etc/nginx/certs/example.pem;
    ssl_certificate_key  /etc/nginx/certs/private.key;
    ... other settings

    location / {
        proxy_pass https://example.com:6003;
        proxy_ssl_trusted_certificate /etc/nginx/certs/example.pem;
        proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    }
}

列出的三个值proxy_ssl_protocols是当前的默认设置,但它们可能会在未来的版本中发生变化,从而删除 TLSv1 和 TLSv1.1。

相关内容