之前使用nginx和php架设Web环境都是在Linux系统上,最近我尝试了一下在Windows系统上进行这项操作。在这记录一下。以便于以后查阅。

软件安装

Nginx

nginx下载地址:http://nginx.org/en/download.html 你可以在上面的官方地址中下载最新版nginx,我使用的是1.17.6版本(nginx-1.17.6.zip)。 下载zip压缩包后将其解压,把它放在你喜欢的位置,双击里面的nginx.exe就可以运行。 我的nginx路径为C: ginx-1.17.6 nginx运行后,用浏览器打开http://127.0.0.1 ,正常的话就可以看到nginx的欢迎页 nginx欢迎页

PHP

PHP与Nginx一样,也是下载一个压缩包,下载地址:http://php.net/downloads.php ,nginx下PHP是以FastCGI的方式运行,注意我们需要下载非线程安全版本(Non Thread Safe,nts)。 这里我使用的版本是php-7.2.26-nts-Win32-VC15-x64.zip。将其解压并放在你喜欢的位置,这里假设为C:\php-7.2.26-nts-Win32-VC15-x64

环境配置

创建一个文件夹作为网站的运行目录,这个目录后面会多次用到,这里我的是C:\www

Nginx

在Nginx根目录下找到conf目录,编辑器打开其中的nginx.conf

  1. 找到下面这个配置块
    location / {
     root   html;
     index  index.html index.htm;
    }
    

    将其修改为如下,注意修改相关字段

    location / {
     root   C:\www;
     index  index.html index.htm index.php;
     }
    
  2. 找到下面这个配置块
    #location ~ \.php$ {
    #	root           html;
    #	fastcgi_pass   127.0.0.1:9000;
    #	fastcgi_index  index.php;
    #	fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
    #	include        fastcgi_params;
    #	}
    

    将每一行的#去掉,然后修改root值为C:\www,再把/scripts替换为$document_root$document_root就是指前面root所指的站点路径,改完后应该如下

    location ~ \.php$ {
     root           C:\www;
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
     include        fastcgi_params;
    }
    

PHP

  1. 在php根目录下找到php.ini-development文件,复制一份在当前目录并且重命名为php.ini
  2. 编辑php.ini,找到 ;cgi.fix_pathinfo=1这一行,去掉前面的分号。

运行与测试

运行原理

因为nginx是一个反向代理的web服务器,因此它其实必须依赖一个真正的web服务器才能执行动态的网页内容,因此这里php就是使用fastcgi来充当这个真正的web服务器,它运行在9000端口上,这也是为什么nginx.conf中有这样一句fastcgi_pass 127.0.0.1:9000;,知道这个原理后,下面的思路就很明确了,打开fastcgi,然后再打开nginx就行了

  1. 运行nginx 双击nginx目录(C: ginx-1.17.6)中的nginx.exe就可以运行nginx
  2. 运行fastcgi 在CMD(命令提示符)中切换到PHP的目录(C:\php-7.2.26-nts-Win32-VC15-x64),然后执行如下命令
    php-cgi.exe -b 127.0.0.1:9000 -c php.ini
    
  3. 测试 在网站目录(C:\www)下新建一个PHP文件,例如hello.php,然后向PHP文件中写入如下内容
    <?php
    echo "hello world";
    ?>
    

    在浏览器访问http://127.0.0.1/hello.php ,网页输出内容”hello world”说明配置成功。

补充

由于执行php-cgi.exe -b 127.0.0.1:9000 -c php.ini后需要控制台一直处于开启状态,不是很方便。这时需要一个小工具RunHiddenConsole.zip来让它在后台运行。 下载上面的zip压缩包后解压,解压出来3个文件,如下图 RunHiddenConsole.zip 然后需要修改一下start_nginx.bat,内容如下

start_nginx.bat (将其中的nginx和PHP路径修改为自己的路径)

@echo off
REM Windows 下无效
REM set PHP_FCGI_CHILDREN=5

REM 每个进程处理的最大请求数,或设置为 Windows 环境变量
set PHP_FCGI_MAX_REQUESTS=1000
 
echo Starting PHP FastCGI...
RunHiddenConsole C:\php-7.2.26-nts-Win32-VC15-x64\php-cgi.exe -b 127.0.0.1:9000 -c C:\php-7.2.26-nts-Win32-VC15-x64\php.ini
 
echo Starting nginx...
RunHiddenConsole C:
ginx-1.17.6
ginx.exe -p C:
ginx-1.17.6

请仔细检查路径是否更改正确。 如果一切正常的话,之后你就可以靠双击start_nginx.bat来启动nginx和PHP,想关闭的时候你可以双击stop_nginx.bat,nginx和PHP就都关闭了。

REFERENCE