与我的问题相关如何使用 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;
请注意以下几点:
- listen 指令指定 ssl。
- 指定证书和证书密钥。证书应放在易于访问的地方,因为它会发送给访问您网站的每个人。密钥放在只有需要它的用户才能访问的地方。
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