运行多个 docker nginx 容器时,如何设置 server_name 才能让外网(ipv6)都能访问 nginx 服务? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
raw0xff
V2EX    NGINX

运行多个 docker nginx 容器时,如何设置 server_name 才能让外网(ipv6)都能访问 nginx 服务?

  •  
  •   raw0xff 2023-09-09 16:26:57 +08:00 1998 次点击
    这是一个创建于 765 天前的主题,其中的信息可能已经有所发展或是发生改变。

    运行多个 nginx 容器,宿主机的 9001 9002 9003 9004 转发容器 80 端口。配置文件中 server_name 设置为 localhost 127.0.0.1 和宿主机的 ipv6 地址,目前外网可以访问。

    问题是,这个 v6 地址会变(光猫重启),有什么其他的设置方法吗?只要外网能访问就行。 "*" "_"好像都不行,不设置 server_name 也不行。

    15 条回复    2023-09-10 16:17:58 +08:00
    putaozhenhaochi
        1
    putaozhenhaochi  
       2023-09-09 17:08:35 +08:00 via Android
    外网访问要路由器里做端口映射的吧
    raw0xff
        2
    raw0xff  
    OP
       2023-09-09 17:22:03 +08:00
    @putaozhenhaochi 不是端口的问题,可以访问。
    leonshaw
        3
    leonshaw  
       2023-09-09 17:40:31 +08:00 via Android
    yinmin
        4
    yinmin  
       2023-09-09 17:54:04 +08:00 via iPhone   1
    删除 server_name 参数
    kiml
        5
    kiml  
       2023-09-09 18:06:38 +08:00 via Android   1
    server_name 0.0.0.0
    这样是否可行呢
    raw0xff
        6
    raw0xff  
    OP
       2023-09-09 18:13:04 +08:00
    @yinmin 你确定吗? server_name 是必须设置的。
    yinmin
        7
    yinmin  
       2023-09-09 18:18:32 +08:00   1
    @raw0xff #6 删除整行 server_name
    yinmin
        8
    yinmin  
       2023-09-09 18:20:33 +08:00   1
    @raw0xff #6 你查一下所有的 server {} 配置,同一个端口只允许 1 个 server {}不设置 server_name ,如果有 2 个不设置 server_name 会出问题。
    raw0xff
        9
    raw0xff  
    OP
       2023-09-09 18:51:30 +08:00   1
    @yinmin
    @kiml
    @yinmin

    对不起对不起,我的错,发现容器里/etc/nginx/http.d 文件夹中还有个 default.conf 文件,两个 conf 同时配置 80 端口,所以我改来改去都没作用。

    server_name 0.0.0.0; 可用
    server_name 删掉也可用
    对不起是我马虎了
    nightcc
        10
    nightcc  
       2023-09-09 18:57:39 +08:00 via Android
    server_name _ 讲道理不应该不行呀,这个不行是指 connection refused ,还是 403 ,404 什么的?
    建议拿日志来看看,具体怎么回事
    raw0xff
        11
    raw0xff  
    OP
       2023-09-10 10:51:44 +08:00
    @nightcc
    server_name _; 可行。

    之前不行是因为没发现 http.d 目录还有个 default.conf ,内容是:
    server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Everything is a 404
    location / {
    return 404;
    }

    location = /404.html {
    internal;
    }
    }

    所以,无论另一个 d.conf 文件怎么改,只要不在 server_name 名单里都会 404.
    server {
    listen 80 ;
    listen [::]:80 ;
    server_name _;
    default_type text/html;

    location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    }
    }
    server_name 用_的话,localhost 127.1 0.0 外网 IP 全是 404 ,不知道为什么,可能 _ 没有 default_server 管的宽?哈哈
    @yinmin 您给看看为啥?

    我现在是 docker 启动时用 d.conf 直接覆盖这个 default.conf 。
    yinmin
        12
    yinmin  
       2023-09-10 11:23:01 +08:00   1
    删除 default.conf 文件即可。我估计你的问题其实是 nginx 容器配置问题。

    nginx 做容器要至少 volumes 以下 1 个文件和 3 个目录,然后在主机上配置参数。
    volumes:
    - /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    - /etc/nginx/conf.d:/etc/nginx/conf.d:ro
    - /var/www/html:/usr/share/nginx/html:ro
    - /var/log/nginx:/var/log/nginx

    容器最佳实践是内部无状态,所有数据 Volume 到主机上,使容器可以随意摧毁/重建/迁移。
    raw0xff
        13
    raw0xff  
    OP
       2023-09-10 15:47:13 +08:00
    @yinmin 感谢大佬。

    我是 docker compose 了一个运行着 nginx 的 alpine 服务,服务启动时会 scale 多个容器,nginx.conf conf.d html 这三个理解,log/nginx 是不是不适合我?我也在考虑如何监视多个 nginx 容器运行的状态的问题。扯远了哈哈
    yinmin
        14
    yinmin  
       2023-09-10 16:01:20 +08:00 via iPhone   1
    @raw0xff #13 多个 nginx 容器的日志建议放在不同的主机目录,例如:/var/log/nginx1 、var/log/nginx2 等等,3 个好处:( 1 )容器重建能保留老日志(尤其被攻击时,经常会重建容器避免日志丢失) ( 2 )日志保存在主机速度更快( 3 )日志很大时,文件在主机上便于清理
    raw0xff
        15
    raw0xff  
    OP
       2023-09-10 16:17:58 +08:00   1
    @yinmin 收到,感谢大佬不吝赐教,趁教师节也祝大佬教师节快乐哈哈!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     912 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:58 PVG 04:58 LAX 13:58 JFK 16:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86