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转发 还有一段这个没注意到。一直报错
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2020-03-20 xcode 出现 调试信息 和 实际代码不匹配的情况