以前搭建博客的时候,为了隐藏 vps 的 IP 地址,会套上 CDN 然后在 nginx 的配置里禁止通过 IP 地址直接浏览。
突然又想到,访问网页的过程就是客户端先通过 DNS 解析域名获得目标 IP,然后在要发送的数据包上标注源 IP 与目标 IP,路由器会将数据包送达。
服务器是怎么知道发送这个数据包的人是否正在通过 IP 地址直接访问网页呢?
1
IvanLi127 2021-05-07 16:34:13 +08:00 1
HTTP 请求头里有个叫 Host 的字段,web 服务器靠它区分同一 IP 下不同的站点。
|
2
also24 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 |
3
huxins 2021-05-07 16:36:04 +08:00 1
host,sni
|
4
XIU2 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 )。 |
6
also24 2021-05-07 16:54:04 +08:00
|
7
sakisaki OP |
9
ysc3839 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 |