V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
blankme
V2EX  ›  问与答

如何禁止通过 ip 访问网站

  •  
  •   blankme · 2017-06-19 10:32:07 +08:00 · 3325 次点击
    这是一个创建于 2502 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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;
            }
    }
    
    11 条回复    2017-06-22 20:09:29 +08:00
    cst4you
        1
    cst4you  
       2017-06-19 10:43:57 +08:00
    你再 listen 个 443 的 default 不就好了
    blankme
        2
    blankme  
    OP
       2017-06-19 10:45:25 +08:00
    @cst4you 这样会把域名访问一起屏蔽掉
    dzxx36gyy
        3
    dzxx36gyy  
       2017-06-19 10:52:51 +08:00 via Android   ❤️ 1
    加个 server_name 是 ip 的,然后跳转到你的域名
    haozi1986
        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;
    }

    这个是我的配置~~
    katsusan
        5
    katsusan  
       2017-06-19 12:22:43 +08:00 via iPhone
    弱弱地问个问题,能直接通过 ip 访问有什么坏处么
    blankme
        6
    blankme  
    OP
       2017-06-19 14:26:38 +08:00
    @haozi1986 原来按照这种方法没走通,还以为不能用。后来发现是证书配置不对,已解决,感谢。
    blankme
        7
    blankme  
    OP
       2017-06-19 14:30:59 +08:00
    @katsusan 不算坏处吧,就是自己玩一下。如果一个 ip 对应多个网站,可以避免非期望的跳转,也许算是一个好处。
    lan894734188
        8
    lan894734188  
       2017-06-19 14:57:27 +08:00 via Android
    @haozi1986 最好不要用 404 搜索引擎很久都不会再爬了 推荐用 403
    gongjianwei
        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;
    }
    }
    ```
    gongjianwei
        10
    gongjianwei  
       2017-06-19 17:31:36 +08:00   ❤️ 1
    gongjianwei
        11
    gongjianwei  
       2017-06-22 20:09:29 +08:00 via Android
    @gongjianwei 做一些说明
    企图通过这种方法干翻小红叉是不可能的,HTTPS 就是要先握手交换密钥
    但是这个可以让 IP 访问强行忽略错误的时候,继续跳转回域名
    当然你也可以将 rewrite 替换成 return 444 或者 400,这没问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4246 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:30 · PVG 13:30 · LAX 22:30 · JFK 01:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.