以前搭建博客的时候,为了隐藏 vps 的 IP 地址,会套上 CDN 然后在 nginx 的配置里禁止通过 IP 地址直接浏览。
突然又想到,访问网页的过程就是客户端先通过 DNS 解析域名获得目标 IP,然后在要发送的数据包上标注源 IP 与目标 IP,路由器会将数据包送达。
服务器是怎么知道发送这个数据包的人是否正在通过 IP 地址直接访问网页呢?
|  |      1IvanLi127      2021-05-07 16:34:13 +08:00  1 HTTP 请求头里有个叫 Host 的字段,web 服务器靠它区分同一 IP 下不同的站点。 | 
|  |      2also24      2021-05-07 16:34:32 +08:00  1 『在 nginx 的配置里禁止通过 IP 地址直接浏览』指什么操作? 是想说指定 server_name ? https://nginx.org/en/docs/http/server_names.html https://tengine.taobao.org/nginx_docs/cn/docs/http/request_processing.html | 
|      3huxins      2021-05-07 16:36:04 +08:00  1 host,sni | 
|  |      4XIU2      2021-05-07 16:47:48 +08:00  1 @also24 #2 server 中加入下面这段代码,允许 CDN IP 段访问该网站,剩下都一律拒绝。 allow 127.0.0.0/8; deny all; 另外还需要给服务器 IP 自签证书来避免别人扫描证书泄露域名真实 IP (当通过 HTTPS 访问 IP 或指向一个不存在的域名来访问时,Nginx 会泄露服务器上其他网站用的 SSL 证书,通过该证书可以得知该 IP 是哪个藏在 CDN 后域名的真实 IP )。 | 
|  |      6also24      2021-05-07 16:54:04 +08:00 | 
|      7sakisaki OP | 
|  |      9ysc3839      2021-05-08 05:40:06 +08:00 @XIU2 关于你说的证书的问题,从 nginx 1.19.4 开始可以使用 ssl_reject_handshake 。 http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_reject_handshake |