如题,这需求对 80 端口来说很简单,到了 443 各种问题啊,求解决方法!!
详细描述: 比如我服务器 443 端口只绑定了 www.baidu.com 这一个域名, https://www.baidu.com 是可以访问的,与此同时,使用其他解析到我 IP 上的域名和直接使用我的 IP ,也是可以访问的,我现在想只让我绑定的域名能访问, https://其他域名 和 https://我服务器 IP ,一律 444 或者 403.
1
XiaoFaye 2017-03-20 10:39:20 +08:00
设一个 default_server 和 一个只映射 www.baidu.com 的 server , default 那个全部返回 404 , 这样只有用 www.baidu.com 域名访问的才会正确映射。
|
3
ovear 2017-03-20 11:00:39 +08:00 via Android 1
这个很简单啊, Nginx 对于找不到 hostname 的域名,默认采用第一个 host
所以你可以在 include vhost/*. conf 之前加一个 default server 然后 Nginx 有个直接打断连接的 http code 444 所以 location / 左大括号 return 444 分号 右大括号 就可以实现了 至于 ip ,直接绑 server name |
5
salmon5 2017-03-20 11:59:21 +08:00
server {
listen 443 ssl default_server; return 403; } server { listen 443 ssl; server_name www.baidu.com; 下面省略 } 匹配到 baidu 用 baidu ,匹配不到的全部到 default_server,直接返回 403. |
6
Tyanboot 2017-03-20 12:01:09 +08:00 via Android
以下内容来源 Nginx 官方文档
If someone makes a request using an IP address instead of a server name, the “ Host ” request header field will contain the IP address and the request can be handled using the IP address as the server name: server { listen 80; server_name example.org www.example.org "" 192.168.1.1 ; ... } In catch-all server examples the strange name “_” can be seen: server { listen 80 default_server; server_name _; return 444; } There is nothing special about this name, it is just one of a myriad of invalid domain names which never intersect with any real name. Other invalid names like “--” and “!@#” may equally be used. 参考官方文档。 server_name 填一个下划线。 |
8
msg7086 2017-03-20 15:43:56 +08:00 1
|