关于在 mac 下 PHP -fpm 无法访问的问题[救救孩子吧]

45 天前
 fibroblast

关于在 mac 下 php-fpm 无法访问的问题


php 8.2 brew 本地安装 nginx 是 docker 请排除 nginx 找不到 index.php 文件的问题 因为在 nginx html 目录下有个 demo.html 文件可以正常访问 即 静态资源可以加载

pm-conf

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
[www]
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 10
request_slowlog_timeout = 30
slowlog = log/php-fpm-slow.log

nginx-conf

server {
    listen       80;	#监听 80 端口
    listen  [::]:80;
    server_name  localhost;		#也可以填写自己注册的域名
    location / {
        root   /usr/share/nginx/html;	#当前配置的页面文件根目录
        index  index.php index.html index.htm;	#添加 index.php 作为默认首页
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;		#错误页面设置
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # 与 php-fpm 通信的关键设置
    location ~ \.php$ {
         root   /usr/share/nginx/html;	#页面文件根目录
         fastcgi_pass   127.0.0.1:9000;	#php-fpm 的通信端口,由于已经将容器 9000 端口映射到了主机的 9000 端口,所以这里填“主机 ip:9000”也是可以的。
         fastcgi_index  index.php;		#默认主页文件设置
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
         include        fastcgi_params;
    }
}

nginx 报错

2024/05/14 03:46:10 [error] 25#25: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.65.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "127.0.0.1:8088"

fpm 日志 只有启动

[14-May-2024 12:05:48] NOTICE: Terminating ...
[14-May-2024 12:05:48] NOTICE: exiting, bye-bye!
[14-May-2024 12:05:48] NOTICE: fpm is running, pid 18393
[14-May-2024 12:05:48] NOTICE: ready to handle connections

直接访问 http://127.0.0.1:9000 也不行 日志无东西

1675 次点击
所在节点    PHP
43 条回复
yulgang
45 天前
@fibroblast #19 建议直接 brew 安装 php-fpm 和 nginx 按照你的 nginx 配置就没问题了。你的 php 和 nginx 不在同一个主机里,nginx 里配 127.0.0.1 nginx 肯定连不上。

如果 mac 里运行 php-fpm , 可以将它的 sock 文件映射到 nginx 的 docker 容器内,然后 nginx 里配置相应的 sock 文件
keyfunc
45 天前
@ysc3839 好吧,我没试过 mac 下这么干,啊哈哈。
fibroblast
45 天前
@yulgang 好的感谢
fibroblast
45 天前
@wheat0r 那个我拉住你问下 因为我是刚刚接触 php 我想问下就是 如果把 php 也扔进 docker 那么 写代码是不是会很麻烦啊
wheat0r
45 天前
@fibroblast #24 应该说是没有任何区别,或者说,这里面的区别不是来自 php ,而是来自 docker 。
你只是需要一个工作目录,对于 php 制作的网站而言,而这个工作目录是给 php 容器看的,你只需要把你写的东西放进这个目录,并且把目录映射给容器内的正确位置就好了。
但是 macOS 的 docker 是套了一层虚拟化的,具体怎么做我也不是很清楚。
julyclyde
45 天前
@fibroblast FastCGI sent in stderr: "Primary script unknown" 是个好现象,虽然也没成,但至少这句话是 fastcgi 输出的,也就是 nginx 和 fastcgi 的通信这部分工作已经通了

然后就是文件的问题了。nginx 并不在乎文件在不在,它只管朝 fastcgi 要结果。但是 fastcgi 那边是需要能读到 php 文件的。你的文件放在哪边了呢?
halobugTurbo
45 天前
你容器的端口 ports 映射了吗?
halobugTurbo
45 天前
@fibroblast PHP 在 docker 中运行,有个参数 volumes ,映射目录就行,与裸机开发是一样的。
halobugTurbo
45 天前
没看明白 PHP 或 nginx 那个是容器😭。 把你配置的 127.0.0.1 ,改成局域网下的 IP ( 192.168...)
fibroblast
45 天前
@wheat0r ok 了解了
fibroblast
45 天前
@julyclyde 文件要给 FastCGI 好的
ranaanna
45 天前
不明白为什么现今的人们都这么喜欢用 docker 。nginx 是一个轻量级应用,为什么不可以直接跑?另一方面直接一个轻量级 linux 虚拟机也未必占用更多内存吧,而且更加隔离。为什么一定要跑一个重新发明的虚拟化软件,再在上面运行别人打包的、塞进各种未必有用的库的组件的、需要额外配置的、不一定占用更少存储和运行空间的“容器”呢?
gxvsko
45 天前
nginx 在 docker 里
php 在数组机
docker 网络没调好可能会不通
建议 php-fpm 直接 socket 方式 直接把文件映射进去后 nginx 代理
QlanQ
45 天前
刚刚接触 php ,刚刚接触 任何语言的时候,都不要花时间折腾 环境

如果你用 laravel 做开发,有本地的 server 直接启动,如果是 hyperf 也可以 watch
heysnakelis
45 天前
@fibroblast
试试以下俩个办法(任一):
1. nginx 容器 links 关键字链接 php 容器,然后修改 fastcgi_pass php:9000;
2. 通过 networks 关键字定义网络信息,自定义 ipv4_address , 然后修改 fastcgi_pass 《 IP 》:9000;
darklost
45 天前
listen 地址 和转发地址 fastcgi_pass 问题 参考 laradock 吧
darklost
45 天前
你这个 nginx 容器要访问速度的 php-fpm ? php-fpm 监听 0.0.0.0 nginx 容器转发到 host.docker.internal 这个特殊域名吧 或者内网地址
zhaoyihuaer
45 天前
容器内访问主机地址 mac 是 docker.for.mac.host.internal ,但是你这个结构跑项目有点麻烦 nginx 的目录是容器的目录, 与外面还不一样 不如直接把 php 也放容器中
yc8332
45 天前
找不到就是 nginx 中 fastcgi 的配置问题。网上找找就有了
yangxiaopeipei
44 天前
搞个 dnmp 吧 直接点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1040588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX