NGINX 禁止访问 443 端口问题

2017-03-19 21:03:41 +08:00
 wwc

如果想禁止别人用我们未绑定的域名或 IP 访问 80 端口,可以这样写:

server { listen 80 default_server; server_name ""; return 444; }

这样一来,凡是没有绑定的域名包括 IP 访问 80 端口都会关闭连接,已经绑定的域名可以正常访问。 于是,我就用同样的办法,对 443 端口进行同样的限制,于是这样写:

server { listen 443 default_server; server_name ""; return 444; }

然后问题来了,所有 443 端口都无法使用了,就算是已绑定的域名也被关闭连接了。 问题出在哪里呢,难道 443 端口无法实现那样的效果吗?

7804 次点击
所在节点    NGINX
14 条回复
Flygoat
2017-03-19 21:13:02 +08:00
443 端口需要先建立连接才能得到 hostname 。。。。
wwc
2017-03-19 21:15:16 +08:00
@Flygoat 原来如此,那还有没有办法实现那种效果呢?
Flygoat
2017-03-19 21:17:35 +08:00
@wwc 建议还是 hostname 不对返回个 403 吧。。直接断连接目测是没有办法了
lhbc
2017-03-19 21:19:49 +08:00
server_name _;
wwc
2017-03-19 21:24:48 +08:00
@Flygoat 还是不行,一样连正常绑定的也没法访问了……
Bardon
2017-03-19 21:24:53 +08:00
我是直接 301 到百度
Flygoat
2017-03-19 21:26:30 +08:00
@Bardon 直接定义 default_server 然后返回 403 啊
Bardon
2017-03-19 21:27:09 +08:00
不知道你双引号的写法是哪里来的
听 4 楼的
另外如果你的 443 指的是 ssl 的话,没必要多此一举
wwc
2017-03-19 21:34:01 +08:00
@Bardon nginx 官网文档是这样写的,不这样高的话,别人直接 https 访问我 IP 就知道我是什么站了啊
pubby
2017-03-19 21:36:24 +08:00
测试看看啊

openssl s_client -connect <your server ip>:443 -tls1_2 -servername notexists.host.com
pubby
2017-03-19 21:40:25 +08:00
我是加了一个自签证书

listen 443 ssl default;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
Bardon
2017-03-19 21:53:36 +08:00
未绑定的域名,应该是人家域名直接解析到你 ip
ip ,就是直接 ip 访问

防止他们访问,官方写法是
server {
listen 80 default_server;
server_name _;
return 444;
}

443 端口,用 default_server 是个什么意思,你给你的 ip 所在的 localhost 配了 ssl 证书了?就算配了证书了,人家通过其他域名解析过来,也会遇到证书错误呀
LGA1150
2017-03-19 22:06:12 +08:00
@wwc SNI
salmon5
2017-03-19 22:09:44 +08:00
server {
listen 443 ssl default_server;
return 501;
}

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

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

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

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

© 2021 V2EX