Windows 下 Nginx PHP CGI 与 Laravel 配置要点
下载安装Nginx 与 PHP
找到Windows 版本下载即可;
配置 Nginx 与 php-cgi
1 | server { |
其中 “fastcgi_pass” 为 Nginx 匹配到 有php 处理传递的地址及端口,这样, Nginx 就与 php-cgi 程序做了对接;注意字段:root、index、try_files
等;
Nginx、php-cgi 及 Laravel 组合出现的问题
使用 Nginx、php-cgi 及 Laravel 组合,当使用Guzzlehttp请求自己的时候出错了,表现为:504 timeout,再无跟多信息。
问题解析:
php-cgi 只启动了一个进程,nginx又不维护进程池,单个请求还好,一旦出现自己请求自己,就麻瓜了。因为自己请求自己,不就是递归吗,但是提供递归的服务是单线程,发请求占用了唯一的线程,一直hang到超时。
解决方案
- 更换 Nginx 为 Apache;
- 使用第三方 进程管理工具 启用多个 php-cgi 进程;
- 手动启动多个 php-cgi 进程;
手动启动多个 php-cgi 进程
-
启动多个 php-cgi 进程
1
2
3
4php-cgi.exe -b 127.0.0.1:9000 -c "%batDir%php/php.ini"
php-cgi.exe -b 127.0.0.1:9001 -c "%batDir%php/php.ini"
php-cgi.exe -b 127.0.0.1:9002 -c "%batDir%php/php.ini"
php-cgi.exe -b 127.0.0.1:9003 -c "%batDir%php/php.ini" -
Nginx 配置文件:
1
2
3
4
5
6
7
8http {
upstream fastcgi_backend {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003;
}
} -
修改 php 脚本处理接口:
1
2
3
4
5
6
7
8
9
10
11location ~ \.php {
# 设置监听端口
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass fastcgi_backend;
# 设置nginx的默认首页文件(上面已经设置过了,可以删除)
fastcgi_index index.php;
# 设置脚本文件请求的路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 引入fastcgi的配置文件
include fastcgi_params;
}注意 字段
fastcgi_pass
的修改
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 水 流 记!