找回密码
 新建账号

nginx proxy_ssl_verify on; 18:self-signed certificate

[复制链接]
大郎 发表于 2025-12-30 00:51 | 显示全部楼层 |阅读模式
nginx proxy_ssl_verify on; error upstream SSL certificate verify error: (18:self-signed certificate) while SSL handshaking to upstream ....

用 nginx 作反向代理时,如果 proxy_ssl_verify 设置为 off,最不容易出问题导致 nginx 跑不起来;但这样配置会有安全风险,非常不建议关闭证书验证功能。

配置了 proxy_ssl_verify on; 后,需要使用 proxy_ssl_trusted_certificate 配置证书颁发机构(CA)的可信根证书,如果根证书和证书颁发机构不匹配,会出现 self-signed certificate 的错误,此时服务器证书被当成了自签证书,证书验证过程会失败。如果服务器证书由 Let's Encrypt 签发,应该将 ISRG Root X1 和/或 ISRG Root X2 可信根证书保存到 proxy_ssl_trusted_certificate 指定的文件中;由于服务器的证书可能由各种各样的颁发机构颁发,最好使用一个包含了各种可信证书签发机构根证书的通用文件,比如 curl 附带的 curl-ca-bundle.crt

除了配置 proxy_ssl_trusted_certificate 还要启用 SNI 扩展,SNI 全称是 Server Name Indication。
  1. proxy_ssl_server_name on;
复制代码
如果 proxy_pass 使用的是 IP 地址或另一个服务域名(server name),而不是实际要代理访问的服务域名,还要配置用来验证主机名的服务域名。
比如代理服务器和后端服务器使用的是相同的服务域名,而代理服务器和后端服务器又不在一台设备上 IP 地址也互不相同;此时可以在公网上将这个域名解析到代理服务器,在代理服务器上用 IP 地址 + Host 请求头来访问后端服务器;也可以用另一个主机记录解析到后端服务器,在代理服务器上用这个额外的主机记录 + Host 请求头访问后端服务器。
  1. proxy_ssl_name www.wuxiancheng.cn;
复制代码
整合后的配置如下。
  1.     location / {
  2.         proxy_http_version 2;
  3.         proxy_pass https://qsez.org;
  4.         proxy_set_header host www.wuxiancheng.cn;
  5.         proxy_set_header user-agent $http_user_agent;
  6.         proxy_ssl_verify on;
  7.         proxy_ssl_server_name on;
  8.         proxy_ssl_name www.wuxiancheng.cn;
  9.         proxy_ssl_trusted_certificate ssl/www.wuxiancheng.cn/ca.crt;
  10.     }
复制代码
这里的技巧是:
qsez.org 只是用来解析后端服务器的 IP 地址,而不是后端服务器的真实服务域名;
host 请求头告诉后端服务器实际上要访问的服务域名;
proxy_ssl_name 指明要在服务器证书中检查的服务域名;
proxy_ssl_trusted_certificate 指定受信任的证书颁发机构根证书。

有了以上配置,代理服务器可以接收客户端向服务域名发来的请求,然后将请求发到后端服务器让后端服务器处理同一个域名上的请求。

一些注意事项——
proxy_http_version 配置的 HTTP 协议版本不能高于被代理服务器支持的最高版本。
上面只给出了关键配置;其他配置被省略了,需要根据实际情况补齐。

手机版|轻松e站

GMT+8, 2026-1-27 01:26

快速回复 返回顶部 返回列表