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

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

  •  
  •   ggp1ot2 · 14 天前 · 2968 次点击

    我有一个服务器,我在上面部了几个 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  
       14 天前
    因为你没有做任何让 ip 无法访问的事

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

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

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