http://ip 这种形式已经可以拒绝了,但 https://ip 仍然可以访问(虽然会有红叉)。
找了很久也没找到有效的方法,望各位 v 友不吝赐教。
我想要的效果基本上和这个问题最后总结的一样:Block direct access to webserver IP via HTTPS
以下是我目前使用的 nginx 配置:
server {
listen 80 default;
return 403;
}
server {
listen 80;
server_name example.com;
rewrite ^ https://$host$request_uri? permanent;
}
server {
listen 443 http2 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location ~ /.well-known {
allow all;
}
root /var/www/test/public;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
1
cst4you 2017-06-19 10:43:57 +08:00
你再 listen 个 443 的 default 不就好了
|
3
dzxx36gyy 2017-06-19 10:52:51 +08:00 via Android 1
加个 server_name 是 ip 的,然后跳转到你的域名
|
4
haozi1986 2017-06-19 11:16:13 +08:00 1
server {
listen 80 default_server; listen 443 ssl default_server; server_name _; ssl_certificate <path to cert> ssl_certificate_key <path to key> return 404; } 这个是我的配置~~ |
5
katsusan 2017-06-19 12:22:43 +08:00 via iPhone
弱弱地问个问题,能直接通过 ip 访问有什么坏处么
|
8
lan894734188 2017-06-19 14:57:27 +08:00 via Android
@haozi1986 最好不要用 404 搜索引擎很久都不会再爬了 推荐用 403
|
9
gongjianwei 2017-06-19 17:26:01 +08:00
ququ 的配置里面有这个,我做点修改发上来
https://imququ.com/post/my-nginx-conf.html#toc-6 ``` server { listen example.com www.example.com <your_ip>; # ... # # If site is not "example.com", return to "https://example.com" if ($host != 'example.com' ) { rewrite ^/(.*)$ https://example.com/$1 permanent; } } ``` |
10
gongjianwei 2017-06-19 17:31:36 +08:00 1
|
11
gongjianwei 2017-06-22 20:09:29 +08:00 via Android
@gongjianwei 做一些说明
企图通过这种方法干翻小红叉是不可能的,HTTPS 就是要先握手交换密钥 但是这个可以让 IP 访问强行忽略错误的时候,继续跳转回域名 当然你也可以将 rewrite 替换成 return 444 或者 400,这没问题 |