简体   繁体   English

如何通过unix socket设置Apache2和PHP-FPM?

[英]How to set up Apache2 and PHP-FPM via unix socket?

I try to set up Apache2 and PHP-FPM via unix socket but result is 我尝试通过unix socket设置Apache2和PHP-FPM,但结果是

(111)Connection refused: AH02454: FCGI: attempt to connect to Unix domain socket /run/php/php7.2-fpm.sock (*) failed (111)连接被拒绝:AH02454:FCGI:尝试连接到Unix域套接字/run/php/php7.2-fpm.sock(*)失败

docker-compose.yml 泊坞窗,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 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>

But it's work when connect via TCP. 但是通过TCP连接时它是有效的。

www.conf 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. 好吧,所以回购有助于解决这个问题。

Issue #1 - www.conf being copied in apache container 问题#1 - www.conf被复制到apache容器中

You had below statement in your apache container Dockerfile 您在apache容器Dockerfile中有以下语句

COPY ./www.conf /usr/local/etc/php-fpm.d/www.conf

This is actually intended for the php container which will be running php-fpm and not the apache container 这实际上是用于运行php-fpm而不是apache容器的php容器

Issue #2 - Socket was never being created 问题#2 - 永远不会创建套接字

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. 你的卷绑定- "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"正在创建套接字,它们不是由php-fpm创建的。 So you created a blank file and trying to connect to it won't do anything 因此,您创建了一个空白文件,并尝试连接到它不会做任何事情

Issue #3 - No config in php to create socket 问题#3 - 在php中没有配置来创建套接字

The docker container by default create listen to 0.0.0.0:9000 inside the fpm container. 默认情况下,docker容器在fpm容器内创建监听0.0.0.0:9000 You needed to override the zz-docker.conf file inside the container to fix the issue. 您需要覆盖容器内的zz-docker.conf文件来解决问题。

zz-docker.conf ZZ-docker.conf

[global]
daemonize = no

[www]
listen = /run/php/php7.2-fpm.sock
listen.mode = 0666
Updated docker file 更新了docker文件
 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/ 

Issue #4 - Sockets being shared as volumes to host 问题#4 - 套接字被共享为托管卷

You should be sharing sockets using a named volume, so the socket should not be on host at all. 您应该使用命名卷共享套接字,因此套接字根本不应该在主机上。

Updated docker-compose.yml 更新了docker-compose.yml
 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: 

After fixing all the issues I was able to get the php page working 在解决了所有问题后,我能够让php页面正常工作

PHP-FPM

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM