Windows 搭建 nginx + php web服务器.

一、准备工作
1、下载nginx  这里  我下载的是 nginx-1.18.0 这个版本
2、下载 php    这里  我下载的是 VS16 x64 Thread Safe (2021-Mar-03 00:21:37)  这个版本。下下来文件名 php-8.0.3-nts-Win32-vs16-x64

3、下载 mysql 5.6   这里

二、配置nginx。

配置成功标志:能访问nginx默认配置页
下载后解压到某个路径下,路径不要有中文!  conf  文件夹中的 nginx.conf  文件 最主要修改以下地方

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   E:/xxxx/xxx;    #web 根目录
            index  index.html index.htm index.php;    #web 根目录下默认访问的文件
     }
   }

点击nginx.exe (最好是通过cmd 输入nginx.exe 来访问,因为如果配置有错误cmd 会回显可以看到)

最终,通过  浏览器 输入 127.0.0.1 能够 访问到 以下界面则配置ok!

三、安装 Mysql

自己新建my.ini 文件,内容如下

[mysql]
default-character-set=utf8 

[mysqld]
port = 3306 
basedir=E:\Work\mysql-5.6.51-winx64
datadir=E:\Work\mysql-5.6.51-winx64\data 

max_connections
=200
character-
set-server=utf8
default-storage-engine
=INNODB
max_connect_errors
=100
explicit_defaults_for_timestamp
=true

然后 进入mysql的bin目录,执行mysqld  --initialize-insecure ,第一次执行的话,时间会久一些,执行结束后没有输出信息,查看bin的同级目录下会多出一个data文件夹

如果本来有 mysql的服务  或者安装服务错误 可以使用  mysqld -remove mysql 来移除已经安装的mysql 服务

重新安装 即:   mysqld --install MySQL --defaults-file="E:\Work\mysql-5.6.51-winx64\my.ini"

然后在开始 => 运行 => 服务 里选择 MySQL 或者直接cmd   =>  net start MySQL

修改 root 用户密码

mysql>use mysql; 
mysql>update user set password=password('your password') where user='root'; 
mysql>flush privileges;

接下来可以尝试 连接。

参考这里: https://www.cnblogs.com/alan-lin/p/9966917.html

四、配置php
成功标志:能访问 phpinfo.php。

1、修改 php 配置

解压 以后 复制 一份php.ini-development 修改成 php.ini

找到  ;cgi.fix_pathinfo=1  这一行 把 前面的 ; 去掉变成   cgi.fix_pathinfo=1  

找到  ;extension=mysqli  同样去掉 ;  让其支持 mysql 。修改成 extension=php_mysqli.dll

2、添加环境变量使 php 能够访问到 php扩展的相关dll

将你 php 安装目录内的 ext 文件夹添加到系统 环境变量,或者把你需要添加的扩展dll 文件拷贝到 system 目录下也可以。 

3、修改 nginx 配置 让其做 cgi 转发. 修改以下段落  去掉前面的 # 注释。其他做对应修改

location ~ .php$ {
    root           E:/xxxx/xxx;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

4、web 根目录 创建以下内容的 phpinfo.php 文件。 通过  php-cgi.exe -b 127.0.0.1:9000 -c ./php.ini 启动 php-cgi.exe !

<?php

// 显示所有信息,默认显示 INFO_ALL
phpinfo();

// Show just the module information. 仅仅显示PHP模块信息,
// phpinfo(8) 返回同样的结果。
phpinfo(INFO_MODULES);

?>
php-cgi.exe -b 127.0.0.1:9000 -c ./php.ini

5、通过 127.0.0.1/phpinfo.php 能够访问以下界面则成功!

接下来能干些啥呢? 比如下载个 wordpress 搭建本地博客系统啦 等等。。

四、我遇到的问题

如果访问不是你预期的,可以查看 nginx 目录下的 log 文件夹,里面有错误日志。

我一开始访问一直是 500,查看日志一直是这个错误

[error] 9024#7256: *1023 maximum number of descriptors supported by select() is 1024 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /phpinfo.php HTTP/1.0", 
upstream: "http://127.0.0.1:80/phpinfo.php", host: "127.0.0.1"
3400#2700: *1024 WSARecv() failed (10053: An established connection was aborted by the software in your host machine) while reading response header from upstream,
client: 127.0.0.1, server: localhost, request: "GET /phpinfo.php HTTP/1.0", upstream: "http://127.0.0.1:80/phpinfo.php", host: "127.0.0.1"

在网上找的内容都是说 nginx 配置有问题,修改下面这个值。

events {
    worker_connections  1024;
}

实际上不是这个问题,是配置的 cgi 转发有问题,转发成 死循环 了。看到这个答案 才解决我的问题 

https://stackoverflow.com/questions/28265717/worker-connections-are-not-enough/28269408 

location ~ .php$ {
    proxy_pass   http://127.0.0.1;
}

在前面配置的cgi转发 还有一段这个没注意到。一直报错

原文地址:https://www.cnblogs.com/lesten/p/14561688.html