Skip to content
🗂️ 文章分类: 服务器  
🏷️ 文章标签: Nginx  
📝 文章创建时间: 2026-02-07
🔥 文章最后更新时间:暂无

[toc]

Nginx开机自启笔记

Nginx作为Web服务器,通常需要设置为开机自启动,以确保服务器重启后Web服务能够自动恢复。下面介绍在不同操作系统下的设置方法。

Windows系统设置开机自启

方法一:使用任务计划程序(推荐)

  1. 打开"任务计划程序"

    • Win + R 键,输入 taskschd.msc 回车
    • 或者在控制面板中找到"管理工具" → "任务计划程序"
  2. 创建基本任务

    bash
    # 在任务计划程序中操作:
    # 1. 右侧点击"创建基本任务"
    # 2. 输入名称:Nginx Auto Start
    # 3. 触发器选择"计算机启动时"
    # 4. 操作选择"启动程序"
    # 5. 程序或脚本:C:\nginx\nginx.exe
    # 6. 参数:留空
    # 7. 完成创建

方法二:创建批处理文件并添加到启动文件夹

  1. 创建启动脚本 nginx_start.bat

    batch
    @echo off
    cd /d C:\nginx
    start nginx.exe
  2. 将批处理文件放入启动文件夹:

    bash
    # Windows启动文件夹路径:
    C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

方法三:使用Windows服务(需要第三方工具)

可以使用NSSM(Non-Sucking Service Manager)将Nginx注册为Windows服务:

  1. 下载NSSM:https://nssm.cc/download
  2. 安装Nginx服务:
    cmd
    nssm install nginx
    # 在弹出的窗口中设置:
    # Path: C:\nginx\nginx.exe
    # Startup directory: C:\nginx
    # 点击"Install service"
  3. 启动服务:
    cmd
    net start nginx

Linux系统设置开机自启

方法一:使用systemd(CentOS 7+/Ubuntu 16.04+)

  1. 创建systemd服务文件:

    bash
    sudo vim /etc/systemd/system/nginx.service
  2. 编辑服务文件内容:

    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
  3. 启用并启动服务:

    bash
    sudo systemctl daemon-reload
    sudo systemctl enable nginx
    sudo systemctl start nginx

方法二:使用init.d脚本(CentOS 6/Ubuntu 14.04)

  1. 创建启动脚本:

    bash
    sudo vim /etc/init.d/nginx
  2. 编辑脚本内容:

    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
  3. 设置权限并启用服务:

    bash
    sudo 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

最佳实践建议

  1. Windows系统:推荐使用任务计划程序,简单可靠
  2. Linux系统:推荐使用systemd,功能强大且易于管理
  3. 测试验证:设置完成后务必重启服务器进行验证
  4. 日志监控:配置日志轮转,定期检查错误日志
  5. 备份配置:修改重要配置前做好备份

通过以上设置,可以确保Nginx在服务器重启后自动启动,保证Web服务的持续可用性。