V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ggp1ot2
V2EX  ›  程序员

为啥我做了 nginx 反向代理,还是能通过 ip 直接访问?

  •  
  •   ggp1ot2 · 2023-01-23 19:38:18 +08:00 · 4160 次点击
    这是一个创建于 430 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个服务器,我在上面部了几个 docker 容器,有一个容器是 web 服务。

    这样就可以通过 ip:端口访问这个 web 页面了。

    为了绑定我的域名,我又搜了一堆教程,通过 nginx 做了反向代理。

    实现了直接访问我的域名,就能来到这个服务器的端口,来访问我的 web 服务。

    然后又申请了一个免费的 https 证书,现在直接输入域名就是 https 的了。还把鼓捣 nginx 的配置文件,把 http 的访问直接跳转到 https 。

    本来工作的好好的,结果今天突然发现,我现在直接输入 ip:端口,不能访问。

    但是如果直接输入 ip ,就直接跳转到了我这个 web 页面,还提示不安全,没证书。

    虽然我整套流程是这里搜一点那里搜一点实现的,但是我记得没有哪一步是说直接访问 ip 就跳转到这个服务?

    为啥会这样,我搞域名就是不想让别人直接看到我的 ip ,结果这搞了一通,别人直接访问域名就是我这个 web 页面了,有点难过,本来还觉得学了很多命令,,。,,

    19 条回复    2023-01-24 22:09:12 +08:00
    momocraft
        1
    momocraft  
       2023-01-23 19:48:47 +08:00
    因为你没有做任何让 ip 无法访问的事

    难过不如用脑思考一下 怎样继续达到你想要的效果
    seers
        2
    seers  
       2023-01-23 19:48:59 +08:00 via Android
    Nginx 的 servername 没配置好
    ggp1ot2
        3
    ggp1ot2  
    OP
       2023-01-23 19:51:03 +08:00
    @momocraft #1 谢谢,我好奇的是,明明我开的端口,就算能访问,也应该是 ip+端口访问到我的服务。我不明白的是,为什么现在直接 ip 就能访问了。进一步的操作应该是设置某个参数,让 ip 访问禁用?
    SenLief
        4
    SenLief  
       2023-01-23 19:51:36 +08:00 via iPhone
    你如果不用 nginx ,默认的访问服务就是 ip 。

    可以用 nginx 屏蔽掉 ip 访问,搜一下应该有的,访问返回 444
    Smilencer
        5
    Smilencer  
       2023-01-23 19:53:11 +08:00 via iPhone
    @ggp1ot2 http 默认 80 端口,https 443
    MrKrabs
        6
    MrKrabs  
       2023-01-23 19:59:33 +08:00
    设置文件不发上来?
    lsdxl
        7
    lsdxl  
       2023-01-23 20:01:40 +08:00   ❤️ 1
    搞域名 不影响想看你 ip 人找到你 ip 啊
    juggtt213
        8
    juggtt213  
       2023-01-23 20:03:28 +08:00 via Android   ❤️ 1
    是不是因为你的云服务厂商默认设置了防火墙规则,所以你用二级域名可以通过 Nginx 反代,但是 ip+域名就访问不了。然后用 ip 访问走 http ,所以自然匹配不到你的绑定 https 的规则。然后走了 /config/enable-sites 里 default 配置文件的默认规则
    cpstar
        9
    cpstar  
       2023-01-23 21:20:22 +08:00
    server_name _;
    return 403;
    cccn
        10
    cccn  
       2023-01-23 22:19:50 +08:00
    开启防火墙,开闭端口。
    BluceW
        11
    BluceW  
       2023-01-23 23:16:19 +08:00
    可以直接让你的容器只监听 127.0.0.1 , 然后 nginx 也反代 127.0.0.1:你的端口
    linkbg
        12
    linkbg  
       2023-01-23 23:28:14 +08:00 via Android
    docker 监听本地,不要用 0.0.0.0
    h0099
        13
    h0099  
       2023-01-24 00:25:27 +08:00
    momocraft
        14
    momocraft  
       2023-01-24 00:40:43 +08:00
    不要在公网 IP listen, 可以用一个只有 nginx 能访问到的 IP
    这个 IP 怎么获得视乎你 nginx 怎么跑的
    nginx 也在 docker 跑吗?
    MEIerer
        15
    MEIerer  
       2023-01-24 09:54:41 +08:00
    @momocraft #1 哈哈哈真实了
    fengpan567
        16
    fengpan567  
       2023-01-24 10:30:34 +08:00
    docker 和 Nginx 都部署在同一台服务器的话,容器只监听本机 ip 可以达到你要的效果,但是这样也不安全。
    docker run -d -p 127.0.0.1:hostPort:containerPort image
    realpg
        17
    realpg  
       2023-01-24 11:21:22 +08:00
    门口立了个老王家的门牌不能拦住不看门牌推门就进的人
    lff0305
        18
    lff0305  
       2023-01-24 15:58:50 +08:00 via Android
    在一个 docker network 中启动 Web 和 Nginx 。Web 服务不要暴露容器内端口到 host 机器,
    Nginx 需要 暴露端口。同时 Nginx 使用 Web 的容器内私有 IP 配置转发

    或者就用 docker compose, 比较省事
    Posuker
        19
    Posuker  
       2023-01-24 22:09:12 +08:00
    应该是没有配默认请求,所以走 ip 还是能访问到站点。
    在 nginx 配置里加一个 default 的配置,抛出个 403 / 404 之类的错误,就不能直接通过 ip 访问了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2770 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:24 · PVG 08:24 · LAX 17:24 · JFK 20:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.