如何使用 nginx 设置 SSL 反向代理?

如何使用 nginx 设置 SSL 反向代理?

与我的问题相关如何使用 nginx 设置反向代理,现在我在设置一个另外需要 SSL 连接时遇到了困难。

我有一个 docker 容器,它为我的主机系统提供映射的 SSL 端口 4430。Web 服务器正在使用自签名证书。

在我的/etc/hosts文件中,我定义:

127.0.0.1 app.local

我的 nginx 服务器配置如下:

server {
    listen 80;
    server_name app.local;
    location / {
        return https://$host$request_uri;
    }
}

server {
    listen 443;
    server_name app.local;
    location / {
        proxy_pass https://127.0.0.1:4430;
    }
}

当我使用它访问我的 webapp 时,https://127.0.0.1::4430它工作正常。但我第一次收到有关证书的警告,然后我必须允许它。

http://app.local但是,当通过或连接到它时https://app.local,我的浏览器显示:

SSL connection error
ERR_SSL_PROTOCOL_ERROR

我还希望出现证书警告,然后我可以允许。

当使用 SSL 与 nginx 时,如何使反向代理正常工作?

答案1

要在 nginx 上终止 SSL:

a)服务器部分需要指定端口和“ssl”

listen 192.168.2.26:443 ssl;

b) 服务器块还指定了证书和 SSL 参数

ssl_certificate      new-cert.cer;
ssl_certificate_key  new-cert.key;

ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;

答案2

我认为你已经接近了(我自己也是 Nginx 的新手),但是你的第二个服务器块还需要更多...我的服务器上有一个这样的服务器块:

listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
charset utf-8;
client_max_body_size 75M;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;

请注意以下几点:

  1. listen 指令指定 ssl。
  2. 指定证书和证书密钥。证书应放在易于访问的地方,因为它会发送给访问您网站的每个人。密钥放在只有需要它的用户才能访问的地方。

ipv6、charset 和 client max body 是我服务器上的行,但对于您在此处执行的操作而言并不需要。您可以随意命名它们并将它们放在任何地方,因此如果您将它们存储在其他地方,请不要纠结于确切的文件名或位置。这只是我喜欢的做法,我的ls -l输出是:

-rw-r--r-- 1 root root 1887 Oct  8 14:16 /etc/ssl/certs/example.com.crt
-rw-r----- 1 root ssl-cert 1704 Oct  8 13:47 /etc/ssl/private/example.com.key

相关内容