##2024/8/15 21:56:24:
ngix 代理,证书的关系?nginx 什么时候会执行 ssl 证书验证?
发送请求:https://abc.qyzhizi.cn:8080/
abc.qyzhizi.cn 所在的机器 通过 frp 端口转发,发送到 另一台机器 A的 8080 端口
机器 A上的 frp 配置如下:
[common]
server_addr = ****
authentication_method = token
token = *****
server_port = 7000
[ssh-gk]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 20025
[halo-gk]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 8080
机器 A 上的 nginx 在 8080 端口上监听 https 请求,配置如下:
# halo blog
server {
listen 8080 ssl;
server_name abc.qyzhizi.cn;
ssl_certificate /usr/local/nginx/conf/abc.qyzhizi.cn_bundle.crt;
ssl_certificate_key /usr/local/nginx/conf/abc.qyzhizi.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 100m;
client_body_buffer_size 20m;
location / {
proxy_pass http://localhost:8091;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
http://localhost:8091
是本地的 halo docker 服务, nginx 会将请求转到 本地的 docker 服务
ssl 证书验证发生在 nginx 上面,当客户端发送 https 协议的请求到达 abc.qyzhizi.cn 所在的机器,然后又被 frp 转发给 机器 A, 机器 A 的 nginx 会进行响应
ai 的梳理
:
@@ 请求流程概述
-
客户端请求:客户端发送一个HTTPS请求到
https://abc.qyzhizi.cn:8080
. -
FRP端口转发:
- 请求到达托管abc.qyzhizi.cn的机器。
- FRP根据FRP设置将请求转发到机器A的8080端口。
-
Nginx处理:
- 在机器A上,Nginx监听8080端口上的传入HTTPS请求。
- Nginx配置指定了SSL证书,使其能够处理SSL终止。
- Nginx然后将请求代理到运行在
http://localhost:8091
上的本地Halo Docker服务。
@@ 设置的正确性
- SSL终止:SSL终止发生在机器A上的Nginx级别。这意味着Nginx处理SSL解密,允许后端服务(Halo Docker)通过HTTP进行通信,而无需管理SSL。
- FRP配置:FRP配置似乎是正确的,因为它将流量从指定的远程端口(8080)转发到Nginx正在侦听的本地端口。
- Nginx配置:Nginx配置正确地设置了带有指定证书的SSL,并将请求代理到Halo服务。
@@ 其他注意事项
- 防火墙和安全组:确保在两台机器上的防火墙设置中打开必要的端口(FRP为7000,Nginx为8080)并可访问。
- 令牌安全:FRP配置中使用的令牌应保持安全,以防止未经授权的访问。
- 健康检查:考虑为Halo服务实现健康检查,以确保Nginx能够有效地路由流量。
- 日志记录:在Nginx中启用日志记录,以监控传入的请求和任何潜在的错误。
总的来说,所描述的体系结构和配置对于通过FRP和Nginx处理到Docker服务的HTTPS请求是正确的。
nginx 什么时候会执行 ssl 证书验证?
Nginx执行SSL证书验证的时机主要是在处理HTTPS请求时。具体来说,以下是Nginx如何以及何时执行SSL证书验证的详细说明:
@@ 何时执行SSL证书验证
-
接收HTTPS请求:
当客户端通过HTTPS(即使用SSL/TLS协议)向Nginx服务器发送请求时,Nginx会首先监听443端口并等待这些请求。 -
SSL握手过程:
在接收到HTTPS请求后,Nginx会启动SSL握手过程。这一过程包括:- 客户端发送一个请求,要求建立SSL连接。
- Nginx服务器响应并发送其SSL证书给客户端。
- 客户端验证Nginx发送的证书是否有效,包括检查证书的签名、有效期、是否被撤销等。
-
证书验证:
客户端在验证证书时,会检查以下几个方面:- 证书链:确保Nginx的证书是由受信任的证书颁发机构(CA)签发的。
- 域名匹配:证书中的域名是否与请求的域名匹配。
- 有效性:证书是否在有效期内,且未被撤销。
-
建立安全连接:
如果证书验证通过,客户端和Nginx之间将建立安全的SSL/TLS连接,之后的通信将会被加密。
@@ 配置SSL证书的步骤
在Nginx中配置SSL证书通常包括以下步骤:
-
获取证书和私钥:从受信任的CA获取SSL证书和私钥文件,通常为
.pem
和.key
格式。 -
配置Nginx:在Nginx的配置文件中添加SSL相关的配置,例如:
server { listen 443 ssl; server_name your_domain.com; ssl_certificate /path/to/certificate.pem; ssl_certificate_key /path/to/private.key; location / { # 其他配置 } }
-
重启Nginx:修改配置后,重启Nginx以使更改生效。
-
验证配置:可以通过访问HTTPS地址,确保浏览器显示SSL锁图标,并检查证书详细信息以确认SSL配置正确。
通过这些步骤,Nginx能够在处理HTTPS请求时有效地执行SSL证书验证,确保数据传输的安全性和完整性[1][4][5]。
Citations:
[1] https://www.hncloud.com/supports/6684.html
[2] http://www.008ct.top/blog/2023/12/08/nginx%E9%85%8D%E7%BD%AE%E8%87%AA%E5%BB%BASSL%E8%AF%81%E4%B9%A6/
[3] https://www.cnblogs.com/GGYS/p/17424603.html
[4] https://blog.csdn.net/a924382407/article/details/137585495
[5] https://help.aliyun.com/zh/ssl-certificate/user-guide/install-ssl-certificates-on-nginx-servers-or-tengine-servers