Nginx(发音为“engine x")是一个免费、开源、高性能的 HTTP 和反向代理服务器,负责处理互联网上一些最大网站的负载。它可以作为独立的 Web 服务器运行,也可以作为 Apache 和其他 Web 服务器的反向代理。

如果您是开发人员或系统管理员,那么您很可能经常需要处理 Nginx。本指南涵盖了最重要和最常用的 Nginx 命令,包括启动、停止、重启和重载 Nginx,以及用于测试配置和读取日志的命令。

开始之前

本指南中的命令假设您已登录为 root 用户或具有 sudo 权限的用户。它们适用于任何将 Nginx 作为 systemd 服务分发的现代 Linux 发行版,包括 Ubuntu、Debian、Fedora、RHEL 及其衍生版本。

启动 Nginx

启动 Nginx 非常简单。运行以下命令:

终端

sudo systemctl start nginx

如果成功,该命令不会产生任何输出。

如果您的系统不使用 systemd,则通过旧的 service 包装器启动服务:

终端

sudo service nginx start

不要每次重启后都手动启动 Nginx,而是将其设置为在系统启动时自动启动:

终端

sudo systemctl enable nginx

您可以结合启用和启动功能,使用 --now 参数将其合并为单个命令:

终端

sudo systemctl enable --now nginx

停止 Nginx

停止 Nginx 会关闭所有 Nginx 工作进程,即使存在打开的连接。要停止服务,请运行以下命令之一:

终端

sudo systemctl stop nginx
sudo service nginx stop

如果您希望进行优雅关闭以先完成正在进行的请求,请使用本指南后面描述的信号接口。

重启 Nginx

重启是快速停止后跟启动。当重载无法应用您所做的更改时使用它,例如当您更改 listen 指令或系统级选项时:

终端

sudo systemctl restart nginx
sudo service nginx restart

您可能还想查看我们关于如何启动、停止和重启 Nginx 的专用指南。

重载 Nginx

每当更改其配置时,您需要重载或重启 Nginx。重载命令加载新配置,使用它启动新的工作进程,并在其活动连接完成时优雅地关闭旧的工作进程:

终端

sudo systemctl reload nginx
sudo service nginx reload

对于大多数配置更改,重载优于重启,因为它避免了连接丢失。

测试 Nginx 配置

在重载或重启之前,请测试配置的语法和系统错误。损坏的配置将拒绝启动服务并可能导致您的网站离线:

终端

sudo nginx -t

有效配置的输出如下所示:

输出

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果配置损坏,nginx -t 会打印失败的行和简短说明。修复错误,再次测试,然后才重载。

转储有效配置

当 nginx.conf 包含来自 /etc/nginx/conf.d/ 或 sites-enabled/ 的文件时,很难看出 Nginx 实际运行的是什么。使用 -T 选项测试配置并将完整的合并内容打印到标准输出:

终端

sudo nginx -t

将其管道传输到 less 以便更容易阅读,或者在需要确认特定指令是否激活时管道传输到 grep:

终端

sudo nginx -T | grep server_name

使用 nginx -s 控制 Nginx

Nginx 二进制文件通过 -s 选项接受信号。这些信号在没有 systemd 的系统上以及在您希望在不经过服务管理器的情况下触发特定行为时非常有用:

  • nginx -s reload - 重载配置,与 systemctl reload nginx 相同。
  • nginx -s stop - 快速关闭。工作进程立即终止。
  • nginx -s quit - 优雅关闭。工作进程在退出前完成活动请求。
  • nginx -s reopen - 关闭并重新打开日志文件。在使用此命令轮换日志后使用,以便 Nginx 写入新文件。

终端

sudo nginx -s reload

查看 Nginx 状态

要检查 Nginx 是否正在运行,请使用 systemctl status:

终端

sudo systemctl status nginx

输出看起来像这样:

输出

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2026-04-15 09:12:04 UTC; 2min 17s ago
       Docs: man:nginx(8)
    Process: 1043 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 1052 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1053 (nginx)
      Tasks: 3 (limit: 4613)
     Memory: 4.2M
        CPU: 18ms
     CGroup: /system.slice/nginx.service
             ├─1053 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─1054 "nginx: worker process"
             └─1055 "nginx: worker process"

Active: 行告诉您服务是否正在运行。在其下方,您将看到主进程和工作进程及其 PID。

检查 Nginx 版本

有时您需要知道您的 Nginx 版本以调试问题或检查功能是否可用:

终端

nginx -v

输出

nginx version: nginx/1.24.0 (Ubuntu)

-V 选项(大写)打印版本以及构建标志,包括每个编译模块和 OpenSSL 版本:

终端

nginx -v

这是检查模块是否属于您的 Nginx 构建的最快方法。如果您正在调试证书或 TLS 握手,请将其与 openssl 命令配对以检查 Nginx 提供的活动证书。

查看 Nginx 日志

Nginx 默认写入两个日志文件:位于 /var/log/nginx/access.log 的访问日志和位于 /var/log/nginx/error.log 的错误日志。调试失败的请求时请遵循错误日志:

终端

sudo tail -f /var/log/nginx/error.log

在基于 systemd 的发行版上,journalctl 显示不出现在 Nginx 日志文件中的启动和服务级消息。这就是您找到“nginx.service 作业失败”原因的地方:

终端

sudo journalctl -u nginx

添加 -f 以实时跟踪新条目,或添加 -n 50 仅查看最后 50 行。

快速参考

对于可打印的快速参考,请参阅 Nginx 速查表。

操作命令
启动 Nginxsudo systemctl start nginx
停止 Nginxsudo systemctl stop nginx
重启 Nginxsudo systemctl restart nginx
重载配置sudo systemctl reload nginx
启动时启用sudo systemctl enable nginx
启动时禁用sudo systemctl disable nginx
显示状态sudo systemctl status nginx
测试配置sudo nginx -t
转储完整配置sudo nginx -T
优雅关闭sudo nginx -s quit
重新打开日志文件sudo nginx -s reopen
打印版本nginx -v
打印构建标志nginx -V
读取服务日志sudo journalctl -u nginx

故障排除

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
另一个进程已经在端口 80 上监听。在新鲜服务器上,这通常是 Apache。使用 sudo systemctl stop apache2(或在 Fedora、RHEL 及其衍生版本上使用 httpd)停止它,然后启动 Nginx。使用 sudo ss -ltnp | grep:80 识别持有端口的进程。

nginx -t 报告配置错误
在重载之前修复报告的文件和行号。使用损坏的配置进行重载会保留旧的工作进程运行,并掩盖问题直到下一次完全重启。

systemctl status nginx 显示 failed
运行 sudo journalctl -u nginx -n 50 以读取最后 50 条服务日志条目。Nginx 会在那里打印启动失败的原因,例如缺少 SSL 证书文件或指令无效。

对 nginx.conf 的更改不会生效
重载应用完整的生效配置,包括通过 include 引入的文件。如果您编辑了 Nginx 不从 nginx.conf 加载的文件,重载将没有效果。运行 sudo nginx -T 以确认您的文件是生效配置的一部分。

常见问题解答

sudo nginx -s reload 和 sudo systemctl restart nginx 有什么区别?
sudo nginx -s reload 加载新配置,并让现有的工作进程在完成其活动请求后退出,因此没有断开的连接。sudo systemctl restart nginx 停止并启动服务,这会短暂中断流量。使用重载进行配置更改,仅在重载无法应用更改时才使用重启。

nginx -t 需要 sudo 吗?
通常是的,因为测试会读取由 root 拥有的文件,例如位于 /etc/nginx/ 下的 SSL 密钥和片段。在不使用 sudo 运行的情况下,即使配置本身有效,也经常会因权限错误而失败。

如何在启动时自动启动 Nginx?
运行 sudo systemctl enable nginx。要在新鲜安装中一步启用并启动,请使用 sudo systemctl enable --now nginx。

如何检查已编译的 Nginx 模块?
运行 nginx -V。该命令打印构建标志,包括编译时传递的每个 --with-*_module 选项。