直接用curl访问一个不存在的IP,看看默认是哪个域名,通过域名进入Nginx里面把对应的默认的域名配置的TLS1.2给去掉即可,如下面这个得到t.boosh.com.cn,发现它并不对外开放443,然后:
找到 443 的默认虚拟主机
在 123.57.232.131 上执行,使用正在运行的 OpenResty 对应的 nginx 命令:
nginx -T 2>&1 |
grep -nE '^# configuration file|^[[:space:]]*(include|listen|server_name|ssl_protocols|ssl_certificate|proxy_pass)[[:space:]]'
看同一个监听地址的 443 配置。有 default_server 就改对应的 server 块,否则看配置解析顺序中第一个监听该地址 443 的 server 块。结合你前面遇到的情况,先在这个 443 默认块里启用 TLS 1.3,同时保留 TLS 1.2:
ssl_protocols TLSv1.2 TLSv1.3;
下面命令出现第一个443的域名就是:chat.jackxiang.com ,对它进行修改即可!!!
#nginx -T 2>&1 |
> grep -nE '^# configuration file|^[[:space:]]*(include|listen|server_name|ssl_protocols|ssl_certificate|proxy_pass)[[:space:]]'
3:# configuration file /usr/local/openresty/nginx/conf/nginx.conf:
21: include mime.types;
77: include vhosts/*.conf;
78: include vhosts/traefik.jackxiang.com/*.conf;
81:# configuration file /usr/local/openresty/nginx/conf/mime.types:
182:# configuration file /usr/local/openresty/nginx/conf/vhosts/default.conf:
184: listen 80;
185: server_name 127.0.0.1;
200: include fastcgi_params;
208: include fastcgi_params;
226:# configuration file /usr/local/openresty/nginx/conf/fastcgi_params:
253:# configuration file /usr/local/openresty/nginx/conf/vhosts/traefik.jackxiang.com/bin.jackxiang.com.conf:
256: listen 80;
257: server_name bin.jackxiang.com;
259: proxy_pass http://10.10.0.237/;
266:# configuration file /usr/local/openresty/nginx/conf/vhosts/traefik.jackxiang.com/boosh.com.cn.conf:
269: listen 80;
270: server_name boosh.com.cn www.boosh.com.cn;
287: listen 80;
288: server_name ipv4.boosh.com.cn;
299:# configuration file /usr/local/openresty/nginx/conf/vhosts/traefik.jackxiang.com/chat.jackxiang.com.conf:
301: listen 80;
302: server_name chat.jackxiang.com;
307: listen 443 ssl;
308: server_name chat.jackxiang.com;
309: ssl_certificate ssl/ssl.traefik.jackxiang.com/chat.jackxiang.com_bundle.crt;
312: ssl_protocols TLSv1.2 TLSv1.3;
326: proxy_pass http://10.10.0.237/;
nginx-default-https-vhost (1).md
{width=500px}
可以。**要看 `10.10.0.1:443` 的默认 HTTPS 站点,先用 `openssl s_client -noservername`。** 这会在握手时省略 SNI,让 OpenResty 返回该监听地址的默认证书。
```bash
openssl s_client -connect 10.10.0.1:443 \
-noservername -showcerts </dev/null 2>/dev/null |
openssl x509 -noout -subject -ext subjectAltName -fingerprint -sha256
```
如果证书只对应 `chat.jackxiang.com`,就能从访问结果识别默认站点。**如果几个站点共用同一张通配符证书,证书只能告诉你入口用了哪张证书。** 这时可以再发一个 `Host` 不匹配任何站点的 HTTP 请求,看看默认站点返回的响应或写入哪份访问日志:
```bash
curl --noproxy '*' -vk \
-H 'Host: no-such-vhost.invalid' \
https://10.10.0.1/
```
这里 URL 用 IP,`Host` 用一个不存在的域名。反过来,如果写 `-H 'Host: jackxiang.com'`,TLS 握手之后,HTTP 请求仍可能被路由到 `jackxiang.com`。如果用 `curl --resolve jackxiang.com:443:10.10.0.1 https://jackxiang.com/`,curl 会按域名发送 SNI 和 `Host`,适合测指定站点。
如果几个站点的证书和响应都一样,**用 `nginx -T` 核对配置最直接**。看同一监听地址是否有显式的 `default_server`,没有就按实际配置加载顺序找第一个 `listen 443 ssl;` 的 `server` 块。你之前贴的输出里,`chat.jackxiang.com` 的 443 块排在最前面,而且修改它的协议设置后,`jackxiang.com` 的 TLS 1.3 握手立即恢复。这两条证据已经能确认你当时命中的默认站点。
找到 443 的默认虚拟主机
在 123.57.232.131 上执行,使用正在运行的 OpenResty 对应的 nginx 命令:
nginx -T 2>&1 |
grep -nE '^# configuration file|^[[:space:]]*(include|listen|server_name|ssl_protocols|ssl_certificate|proxy_pass)[[:space:]]'
看同一个监听地址的 443 配置。有 default_server 就改对应的 server 块,否则看配置解析顺序中第一个监听该地址 443 的 server 块。结合你前面遇到的情况,先在这个 443 默认块里启用 TLS 1.3,同时保留 TLS 1.2:
ssl_protocols TLSv1.2 TLSv1.3;
下面命令出现第一个443的域名就是:chat.jackxiang.com ,对它进行修改即可!!!
#nginx -T 2>&1 |
> grep -nE '^# configuration file|^[[:space:]]*(include|listen|server_name|ssl_protocols|ssl_certificate|proxy_pass)[[:space:]]'
3:# configuration file /usr/local/openresty/nginx/conf/nginx.conf:
21: include mime.types;
77: include vhosts/*.conf;
78: include vhosts/traefik.jackxiang.com/*.conf;
81:# configuration file /usr/local/openresty/nginx/conf/mime.types:
182:# configuration file /usr/local/openresty/nginx/conf/vhosts/default.conf:
184: listen 80;
185: server_name 127.0.0.1;
200: include fastcgi_params;
208: include fastcgi_params;
226:# configuration file /usr/local/openresty/nginx/conf/fastcgi_params:
253:# configuration file /usr/local/openresty/nginx/conf/vhosts/traefik.jackxiang.com/bin.jackxiang.com.conf:
256: listen 80;
257: server_name bin.jackxiang.com;
259: proxy_pass http://10.10.0.237/;
266:# configuration file /usr/local/openresty/nginx/conf/vhosts/traefik.jackxiang.com/boosh.com.cn.conf:
269: listen 80;
270: server_name boosh.com.cn www.boosh.com.cn;
287: listen 80;
288: server_name ipv4.boosh.com.cn;
299:# configuration file /usr/local/openresty/nginx/conf/vhosts/traefik.jackxiang.com/chat.jackxiang.com.conf:
301: listen 80;
302: server_name chat.jackxiang.com;
307: listen 443 ssl;
308: server_name chat.jackxiang.com;
309: ssl_certificate ssl/ssl.traefik.jackxiang.com/chat.jackxiang.com_bundle.crt;
312: ssl_protocols TLSv1.2 TLSv1.3;
326: proxy_pass http://10.10.0.237/;
nginx-default-https-vhost (1).md
{width=500px}
可以。**要看 `10.10.0.1:443` 的默认 HTTPS 站点,先用 `openssl s_client -noservername`。** 这会在握手时省略 SNI,让 OpenResty 返回该监听地址的默认证书。
```bash
openssl s_client -connect 10.10.0.1:443 \
-noservername -showcerts </dev/null 2>/dev/null |
openssl x509 -noout -subject -ext subjectAltName -fingerprint -sha256
```
如果证书只对应 `chat.jackxiang.com`,就能从访问结果识别默认站点。**如果几个站点共用同一张通配符证书,证书只能告诉你入口用了哪张证书。** 这时可以再发一个 `Host` 不匹配任何站点的 HTTP 请求,看看默认站点返回的响应或写入哪份访问日志:
```bash
curl --noproxy '*' -vk \
-H 'Host: no-such-vhost.invalid' \
https://10.10.0.1/
```
这里 URL 用 IP,`Host` 用一个不存在的域名。反过来,如果写 `-H 'Host: jackxiang.com'`,TLS 握手之后,HTTP 请求仍可能被路由到 `jackxiang.com`。如果用 `curl --resolve jackxiang.com:443:10.10.0.1 https://jackxiang.com/`,curl 会按域名发送 SNI 和 `Host`,适合测指定站点。
如果几个站点的证书和响应都一样,**用 `nginx -T` 核对配置最直接**。看同一监听地址是否有显式的 `default_server`,没有就按实际配置加载顺序找第一个 `listen 443 ssl;` 的 `server` 块。你之前贴的输出里,`chat.jackxiang.com` 的 443 块排在最前面,而且修改它的协议设置后,`jackxiang.com` 的 TLS 1.3 握手立即恢复。这两条证据已经能确认你当时命中的默认站点。
作者:jack@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://www.jackxiang.com/post/13641/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jack 编辑于2026-11-7 21:53
评论列表


[纳入备查]TCP 半连接队列和全连接队列