[GH-ISSUE #593] 只要有一个站点连不上,服务就无法启动 #4726

Closed
opened 2026-03-01 15:35:36 +03:00 by kerem · 19 comments
Owner

Originally created by @chung1912 on GitHub (Oct 6, 2024).
Original GitHub issue: https://github.com/0xJacky/nginx-ui/issues/593

当服务启动时,只要有一个站点连接不上,就无限报如下错误,其他站点也无法使用,面板也进不去,导致想进去操作“禁用”都不行
nginx: [emerg] host not found in upstream "abc" in /etc/nginx/sites-enabled/abc:20

希望可以仅检查有限次数(例如5次),如果连不上,就自动禁用,避免面板进不去

Originally created by @chung1912 on GitHub (Oct 6, 2024). Original GitHub issue: https://github.com/0xJacky/nginx-ui/issues/593 当服务启动时,只要有一个站点连接不上,就无限报如下错误,其他站点也无法使用,面板也进不去,导致想进去操作“禁用”都不行 `nginx: [emerg] host not found in upstream "abc" in /etc/nginx/sites-enabled/abc:20` 希望可以仅检查有限次数(例如5次),如果连不上,就自动禁用,避免面板进不去
kerem 2026-03-01 15:35:36 +03:00
Author
Owner

@0xJacky commented on GitHub (Oct 6, 2024):

这应该是 bug,如果自检查没通过的话是不会重载的

<!-- gh-comment-id:2395368355 --> @0xJacky commented on GitHub (Oct 6, 2024): 这应该是 bug,如果自检查没通过的话是不会重载的
Author
Owner

@chung1912 commented on GitHub (Oct 6, 2024):

这应该是 bug,如果自检查没通过的话是不会重载的

好的,期待修复这个问题

<!-- gh-comment-id:2395371806 --> @chung1912 commented on GitHub (Oct 6, 2024): > 这应该是 bug,如果自检查没通过的话是不会重载的 好的,期待修复这个问题
Author
Owner

@0xJacky commented on GitHub (Oct 6, 2024):

部署方式是?

<!-- gh-comment-id:2395372169 --> @0xJacky commented on GitHub (Oct 6, 2024): 部署方式是?
Author
Owner

@0xJacky commented on GitHub (Oct 6, 2024):

image

检查失败会提示的呀,此时并不会reload

<!-- gh-comment-id:2395372499 --> @0xJacky commented on GitHub (Oct 6, 2024): <img width="698" alt="image" src="https://github.com/user-attachments/assets/8bc64eb4-973a-4f88-af3f-0b0eb6f73d91"> 检查失败会提示的呀,此时并不会reload
Author
Owner

@Hintay commented on GitHub (Oct 6, 2024):

可以详细说明一下出现这个问题时的详细步骤吗?如果配置文件不是由Nginx UI修改的就可能会出现这个问题。

<!-- gh-comment-id:2395373688 --> @Hintay commented on GitHub (Oct 6, 2024): 可以详细说明一下出现这个问题时的详细步骤吗?如果配置文件不是由Nginx UI修改的就可能会出现这个问题。
Author
Owner

@0xJacky commented on GitHub (Oct 6, 2024):

有改过 Nginx 的重载命令吗?https://nginxui.com/zh_CN/guide/config-nginx.html#testconfigcmd

<!-- gh-comment-id:2395373848 --> @0xJacky commented on GitHub (Oct 6, 2024): 有改过 Nginx 的重载命令吗?https://nginxui.com/zh_CN/guide/config-nginx.html#testconfigcmd
Author
Owner

@0xJacky commented on GitHub (Oct 6, 2024):

是在 Nginx UI 之外的对配置文件修改造成的这个问题吗?我这里无法复现。

<!-- gh-comment-id:2395382418 --> @0xJacky commented on GitHub (Oct 6, 2024): 是在 Nginx UI 之外的对配置文件修改造成的这个问题吗?我这里无法复现。
Author
Owner

@chung1912 commented on GitHub (Oct 6, 2024):

部署方式是?

docker-compose,当指向服务器不存在时,且重启或者重新部署的情况下会这样。如果已经是启动状态,删除指向的服务器,不会有问题

<!-- gh-comment-id:2395406944 --> @chung1912 commented on GitHub (Oct 6, 2024): > 部署方式是? > docker-compose,当指向服务器不存在时,且重启或者重新部署的情况下会这样。如果已经是启动状态,删除指向的服务器,不会有问题
Author
Owner

@chung1912 commented on GitHub (Oct 6, 2024):

是在 Nginx UI 之外的对配置文件修改造成的这个问题吗?我这里无法复现。

在ui里面,通过高级配置写的

<!-- gh-comment-id:2395407233 --> @chung1912 commented on GitHub (Oct 6, 2024): > 是在 Nginx UI 之外的对配置文件修改造成的这个问题吗?我这里无法复现。 在ui里面,通过高级配置写的
Author
Owner

@0xJacky commented on GitHub (Oct 6, 2024):

保存之后立即就无法访问了?

<!-- gh-comment-id:2395407315 --> @0xJacky commented on GitHub (Oct 6, 2024): 保存之后立即就无法访问了?
Author
Owner

@chung1912 commented on GitHub (Oct 6, 2024):

有改过 Nginx 的重载命令吗?https://nginxui.com/zh_CN/guide/config-nginx.html#testconfigcmd

这个没有动过

<!-- gh-comment-id:2395407429 --> @chung1912 commented on GitHub (Oct 6, 2024): > 有改过 Nginx 的重载命令吗?https://nginxui.com/zh_CN/guide/config-nginx.html#testconfigcmd 这个没有动过
Author
Owner

@Hintay commented on GitHub (Oct 6, 2024):

请贴出您abc的详细配置,好让我们排查问题,谢谢。

<!-- gh-comment-id:2395408343 --> @Hintay commented on GitHub (Oct 6, 2024): 请贴出您`abc`的详细配置,好让我们排查问题,谢谢。
Author
Owner

@chung1912 commented on GitHub (Oct 6, 2024):

请贴出您abc的详细配置,好让我们排查问题,谢谢。

server {
    listen 4443 ssl;
    listen [::]:4443 ssl;
    http2 on;
    server_name abc;
    ssl_certificate /etc/nginx/ssl/abc/server.crt;
    ssl_certificate_key /etc/nginx/ssl/abc/server.key;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=63072000;includeSubDomains; preload" always;
    error_page 497 https://$host$request_uri;
    location / {
        client_max_body_size 1000m;
        proxy_pass http://192.168.1.88:80;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Accept-Encoding gzip;
    }
}
<!-- gh-comment-id:2395416996 --> @chung1912 commented on GitHub (Oct 6, 2024): > 请贴出您`abc`的详细配置,好让我们排查问题,谢谢。 ```nginx server { listen 4443 ssl; listen [::]:4443 ssl; http2 on; server_name abc; ssl_certificate /etc/nginx/ssl/abc/server.crt; ssl_certificate_key /etc/nginx/ssl/abc/server.key; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=63072000;includeSubDomains; preload" always; error_page 497 https://$host$request_uri; location / { client_max_body_size 1000m; proxy_pass http://192.168.1.88:80; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header Accept-Encoding gzip; } } ```
Author
Owner

@Hintay commented on GitHub (Oct 6, 2024):

出现host not found错误应该是您在proxy_pass中使用了域名,但我没有在配置文件中看到域名,您是不是贴出了修改过后的配置文件?

此外,域名解析不是 Nginx UI 的问题,建议您使用变量方式让 Nginx 懒加载域名。以下是一个示例:

location / {
    set $target http://abc;
    proxy_pass $target;
}

此外,启动时禁用不可用的网站不太符合 Nginx UI 作为管理界面的定位,如果想在 Nginx 不可用的情况下使用 Nginx UI 建议直接暴露管理端口并设置好权限。

<!-- gh-comment-id:2395423840 --> @Hintay commented on GitHub (Oct 6, 2024): 出现`host not found`错误应该是您在`proxy_pass`中使用了域名,但我没有在配置文件中看到域名,您是不是贴出了修改过后的配置文件? 此外,域名解析不是 Nginx UI 的问题,建议您使用变量方式让 Nginx 懒加载域名。以下是一个示例: ```nginx location / { set $target http://abc; proxy_pass $target; } ``` 此外,启动时禁用不可用的网站不太符合 Nginx UI 作为管理界面的定位,如果想在 Nginx 不可用的情况下使用 Nginx UI 建议直接暴露管理端口并设置好权限。
Author
Owner

@chung1912 commented on GitHub (Oct 6, 2024):

出现host not found错误应该是您在proxy_pass中使用了域名,但我没有在配置文件中看到域名,您是不是贴出了修改过后的配置文件?

此外,域名解析不是 Nginx UI 的问题,建议您使用变量方式让 Nginx 懒加载域名。以下是一个示例:

location / {
    set $target http://abc;
    proxy_pass $target;
}

此外,启动时检测 Nginx 的状态并禁用不可用的网站有点不符合 Nginx UI 作为管理界面的定位,如果想在 Nginx 不可用的情况下使用 Nginx UI 建议直接暴露管理端口并设置好权限。

没有域名,我是自签名证书,代理ip地址,为了做https+ip访问用的,那个server_name无论填什么都一样,主要通过端口号来识别,每一个反代都是不一样的端口号,跟域名统一443端口不一样

<!-- gh-comment-id:2395428277 --> @chung1912 commented on GitHub (Oct 6, 2024): > > 出现`host not found`错误应该是您在`proxy_pass`中使用了域名,但我没有在配置文件中看到域名,您是不是贴出了修改过后的配置文件? > > > > 此外,域名解析不是 Nginx UI 的问题,建议您使用变量方式让 Nginx 懒加载域名。以下是一个示例: > > > > ```nginx > > location / { > > set $target http://abc; > > proxy_pass $target; > > } > > ``` > > > > 此外,启动时检测 Nginx 的状态并禁用不可用的网站有点不符合 Nginx UI 作为管理界面的定位,如果想在 Nginx 不可用的情况下使用 Nginx UI 建议直接暴露管理端口并设置好权限。 > > 没有域名,我是自签名证书,代理ip地址,为了做https+ip访问用的,那个server_name无论填什么都一样,主要通过端口号来识别,每一个反代都是不一样的端口号,跟域名统一443端口不一样
Author
Owner

@Hintay commented on GitHub (Oct 6, 2024):

此 Nginx 错误只会出现在 proxy_passupstream 是主机名的情况,如果运行在 Docker 下也包含容器名,且此错误与server_name无关。建议您检查现有的配置文件并重新测试。

<!-- gh-comment-id:2395432654 --> @Hintay commented on GitHub (Oct 6, 2024): 此 Nginx 错误只会出现在 `proxy_pass` 或 `upstream` 是主机名的情况,如果运行在 Docker 下也包含容器名,且此错误与`server_name`无关。建议您检查现有的配置文件并重新测试。
Author
Owner

@chung1912 commented on GitHub (Oct 6, 2024):

此 Nginx 错误只会出现在 proxy_passupstream 是主机名的情况,如果运行在 Docker 下也包含容器名,且此错误与server_name无关。建议您检查现有的配置文件并重新测试。

有的确实是主机名,有的是ip,主机名像http://acd125gh44fgyu:80这样的(docker随机生成的主机名),是主机名的缘故导致的,是吧?按照您说的懒加载可以解决主机名这个问题?

<!-- gh-comment-id:2395435688 --> @chung1912 commented on GitHub (Oct 6, 2024): > 此 Nginx 错误只会出现在 `proxy_pass` 或 `upstream` 是主机名的情况,如果运行在 Docker 下也包含容器名,且此错误与`server_name`无关。建议您检查现有的配置文件并重新测试。 有的确实是主机名,有的是ip,主机名像`http://acd125gh44fgyu:80`这样的(docker随机生成的主机名),是主机名的缘故导致的,是吧?按照您说的懒加载可以解决主机名这个问题?
Author
Owner

@Hintay commented on GitHub (Oct 6, 2024):

是的,同时建议加上 resolver 选项,Docker Compose 的默认 DNS 是 127.0.0.11。示例配置如下:

server {
  ...
  resolver 127.0.0.11 valid=1m ipv6=off;
  location / {
      set $target http://abc;
      proxy_pass $target;
  }
}

参考:

<!-- gh-comment-id:2395437751 --> @Hintay commented on GitHub (Oct 6, 2024): 是的,同时建议加上 resolver 选项,Docker Compose 的默认 DNS 是 127.0.0.11。示例配置如下: ```nginx server { ... resolver 127.0.0.11 valid=1m ipv6=off; location / { set $target http://abc; proxy_pass $target; } } ``` 参考: - https://prds98.com/zh/post/49/ - https://jackyu.cn/tech/solved-nginx-proxy-ddns-timeout/ - https://medium.com/@thingnario/%E6%88%91%E5%80%91%E8%B8%A9%E9%81%8E%E7%9A%84%E5%9D%91%E4%B9%8B-nginx-%E7%9A%84-dns-%E8%A8%98%E9%8C%84%E4%B8%8D%E6%9C%83%E6%9B%B4%E6%96%B0-e0d1abbc93de
Author
Owner

@chung1912 commented on GitHub (Oct 6, 2024):

是的,同时建议加上 resolver 选项,Docker Compose 的默认 DNS 是 127.0.0.11。示例配置如下:

server {
  ...
  resolver 127.0.0.11 valid=1m ipv6=off;
  location / {
      set $target http://abc;
      proxy_pass $target;
  }
}

参考:

非常感谢,这个解决了我的问题

<!-- gh-comment-id:2395445156 --> @chung1912 commented on GitHub (Oct 6, 2024): > 是的,同时建议加上 resolver 选项,Docker Compose 的默认 DNS 是 127.0.0.11。示例配置如下: > > ```nginx > server { > ... > resolver 127.0.0.11 valid=1m ipv6=off; > location / { > set $target http://abc; > proxy_pass $target; > } > } > ``` > > 参考: > > * https://prds98.com/zh/post/49/ > * https://jackyu.cn/tech/solved-nginx-proxy-ddns-timeout/ > * https://medium.com/@thingnario/%E6%88%91%E5%80%91%E8%B8%A9%E9%81%8E%E7%9A%84%E5%9D%91%E4%B9%8B-nginx-%E7%9A%84-dns-%E8%A8%98%E9%8C%84%E4%B8%8D%E6%9C%83%E6%9B%B4%E6%96%B0-e0d1abbc93de 非常感谢,这个解决了我的问题
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/nginx-ui#4726
No description provided.