源码安装Nginx后需手动创建systemd服务文件才能使用systemctl管理;需确认安装路径、主程序、配置文件及PID文件位置,编写/etc/systemd/system/nginx.service并配置ExecStart等参数,最后执行daemon-reload、start、enable完成启用。

源码编译安装的 Nginx 默认不带 systemd 服务文件,必须手动创建一个 .service 文件,才能用 systemctl start、enable 等命令管理。关键不是“生成”,而是按规范手写并放置到正确路径。
确认 Nginx 实际安装路径和关键文件位置
源码安装路径由 ./configure --prefix= 决定,常见为 /usr/local/nginx。需明确以下三项:
-
主程序路径:通常是
/usr/local/nginx/sbin/nginx,可用ls /usr/local/nginx/sbin/nginx验证 -
配置文件路径:默认是
/usr/local/nginx/conf/nginx.conf -
PID 文件路径:Nginx 启动后默认写入
/usr/local/nginx/logs/nginx.pid(需确保该目录可写)
编写标准的 nginx.service 文件
用 root 权限创建文件:sudo vim /etc/systemd/system/nginx.service,填入如下内容(请根据上一步确认的路径替换 ExecStart、ExecReload、PIDFile):
[Unit] Description=The NGINX HTTP and reverse proxy server After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
说明:ExecStartPre 加了配置语法检查,避免 reload 或 start 时因配置错误失败;Type=forking 是因为 Nginx 主进程会 fork 出 worker 进程。
启用并验证服务
写完后执行三步操作:
- 重载 systemd 配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start nginx,再用ps aux | grep nginx或curl -I http://127.0.0.1验证是否运行 - 设为开机自启:
sudo systemctl enable nginx
常见问题处理
如果启动失败,先查日志:sudo journalctl -u nginx -n 50 -e。高频原因包括:
- 权限问题:确保
nginx用户(或运行服务的用户)对/usr/local/nginx/logs/有读写权限 - PID 路径不一致:检查
nginx.conf中pid指令是否与PIDFile=一致(默认就是logs/nginx.pid) - 端口被占:
sudo ss -tuln | grep ':80'查看 80 端口占用情况


















