让 nginx 跟随系统启动,从此告别每次重启电脑后手动敲命令的烦恼。
无论是开发环境还是生产服务器,nginx 作为高性能的 web 服务器和反向代理,常常需要 7×24 小时运行。如果每次电脑或服务器重启后都要手动启动它,既繁琐又容易遗忘。本文将详细讲解在 windows、linux、macos 三大主流操作系统上,如何将 nginx 配置为系统服务,实现开机自动启动。
目录
windows 系统
- 方法一:winsw 注册为系统服务(推荐)
- 方法二:任务计划程序
linux 系统
- 方法一:systemd(通用推荐)
- 方法二:手动创建 systemd 服务文件(源码编译安装)
macos 系统
- 方法一:homebrew(最简单)
- 方法二:手动创建 launchd 服务文件
常见问题与故障排查
- 如何卸载已存在的 nginx 服务
- 端口冲突
- 路径错误
- 脚本权限不足
windows 系统
方法一:winsw 注册为系统服务(推荐)
winsw 是一个轻量级的开源工具,可以将任何可执行程序包装成 windows 系统服务。
1. 下载 winsw
前往 github releases 下载 winsw-net4.exe(.net 4 环境)或最新版。将其放入 nginx 根目录,并重命名为 nginx-service.exe。
2. 创建配置文件
在同目录下新建 nginx-service.xml,写入以下内容(请将路径替换为你的实际路径):
<service> <id>nginx</id> <name>nginx web server</name> <description>nginx http server</description> <executable>c:\path\to\your\nginx\nginx.exe</executable> <logpath>c:\path\to\your\nginx\logs</logpath> <startmode>automatic</startmode> <stopexecutable>c:\path\to\your\nginx\nginx.exe</stopexecutable> <stopargument>-s</stopargument> <stopargument>stop</stopargument> </service>
3. 安装服务
以管理员身份打开命令提示符,进入 nginx 目录,执行:
nginx-service.exe install
4. 验证
按下 win + r,输入 services.msc 打开“服务”,找到 nginx web server,确认其“启动类型”为 自动。你也可以右键手动启动一次测试。
方法二:任务计划程序
无需第三方工具,利用 windows 自带的任务计划程序即可。
按下 win 键,搜索并打开“任务计划程序”。
右侧点击“创建基本任务”。
- 名称:
nginx auto start - 触发器:选择“当计算机启动时”
- 操作:选择“启动程序”
- 程序或脚本:浏览选择
nginx.exe
完成创建后,重启电脑验证。
注意:请确保 nginx 所在目录路径不包含空格或中文,否则可能导致任务执行失败。
linux 系统
现代 linux 发行版(ubuntu 16.04+、centos 7+、debian 8+ 等)统一使用 systemd 管理服务。
方法一:systemd(通用推荐)
如果你通过包管理器(apt、yum、dnf)安装 nginx,systemd 服务文件通常已经自动生成,只需执行以下命令:
# 设置开机自启 sudo systemctl enable nginx # 立即启动服务 sudo systemctl start nginx
检查状态:
sudo systemctl status nginx
输出中若包含 enabled,则表示开机自启已配置成功。
方法二:手动创建 systemd 服务文件(源码编译安装)
如果你通过源码编译安装 nginx,需要手动创建服务文件。
1. 创建服务文件
sudo nano /etc/systemd/system/nginx.service
2. 粘贴以下配置(根据你的实际安装路径修改 execstart 等参数):
[unit] description=nginx - high performance web server after=network.target [service] type=forking execstartpre=/usr/local/nginx/sbin/nginx -t execstart=/usr/local/nginx/sbin/nginx execreload=/bin/kill -s hup $mainpid execstop=/bin/kill -s quit $mainpid privatetmp=true [install] wantedby=multi-user.target
3. 重载并启用服务
sudo systemctl daemon-reload sudo systemctl enable --now nginx
macos 系统
macos 使用 launchd 管理后台服务。
方法一:homebrew(最简单)
如果你通过 homebrew 安装了 nginx,只需一条命令:
brew services start nginx
该命令会自动将 nginx 配置为开机自启并立即启动。若要停止或重启:
brew services stop nginx brew services restart nginx
方法二:手动创建 launchd 服务文件
适合不使用 homebrew 或需要精细控制的场景。
1. 创建 plist 文件
sudo nano /library/launchdaemons/com.nginx.plist
2. 填写配置(修改 nginx 实际路径):
<?xml version="1.0" encoding="utf-8"?>
<!doctype plist public "-//apple//dtd plist 1.0//en" "http://www.apple.com/dtds/propertylist-1.0.dtd">
<plist version="1.0">
<dict>
<key>label</key>
<string>com.nginx</string>
<key>programarguments</key>
<array>
<string>/usr/local/nginx/sbin/nginx</string>
<string>-g</string>
<string>daemon off;</string>
</array>
<key>runatload</key>
<true/>
<key>keepalive</key>
<true/>
</dict>
</plist>3. 加载并启动
sudo launchctl load /library/launchdaemons/com.nginx.plist sudo launchctl start com.nginx
常见问题与故障排查
如何卸载已存在的 nginx 服务
如果你在安装时遇到“服务已存在”的提示,可以按以下方法卸载旧服务(以 windows 为例,其他系统类似):
方法一:使用 winsw 的 uninstall 命令
在有 nginx-service.exe 的目录下,以管理员身份运行:
nginx-service.exe uninstall
方法二:使用 sc 命令
sc delete "你的服务名称"
例如 sc delete "nginx web server"。
方法三:powershell(版本 6+)
remove-service -name "你的服务名称"
方法四:注册表删除(高级)
打开 regedit,导航到 hkey_local_machine\system\currentcontrolset\services,找到对应的服务文件夹,右键删除。
端口冲突
nginx 默认监听 80 端口(http)和 443 端口(https)。如果这些端口被其他程序(如 skype、apache、iis)占用,nginx 启动会失败。 排查方法:
- windows:
netstat -ano | findstr :80 - linux/macos:
sudo lsof -i :80
找到占用进程后,停止对应程序或修改 nginx 监听端口。
路径错误
无论是 winsw 的 xml 配置,还是 systemd/launchd 的脚本中,务必使用 nginx 的绝对路径。建议路径中不要含有空格或特殊字符。
脚本权限不足(linux)
如果使用自定义 init 脚本,确保脚本具有可执行权限:
sudo chmod +x /etc/init.d/nginx
对于 systemd 服务文件,通常不需要额外权限,但需要保证 execstart 指向的二进制文件可执行。
结语
通过以上任一方法,即可让 nginx 在系统启动时自动运行。推荐 windows 用户使用 winsw,linux 用户使用 systemd,macos 用户使用 homebrew,它们最稳定、最符合各平台的最佳实践。
以上就是windows/linux/macos上nginx实现开机自启全指南的详细内容,更多关于windows/linux/macos nginx开机自启的资料请关注代码网其它相关文章!
发表评论