win10 linux子系统启动php-fpm提示failed to retrieve TCP_INFO for socket: Protocol not available的问题

最近由于项目需要swoole进行开发,但swoole拓展无法直接通过编译安装,只能通过Cygwin/docker等虚拟机来运行,cygwin不太熟悉,docker和vagrant等虚拟机的话入门和配置难度都很高,研究了几天都没搞定,最后选择了win10自带的linux子系统,通过linux子系统运行php,然后直接通过windows上的nginx将php处理工作转发给linux子系统,这样既可以兼容之前项目继续使用windows环境,需要linux环境直接改nginx的vhost进行转发即可。另外子系统会自动挂载windows所有盘在/mnt/下,用下来很得心应手,和直接使用linux开发没什么区别。

但是在编译安装完成php7.1后,启动php-fpm 时提示failed to retrieve TCP_INFO for socket: Protocol not available的问题,网上查阅了不少资料看到可以通过php-fpm监听模式改为unix:sock模式,但是我需要使用地址加端口的形式转发php请求,额不是监听socket文件,所以没测试,有兴趣的可以去试一试。https://www.zhihu.com/question/62495462

最后google到一个解决办法很好的解决了我的问题,具体步骤也很简单,就是修改php-fpm.conf文件,设置 log_level = alert,重启php-fpm 即可。

# windows nginx转发php请求到wsl的配置

location ~ \.php($|/){
		root /mnt/d/project/test; #window的D://project/test会映射到wsl里面的/mnt/d/project/test目录下
		fastcgi_index   index.php;
		#fastcgi_pass    127.0.0.1:9000;
		fastcgi_pass	172.17.240.1:9000; #这里的ip和端口需要改为wsl的ip地址了fpm监听端口
		include         linux_fastcgi_params;
		set $real_script_name $fastcgi_script_name;
		if ($real_script_name ~ "^(.+?\.php)(/.+)$") {
			set $real_script_name $1;
		}
		fastcgi_split_path_info ^(.+?\.php)(/.*)$;
		fastcgi_param   PATH_INFO               $fastcgi_path_info;
		fastcgi_param   SCRIPT_NAME             $real_script_name;
		fastcgi_param   SCRIPT_FILENAME         /mnt/d/project/test/$real_script_name;
		fastcgi_param   PHP_VALUE               open_basedir=/mnt/d/project/test/:/tmp/:/proc/;
	}

参考地址:https://domicat.me/2018/09/install-php5.6-on-ubuntu16.04/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_________MAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值