运行多个 nginx 容器,宿主机的 9001 9002 9003 9004 转发容器 80 端口。配置文件中 server_name 设置为 localhost 127.0.0.1 和宿主机的 ipv6 地址,目前外网可以访问。
问题是,这个 v6 地址会变(光猫重启),有什么其他的设置方法吗?只要外网能访问就行。 "*" "_"好像都不行,不设置 server_name 也不行。
1
putaozhenhaochi 2023-09-09 17:08:35 +08:00 via Android
外网访问要路由器里做端口映射的吧
|
2
raw0xff OP @putaozhenhaochi 不是端口的问题,可以访问。
|
3
leonshaw 2023-09-09 17:40:31 +08:00 via Android
|
4
yinmin 2023-09-09 17:54:04 +08:00 via iPhone 1
删除 server_name 参数
|
5
kiml 2023-09-09 18:06:38 +08:00 via Android 1
server_name 0.0.0.0
这样是否可行呢 |
8
yinmin 2023-09-09 18:20:33 +08:00 1
@raw0xff #6 你查一下所有的 server {} 配置,同一个端口只允许 1 个 server {}不设置 server_name ,如果有 2 个不设置 server_name 会出问题。
|
9
raw0xff OP |
10
nightcc 2023-09-09 18:57:39 +08:00 via Android
server_name _ 讲道理不应该不行呀,这个不行是指 connection refused ,还是 403 ,404 什么的?
建议拿日志来看看,具体怎么回事 |
11
raw0xff OP @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 。 |
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 到主机上,使容器可以随意摧毁/重建/迁移。 |
13
raw0xff OP @yinmin 感谢大佬。
我是 docker compose 了一个运行着 nginx 的 alpine 服务,服务启动时会 scale 多个容器,nginx.conf conf.d html 这三个理解,log/nginx 是不是不适合我?我也在考虑如何监视多个 nginx 容器运行的状态的问题。扯远了哈哈 |