如何通过unix套接字设置Apache2和PHP-FPM? [英] How to set up Apache2 and PHP-FPM via unix socket?
问题描述
我尝试通过unix套接字设置Apache2和PHP-FPM,但结果是
I try to set up Apache2 and PHP-FPM via unix socket but result is
(111)连接被拒绝:AH02454:FCGI:尝试连接到Unix域套接字/run/php/php7.2-fpm.sock(*)失败
(111)Connection refused: AH02454: FCGI: attempt to connect to Unix domain socket /run/php/php7.2-fpm.sock (*) failed
docker-compose.yml
docker-compose.yml
version: "2"
services:
php:
build: "php:7.2-rc-alpine"
container_name: "php"
volumes:
- "./code:/usr/local/apache2/htdocs"
- "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"
apache2:
build: "httpd:2.4-alpine"
container_name: "apache2"
volumes:
- "./code:/usr/local/apache2/htdocs"
- "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"
ports:
- 80:80
links:
- php
www.conf
listen = /run/php/php7.2-fpm.sock
httpd-vhosts.conf
httpd-vhosts.conf
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>
但是通过TCP连接可以使用.
But it's work when connect via TCP.
www.conf
listen = 127.0.0.1:9000
httpd-vhosts.conf
httpd-vhosts.conf
<FilesMatch \.php$>
SetHandler "proxy:fcgi://php:9000"
</FilesMatch>
推荐答案
好的,仓库也帮助解决了这个问题.
Okie, so have the repo helped to fix the issue.
问题1-将www.conf复制到apache容器中
您在apache容器Dockerfile中有以下声明
You had below statement in your apache container Dockerfile
COPY ./www.conf /usr/local/etc/php-fpm.d/www.conf
这实际上是针对将运行php-fpm的php容器而不是apache容器
This is actually intended for the php container which will be running php-fpm and not the apache container
问题2-从未创建套接字
您的卷绑定- "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"
正在创建套接字,而不是由php-fpm这样创建的.因此,您创建了一个空白文件,尝试连接到该文件不会执行任何操作
Your volume bind - "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"
was creating the socket and they were not being created by php-fpm as such. So you created a blank file and trying to connect to it won't do anything
问题#3-php中没有用于创建套接字的配置
默认情况下,docker容器在fpm容器内创建侦听0.0.0.0:9000
的功能.您需要覆盖容器内的zz-docker.conf
文件来解决此问题.
The docker container by default create listen to 0.0.0.0:9000
inside the fpm container. You needed to override the zz-docker.conf
file inside the container to fix the issue.
[global]
daemonize = no
[www]
listen = /run/php/php7.2-fpm.sock
listen.mode = 0666
更新的docker文件
Updated docker file
FROM php:7.2-rc-fpm-alpine
LABEL maintainer="Eakkapat Pattarathamrong (overbid@gmail.com)"
RUN docker-php-ext-install \
sockets
RUN set -x \
&& deluser www-data \
&& addgroup -g 500 -S www-data \
&& adduser -u 500 -D -S -G www-data www-data
COPY php-fpm.d /usr/local/etc/php-fpm.d/
问题4-将套接字作为卷共享给主机
您应该使用命名卷共享套接字,因此套接字根本不应该在主机上.
You should be sharing sockets using a named volume, so the socket should not be on host at all.
version: "2"
services:
php:
build: "./php"
container_name: "php"
volumes:
- "./code:/usr/local/apache2/htdocs"
- "phpsocket:/run/php"
apache2:
build: "./apache2"
container_name: "apache2"
volumes:
- "./code:/usr/local/apache2/htdocs"
- "phpsocket:/run/php"
ports:
- 7080:80
links:
- php
volumes:
phpsocket:
解决所有问题后,我能够使php页面正常工作
After fixing all the issues I was able to get the php page working
这篇关于如何通过unix套接字设置Apache2和PHP-FPM?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!