故障排除#

如果您遇到技术问题并且在其他部分找不到解决方案,请在 社区论坛Telegram 频道 上提问。

客户技术支持:

  • https://support.angie.software

调试日志#

在执行自我诊断或按照技术支持建议进行操作之前,应启用调试日志。

为此,请使用支持调试的可执行文件运行 Angie:

在 Linux 的 预构建包 中,angie-debug 文件是启用调试日志构建的:

$ ls -l /usr/sbin/ | grep angie

   lrwxrwxrwx 1 root root      13 Sep 21 18:58 angie -> angie-nodebug
   -rwxr-xr-x 1 root root 1561224 Sep 21 18:58 angie-debug
   -rwxr-xr-x 1 root root 1426056 Sep 21 18:58 angie-nodebug

配置运行 angie-debug

$ sudo ln -fs angie-debug /usr/sbin/angie
$ sudo angie -t && sudo service angie upgrade

这将启动 实时可执行文件升级

调试后要恢复到常规可执行文件:

$ sudo ln -fs angie-nodebug /usr/sbin/angie
$ sudo angie -t && sudo service angie upgrade

备注

使用支持调试的可执行文件可能会略微降低性能;启用调试日志可能会显著降低性能并增加磁盘空间使用。

要启用调试日志,请在配置中使用 error_log 指令设置 debug 级别:

error_log /path/to/log debug;

并重新加载配置:

$ sudo angie -t && sudo service angie reload

在启用调试日志的 模板化 Docker 镜像 中,您也可以使用 ANGIE_ERROR_LOG_SEVERITY 环境变量:

$ docker run -it --rm -e ANGIE_BINARY="angie-debug" \
-e ANGIE_ERROR_LOG_SEVERITY="debug" \
docker.angie.software/angie:templated

如果切换到不支持调试的可执行文件但在 error_log 指令中保留 debug 级别,Angie 将以 info 级别记录条目。

在配置中覆盖 error_log 而不指定 debug 级别将禁用调试日志。在此处,在 server 级别覆盖日志会为单个服务器禁用调试日志:

error_log /path/to/log debug;

http {
   server {
     error_log /path/to/log;
    # ...

要避免这种情况,请移除覆盖 error_log 的行,或在其中设置 debug 级别:

error_log /path/to/log debug;

http {
   server {
     error_log /path/to/log debug;
   #  ...

指令位置#

error_log 指令的位置会影响收集的调试信息的完整性。

在较低配置级别(例如,在 serverlocation 块内)指定的指令会覆盖在较高级别(例如,在主配置级别或 http 块内)指定的日志设置。

为特定服务器禁用调试日志

如果全局启用了调试日志,但为单个服务器指定了不带 debug 级别的 error_log,则不会为该服务器收集调试信息。

error_log /var/log/angie/error.log debug; # 全局调试日志

http {

    server {

        listen 80;
        server_name example.com;

        error_log /var/log/angie/example.com.error.log;
        # example.com 的调试日志被禁用,文件包含 info 级别

        # ...
    }

    server {

        listen 80;
        server_name another.com;

        # 此服务器将使用全局调试日志
        # ...
    }
}

在服务器级别保留调试日志

要为特定服务器保留调试信息收集但将其定向到不同的文件,您必须同时指定 debug 级别:

error_log /var/log/angie/error.log debug; # 全局调试日志

http {

    server {

        listen 80;
        server_name example.com;

        error_log /var/log/angie/example.com.error.log debug;
        # example.com 的调试日志已启用但写入单独的文件

        # ...
    }
}

因此,要全局启用调试日志但为单个块覆盖日志文件,也请在这些覆盖中指定 debug 级别。否则,如果在 error_log 指令中未指定日志级别,将默认使用 error 级别,这些块的调试信息将丢失。

记录特定地址#

您可以仅为 指定的客户端地址 启用调试日志:

error_log /path/to/log;

events {
  debug_connection 192.168.1.1;
  debug_connection 192.168.10.0/24;
}

循环内存缓冲区#

调试日志可以写入循环内存缓冲区:

error_log memory:32m debug;

debug 级别写入内存缓冲区即使在高负载下也不会显著影响性能。在这种情况下,可以使用 GDB 脚本提取日志,例如:

set $log = ngx_cycle->log

while $log->writer != ngx_log_memory_writer
  set $log = $log->next
end

set $buf = (ngx_log_memory_buf_t *) $log->wdata
dump binary memory debug_log.txt $buf->start $buf->end

核心转储#

核心转储有助于调查崩溃。在 联系支持 时请包含它们。对于从 我们的仓库 构建的版本,我们在特殊包中提供调试符号。它们与原始包同名,但添加了 -dbg 后缀,例如 angie-dbg

备注

本节假设您以 root 用户身份运行 Angie(推荐)。

Linux: systemd#

要在将 Angie 作为 systemd 服务运行时启用核心转储保存(例如,当 从包安装 时),请修改 /lib/systemd/system/angie.service 文件中的 服务设置

[Service]
...
LimitCORE=infinity
LimitNOFILE=65535

或更新 /etc/systemd/system.conf 文件中的 全局设置

[Manager]
...
DefaultLimitCORE=infinity
DefaultLimitNOFILE=65535

然后重新加载服务配置并重启 Angie 以重现崩溃条件:

$ sudo systemctl daemon-reload
$ sudo systemctl restart angie.service

崩溃后,查找核心转储文件:

$ sudo coredumpctl -1 # 可选

   TIME                           PID   UID   GID SIG COREFILE  EXE
   --- 2025-07-17 11:05:40 GMT   1157     0     0  11 present   /usr/sbin/angie

$ sudo ls -al /var/lib/systemd/coredump/  # 默认位置,另见 /etc/systemd/coredump.conf 和 /etc/systemd/coredump.conf.d/*.conf

  ...
  -rw-r----- 1 root root 177662 Jul 27 11:05 core.angie.0.6135489c850b4fb4a74795ebbc1e382a.1157.1590577472000000.lz4

Linux: 手动配置#

检查 /etc/security/limits.conf 文件中的 核心转储设置,必要时修改它们:

root soft core 0          # 默认禁用核心转储
root hard core unlimited  # 允许增加大小限制

然后使用 ulimit 增加核心转储大小限制,然后重启 Angie 以重现崩溃条件:

$ sudo ulimit -c unlimited
$ sudo cd <Angie 安装目录路径>
$ sudo sbin/angie  # 或 sbin/angie-debug

崩溃后,查找核心转储文件:

$ sudo ls -al <Angie 工作目录路径>  # 默认位置,见 /proc/sys/kernel/core_pattern
  ...
  -rw-r----- 1 root root 177662 Jul 27 11:05 core.1157

FreeBSD#

检查 /etc/sysctl.conf 文件中的 核心转储设置,必要时修改它们:

kern.coredump=1                             # 应为 1
kern.corefile=/path/to/core/files/%N.core   # 需要正确路径

或在运行时更新设置:

$ sudo sysctl kern.coredump=1
$ sudo sysctl kern.corefile=/path/to/core/files/%N.core

然后重启 Angie 以重现崩溃条件。 如果 Angie 作为服务安装:

$ sudo service angie restart

如果 Angie 手动安装:

$ sudo cd <Angie 安装目录路径>
$ sudo sbin/angie

崩溃后,查找核心转储文件:

$ sudo ls -al <核心转储文件路径>

  ...
  -rw------- 1 root root 9912320 Jul 27 11:05 angie