V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
drymonfidelia
V2EX  ›  NGINX

有台生产服务器, Nginx 每天都会因为不同原因 exit 一次,虽然配了自动重启,有没办法排查是什么原因?平均一天 1820 万请求

  •  
  •   drymonfidelia · 2024-08-15 13:19:10 +08:00 · 3698 次点击
    这是一个创建于 385 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每天原因都不一样,这是今天的日志

    Aug 15 13:07:32 hostname nginx[3297853]: nginx: [emerg] host not found in upstream "backend.example.com" in /etc/nginx/sites-enabled/app1:25
    Aug 15 13:07:32 hostname nginx[3297853]: nginx: configuration file /etc/nginx/nginx.conf test failed
    Aug 15 13:07:32 hostname systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
    Aug 15 13:07:32 hostname systemd[1]: nginx.service: Failed with result 'exit-code'.
    Aug 15 13:07:32 hostname systemd[1]: Failed to start A high performance web server and a reverse proxy server.
    

    在这几秒前崩了没写日志,这个日志是刚自动重启后又崩了的。没改配置,10 秒后第三次自动重启就成功了。backend 在别的服务器上,内网 DNS 也一直正常

    24 条回复    2024-08-16 15:02:04 +08:00
    swLoXtOtd89pGg8t
        1
    swLoXtOtd89pGg8t  
       2024-08-15 13:24:42 +08:00
    upstream 后端没起来?
    daimaosix
        2
    daimaosix  
       2024-08-15 13:24:50 +08:00
    看看是不是被 CC 了
    kk2syc
        3
    kk2syc  
       2024-08-15 13:24:50 +08:00
    内网 DNS 的问题,在 /etc/hosts 中配置 backend.example.com IP 试试看
    lpe234
        4
    lpe234  
       2024-08-15 13:25:57 +08:00
    感觉,`内网 DNS 也一直正常` 和 `host not found in upstream "backend.example.com" ` 相比较而言,NGINX 的日志更可信
    yannxia
        5
    yannxia  
       2024-08-15 13:27:09 +08:00
    host not found in upstream ,这个很明确吧···
    billbur
        6
    billbur  
       2024-08-15 13:28:32 +08:00
    "backend.example.com"这可不像一个生产环境该出现的域名
    drymonfidelia
        7
    drymonfidelia  
    OP
       2024-08-15 13:29:18 +08:00
    @billbur 是公司的域名,我发日志的时候换成了 example
    march1993
        8
    march1993  
       2024-08-15 13:39:56 +08:00
    @drymonfidelia 挂之前的日志呢? sudo dmesg 看看有没有 OOM
    drymonfidelia
        9
    drymonfidelia  
    OP
       2024-08-15 14:15:17 +08:00
    @march1993 挂之前没有日志,就突然挂了
    wushenlun
        10
    wushenlun  
       2024-08-15 14:21:59 +08:00 via Android
    upstream 别写域名写 ip ,内网 dns 问题,最好要有 debug 日志
    yinmin
        11
    yinmin  
       2024-08-15 14:50:37 +08:00
    upstream 写 ip 。如果 upstream 是 http ,加:proxy_set_header ;如果 upstream 是 https ,加:proxy_ssl_name 、proxy_ssl_server_name 、proxy_set_header

    参考代码如下:
    location /app/ {
    proxy_pass https://192.168.1.100:443;
    proxy_ssl_name backend.example.com;
    proxy_ssl_server_name on;
    proxy_set_header Host backend.example.com;
    ...
    }
    abolast
        12
    abolast  
       2024-08-15 15:18:32 +08:00
    /etc/nginx/sites-enabled/app1 这个文件应该脱敏贴一下吧,nginx 迭代这么多年指定是不会有容易被碰到的 bug ,大概率是你配置写得有问题
    catamaran
        13
    catamaran  
       2024-08-15 16:16:45 +08:00
    有工具在改配置文件? configuration file /etc/nginx/nginx.conf test failed
    runwu2022
        14
    runwu2022  
       2024-08-15 16:36:17 +08:00
    nginx 的配置文件里面 upstream 块配置检查一下,报错明显指向 upstream 内的 server host 主机无法解析或者无法找到
    blackeeper
        15
    blackeeper  
       2024-08-15 17:56:58 +08:00
    这个问题我遇到过,排查过,就是内网 DNS 服务器的问题,写死到 hosts 文件就可以了
    drymonfidelia
        16
    drymonfidelia  
    OP
       2024-08-15 18:05:23 +08:00
    @wushenlun
    @runwu2022
    @blackeeper
    @yinmin 我记得 Nginx 是只有启动的时候会解析一次 DNS ,如果是 DNS 的问题的话应该不会中途崩掉吧?
    @abolast 里面 import 了十几个文件,不知道应该贴哪个
    hefish
        17
    hefish  
       2024-08-15 18:25:46 +08:00
    @drymonfidelia /etc/nginx/sites-enabled/app1 贴这个。
    yinmin
        18
    yinmin  
       2024-08-15 19:01:48 +08:00
    @drymonfidelia

    关于“host not found in upstream”错误,你使用 11 楼的写法,就可以避免了。

    关于不明原因的退出重启,如果你的 nginx 是基于 systemd (systemctl)部署的,你可以试试这命令查看 nginx 系统级日志:journalctl -u nginx

    如果使用 docker 部署的,可以试试:docker logs <nginx 容器名称>
    zpfhbyx
        19
    zpfhbyx  
       2024-08-15 19:10:47 +08:00
    ```
    upstream backend {
    server xxx.com;
    }

    localtion / {
    proxy_pass http://backend;
    ......
    }
    ```
    blackeeper
        20
    blackeeper  
       2024-08-15 22:26:27 +08:00
    @drymonfidelia 你这个 nginx 是 reload 了,然后 dns 没办法解析,ng 就退出了。
    xxxccc
        21
    xxxccc  
       2024-08-16 09:47:35 +08:00
    “/etc/nginx/sites-enabled/app1:25” 看看这个文件的第 25 行吧
    drymonfidelia
        22
    drymonfidelia  
    OP
       2024-08-16 13:49:53 +08:00
    @xxxccc 第 25 行就是 proxy_pass 没什么特别的
    drymonfidelia
        23
    drymonfidelia  
    OP
       2024-08-16 13:50:52 +08:00
    @yinmin 我贴的就是 `journalctl -u nginx` 输出的日志,之前不知道为什么没输出日志直接崩了,现在按照你说的把域名换成 IP 了,不知道今天还会不会崩
    yinmin
        24
    yinmin  
       2024-08-16 15:02:04 +08:00
    @drymonfidelia 你查一下/var/log/nginx 下面的日志文件 access.log 、error.log 在 nginx 异常重启前的日志情况

    如果日志文件很大,可以使用 awk 根据时间查看:

    awk '$4 >= "[15/Aug/2024:13:07:00" && $4 <= "[15/Aug/2024:13:07:33"' /var/log/nginx/access.log
    awk '$1 >= "2024/08/15" && $1<= "2024/08/15" && $2 >="13:07:00" && $2<="13:07:33"' /var/log/nginx/error.log

    $4 是 access.log 的日期的位置,如果你们自定义过 access.log 的格式,可以修改到匹配的位置
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:21 · PVG 21:21 · LAX 06:21 · JFK 09:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.