关于网页浏览过程的疑惑

2021-05-07 16:30:29 +08:00
 sakisaki

以前搭建博客的时候,为了隐藏 vps 的 IP 地址,会套上 CDN 然后在 nginx 的配置里禁止通过 IP 地址直接浏览。

突然又想到,访问网页的过程就是客户端先通过 DNS 解析域名获得目标 IP,然后在要发送的数据包上标注源 IP 与目标 IP,路由器会将数据包送达。

服务器是怎么知道发送这个数据包的人是否正在通过 IP 地址直接访问网页呢?

732 次点击
所在节点    问与答
10 条回复
IvanLi127
2021-05-07 16:34:13 +08:00
HTTP 请求头里有个叫 Host 的字段,web 服务器靠它区分同一 IP 下不同的站点。
also24
2021-05-07 16:34:32 +08:00
『在 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
huxins
2021-05-07 16:36:04 +08:00
host,sni
XIU2
2021-05-07 16:47:48 +08:00
@also24 #2 server 中加入下面这段代码,允许 CDN IP 段访问该网站,剩下都一律拒绝。
allow 127.0.0.0/8;
deny all;

另外还需要给服务器 IP 自签证书来避免别人扫描证书泄露域名真实 IP (当通过 HTTPS 访问 IP 或指向一个不存在的域名来访问时,Nginx 会泄露服务器上其他网站用的 SSL 证书,通过该证书可以得知该 IP 是哪个藏在 CDN 后域名的真实 IP )。
sakisaki
2021-05-07 16:52:59 +08:00
@IvanLi127 @huxins 多谢解答,我没有想到包里的其他字段会有我的答案…
also24
2021-05-07 16:54:04 +08:00
@XIU2 #4
这又是从哪里复制来的……

首先你回复的这段,和我问的那段完全不相关;
其次,只 allow 127.0.0.0/8 是认真的么? CDN IP 段在 127.0.0.0/8 么……
sakisaki
2021-05-07 16:58:40 +08:00
@also24 我当时的方法是类似
server {
listen 80 default;
server_name _;
return 403;
}
also24
2021-05-07 17:01:15 +08:00
@sakisaki #7
那么看我附的文档,理解一下 server_name 的作用原理就明白了。
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
XIU2
2021-05-08 09:09:07 +08:00
@ysc3839 #9 这么多年了,Nginx 终于把这个问题给解决了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775454

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX