[toc]
Nginx开机自启笔记
Nginx作为Web服务器,通常需要设置为开机自启动,以确保服务器重启后Web服务能够自动恢复。下面介绍在不同操作系统下的设置方法。
Windows系统设置开机自启
方法一:使用任务计划程序(推荐)
打开"任务计划程序"
- 按
Win + R键,输入taskschd.msc回车 - 或者在控制面板中找到"管理工具" → "任务计划程序"
- 按
创建基本任务
bash# 在任务计划程序中操作: # 1. 右侧点击"创建基本任务" # 2. 输入名称:Nginx Auto Start # 3. 触发器选择"计算机启动时" # 4. 操作选择"启动程序" # 5. 程序或脚本:C:\nginx\nginx.exe # 6. 参数:留空 # 7. 完成创建
方法二:创建批处理文件并添加到启动文件夹
创建启动脚本
nginx_start.bat:batch@echo off cd /d C:\nginx start nginx.exe将批处理文件放入启动文件夹:
bash# Windows启动文件夹路径: C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
方法三:使用Windows服务(需要第三方工具)
可以使用NSSM(Non-Sucking Service Manager)将Nginx注册为Windows服务:
- 下载NSSM:
https://nssm.cc/download - 安装Nginx服务:cmd
nssm install nginx # 在弹出的窗口中设置: # Path: C:\nginx\nginx.exe # Startup directory: C:\nginx # 点击"Install service" - 启动服务:cmd
net start nginx
Linux系统设置开机自启
方法一:使用systemd(CentOS 7+/Ubuntu 16.04+)
创建systemd服务文件:
bashsudo vim /etc/systemd/system/nginx.service编辑服务文件内容:
ini[Unit] Description=The nginx HTTP and reverse proxy server After=network.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/usr/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target启用并启动服务:
bashsudo systemctl daemon-reload sudo systemctl enable nginx sudo systemctl start nginx
方法二:使用init.d脚本(CentOS 6/Ubuntu 14.04)
创建启动脚本:
bashsudo vim /etc/init.d/nginx编辑脚本内容:
bash#!/bin/sh # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" lockfile=/var/lock/subsys/nginx start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac设置权限并启用服务:
bashsudo chmod +x /etc/init.d/nginx sudo chkconfig --add nginx sudo chkconfig nginx on
验证开机自启设置
Windows验证方法:
cmd
# 重启计算机后检查Nginx是否运行
tasklist | findstr nginx
# 或者访问 http://localhost 查看是否正常Linux验证方法:
bash
# 检查服务状态
sudo systemctl status nginx
# 检查是否已启用开机自启
sudo systemctl is-enabled nginx
# 重启服务器后验证
sudo reboot
# 重启后检查Nginx状态
sudo systemctl status nginx常见问题解决
问题1:Windows下Nginx启动失败
batch
# 检查端口占用
netstat -ano | findstr :80
netstat -ano | findstr :443
# 如果端口被占用,可以修改Nginx配置文件中的端口
# 或者停止占用端口的进程问题2:Linux下权限问题
bash
# 检查Nginx进程用户
ps aux | grep nginx
# 如果使用非root用户运行,确保有相应目录的访问权限
sudo chown -R nginx:nginx /var/log/nginx
sudo chown -R nginx:nginx /var/cache/nginx问题3:配置文件错误导致启动失败
bash
# 测试配置文件语法
nginx -t
# 查看详细错误日志
tail -f /var/log/nginx/error.log最佳实践建议
- Windows系统:推荐使用任务计划程序,简单可靠
- Linux系统:推荐使用systemd,功能强大且易于管理
- 测试验证:设置完成后务必重启服务器进行验证
- 日志监控:配置日志轮转,定期检查错误日志
- 备份配置:修改重要配置前做好备份
通过以上设置,可以确保Nginx在服务器重启后自动启动,保证Web服务的持续可用性。
