[环境配置] Nginx和PHP开机自启动

本文详细介绍了在Windows和Linux环境下,如何使用Nginx和PHP搭建高性能Web服务器,包括服务注册、多进程配置及开机自启动设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows:

Windows Service Wrapper【下载 .exe 文件即可,根据系统选择,Win 10 选择 .NET4 版本,以下选择 .NET2 版本】

xxfpm【用来开启 PHP-CGI 多进程】

Nginx:

下载后将WinSW.NET4.exe放入Nginx的安装目录下,并且将其重命名为 nginx-service.exe ,在该目录下新建 nginx-service.xml 文件,写入以下配置信息:

<service>
    <!-- 服务 ID,命令行使用这个名字可以启动/停止服务 -->
    <id>nginx-server</id>
    <!-- 服务名称,可任意,为了方便建议和 ID 一致 -->
    <name>nginx-server</name>
    <!-- 服务描述,任意 -->
    <description>nginx-server.</description>
    <!-- 启动程序名称,不用修改 -->
    <executable>nginx.exe</executable>
    <!-- 停止服务时执行程序名称 -->
    <!-- 解释一下为何用 Win 的 taskkill 命令。因为 Nginx 利用服务启动的情况下无法使用 nginx -s stop 或 nginx -s quiet 命令结束进程,会提示权限不足 -->
    <stopexecutable>taskkill</stopexecutable>
    <!-- 以下三行是 taskkill 的参数,不用修改 -->
    <stopargument>/F</stopargument>
    <stopargument>/IM</stopargument>
    <stopargument>nginx.exe</stopargument>
    <!-- 日志路径,将生成日志至 nginx/logs 目录 -->
    <logpath>logs</logpath>
</service>

以上内容配置好了之后,以管理员身份打开cmd,切换到nginx安装目录下运行命令:nginx-service.exe install 就成功将其注册为Windows服务了,然后运行 nginx-service.exe start 启动服务。这时我们可以在Windows任务管理器的服务中查看该是否成功启动.

PHP:

1.多进程:

在PHP安装同级目录下新建 xxfpm 文件夹

  1. xxfpm 压缩包内打开 bin 文件夹,将 xxfpm.exe 和 pthreadGC2.dll 扔进新建的 xxfpm 文件夹.
  2. WinSW.NET4.exe放入xxfpm的目录下,并重命名为PHP-CGI.exe.
  3. 然后创建同名的 PHP-CGI.xml 文件,内容如下:
<service>
    <id>PHP-CGI</id>
    <name>PHP-CGI</name>
    <description>PHP-CGI.</description>
    <executable>xxfpm.exe</executable>
    <!-- 启动参数 -->
    <startargument>"D:/WebDevEnvironment/php71/php-cgi.exe -c D:/WebDevEnvironment/php71/php.ini"</startargument>
    <startargument>-n</startargument>
    <!-- 启动进程数量,可修改,建议大于 1 -->
    <startargument>2</startargument>
    <startargument>-i</startargument>
    <!-- 监听IP,默认一般都用 127.0.0.1 -->
    <startargument>127.0.0.1</startargument>
    <startargument>-p</startargument>
    <!-- 监听端口,默认一般都用 9000 -->
    <startargument>9000</startargument>
    <!-- 停止参数 -->
    <stopexecutable>taskkill</stopexecutable>
    <stopargument>/F</stopargument>
    <stopargument>/IM</stopargument>
    <stopargument>xxfpm.exe</stopargument>
    <logpath>logs</logpath>
</service>

同样以管理员身份打开cmd,切换到xxfpm安装目录下运行命令:PHP-CGI.exe install 就成功将其注册为Windows服务了.

 

Linux:

nginx:

第一种:

在linux系统的 /etc/init.d/ 目录下创建 nginx 文件,并且在新建文件中添加如下内容:

#!/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
# config:      /etc/sysconfig/nginx
# 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"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -z "`grep $user /etc/passwd`" ]; then
       useradd -M -s /bin/nologin $user
   fi
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    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
    sleep 1
    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

nginx=”/usr/sbin/nginx” 修改成nginx执行程序的路径.

NGINX_CONF_FILE=”/etc/nginx/nginx.conf” 修改成配置文件的路径.

保存后设置权限: chmod a+x /etc/init.d/nginx

这时就可以使用 /etc/init.d/nginx start /etc/init.d/nginx stop 对Nginx进行控制了.

先将nginx服务加入chkconfig管理列表: chkconfig --add /etc/init.d/nginx

加完之后就可以使用service对nginx进行 service nginx startservice nginx stop 等操作了.

最后设置开机启动 chkconfig nginx on

 

第二种:

依然是在linux系统创建 /etc/init.d/nginx 文件,并且在新建文件中添加如下内容:

#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf

nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.

start() {

if [ -e $nginx_pid ];then

   echo "nginx already running...."

   exit 1

fi

   echo -n $"Starting $prog: "

   daemon $nginxd -c ${nginx_config}

   RETVAL=$?

   echo

   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx

   return $RETVAL

}

# Stop nginx daemons functions.

stop() {

        echo -n $"Stopping $prog: "

        killproc $nginxd

        RETVAL=$?

        echo

        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid

}

# reload nginx service functions.

reload() {

    echo -n $"Reloading $prog: "

    #kill -HUP `cat ${nginx_pid}`

    killproc $nginxd -HUP

    RETVAL=$?

    echo

}

# See how we were called.

case "$1" in

start)

        start

        ;;

stop)

        stop

        ;;

reload)

        reload

        ;;

restart)

        stop

        start

        ;;

status)

        status $prog

        RETVAL=$?

        ;;

*)

        echo $"Usage: $prog {start|stop|restart|reload|status|help}"

        exit 1

esac

exit $RETVAL

nginxd=/usr/local/nginx/sbin/nginx 修改成nginx执行程序的路径.

nginx_config=/usr/local/nginx/conf/nginx.conf 修改成配置文件的路径.

接着,设置文件的访问权限:

chmod a+x /etc/init.d/nginx   (a+x参数表示 ==> all user can execute  所有用户可执行)

打开rc.local文件: vi /etc/rc.local 将 /etc/init.d/nginx start 添加进文件中并保存

下次重启就会生效,实现nginx的自启动.

PHP:

添加方式和Nginx相同.

创建新文件 vim /etc/init.d/php-fpm ,在新建文件中添加如下内容:

#!/bin/sh  
# chkconfig:   2345 15 95

# description:  PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation \

# with some additional features useful for sites of any size, especially busier sites.
# DateTime: 2016-09-20

# Source function library.  
. /etc/rc.d/init.d/functions  

# Source networking configuration.  
. /etc/sysconfig/network  

# Check that networking is up.  
[ "$NETWORKING" = "no" ] && exit 0  

phpfpm="/usr/local/php/sbin/php-fpm"  
prog=$(basename ${phpfpm})  

lockfile=/var/lock/subsys/phpfpm

start() {  
    [ -x ${phpfpm} ] || exit 5  
    echo -n $"Starting $prog: "  
    daemon ${phpfpm}
    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 ${phpfpm} -HUP  
    RETVAL=$?  
    echo  
}  

force_reload() {  
    restart  
}  

configtest() {  
  ${phpfpm} -t
}  

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  
        ;;  
    status)  
        rh_status  
        ;;  
    *)  
        echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"  
        exit 2  
esac    

phpfpm="/usr/local/php/sbin/php-fpm" 修改成php执行程序的路径.

lockfile=/var/lock/subsys/phpfpm 修改成php锁的路径.

再就是保存并加到开机启动项里面去: chkconfig --add php-fpm

使用 service php-fpm start 和 service php-fpm stop 测试一下.

最后设置开机启动 chkconfig php-fpm on

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值