Como se executa o PHP-FPM no subdomínio?

1

Eu executo o Apache 2.4 e o PHP-FPM via ProxyPassmatch no httpd.conf, não no vhost ( pelo que vale a pena ):

ProxyPassMatch ^/(.*\.php)$ unix:/var/run/php-fpm.sock|fcgi://127.0.0.1/home/user/www

Eu queria criar um subdomínio para executar um CMS, mas rapidamente descobri que os arquivos PHP não estão sendo processados nesse subdomínio, provavelmente devido à minha falta de compreensão de como configurá-lo.

Não tenho certeza se preciso criar um vhost com uma diretiva ProxyPassMatch separada ou a padrão acima funcionará.

link

ServerRoot "/usr/local"
Listen 192.168.1.2:80

LoadModule authn_file_module libexec/apache24/mod_authn_file.so
LoadModule authn_core_module libexec/apache24/mod_authn_core.so
LoadModule authz_host_module libexec/apache24/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache24/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache24/mod_authz_user.so
LoadModule authz_core_module libexec/apache24/mod_authz_core.so
LoadModule access_compat_module libexec/apache24/mod_access_compat.so
LoadModule auth_basic_module libexec/apache24/mod_auth_basic.so
LoadModule reqtimeout_module libexec/apache24/mod_reqtimeout.so
LoadModule filter_module libexec/apache24/mod_filter.so
LoadModule deflate_module libexec/apache24/mod_deflate.so
LoadModule mime_module libexec/apache24/mod_mime.so
LoadModule log_config_module libexec/apache24/mod_log_config.so
LoadModule env_module libexec/apache24/mod_env.so
LoadModule expires_module libexec/apache24/mod_expires.so
LoadModule headers_module libexec/apache24/mod_headers.so
LoadModule setenvif_module libexec/apache24/mod_setenvif.so
LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
LoadModule unixd_module libexec/apache24/mod_unixd.so
LoadModule autoindex_module libexec/apache24/mod_autoindex.so
LoadModule negotiation_module libexec/apache24/mod_negotiation.so
LoadModule dir_module libexec/apache24/mod_dir.so
LoadModule actions_module libexec/apache24/mod_actions.so
LoadModule alias_module libexec/apache24/mod_alias.so
LoadModule rewrite_module libexec/apache24/mod_rewrite.so

IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf

<IfModule unixd_module>

User www
Group www

</IfModule>

ServerAdmin [email protected]
ServerName 192.168.1.2:80

<Directory />

    AllowOverride none
    Require all denied

</Directory>

DocumentRoot "/home/user/www"

<Directory "/home/user/www">

    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted

</Directory>

<IfModule dir_module>

    DirectoryIndex index.html index.php

</IfModule>

<Files ".ht*">

    Require all denied

</Files>

ErrorLog "/var/log/apache/error.log"

LogLevel warn

<IfModule log_config_module>

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "/var/log/apache/access.log" combined

</IfModule>

<IfModule alias_module>

    ScriptAlias /cgi-bin/ "/usr/local/www/apache24/cgi-bin/"

</IfModule>

<Directory "/usr/local/www/apache24/cgi-bin">

    AllowOverride None
    Options None
    Require all denied

</Directory>

<IfModule mime_module>

    TypesConfig etc/apache24/mime.types
    AddType application/x-compress .Z

</IfModule>

EnableMMAP On

Include etc/apache24/extra/httpd-mpm.conf
Include etc/apache24/extra/httpd-default.conf
Include etc/apache24/extra/h5bp.conf
Include etc/apache24/Includes/*.conf

ProxyPassMatch ^/(.*\.php)$ unix:/var/run/php-fpm.sock|fcgi://127.0.0.1/home/user/www

subdomínio vhost:

<VirtualHost *:80>

    DocumentRoot "/home/user/www/xxx"
    ServerName xxx.domain.com
    DirectoryIndex index.php 

<Directory "/home/user/www/xxx">

    AllowOverride FileInfo
    Require all granted

</Directory>

</VirtualHost>

pool padrão do php-fpm:

[global]
pid = run/php-fpm.pid
error_log = log/php/error.log

[www]
user = user
group = user

listen = /var/run/php-fpm.sock
listen.owner = user
listen.group = user
listen.mode = 0660

listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

access.log = /var/log/php/access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

chdir = /home/user/www

catch_workers_output = yes

security.limit_extensions = .php
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

No Cloudflare, configurei um registro CNAME apontando para xxx.domain.com:

Tudoqueeuobtenhononavegadoré:

"File not found"

e nos registros:

[proxy_fcgi:error] [pid 44810] [client xxx.xx.x.xxx] AH01071: Got error 'Primary script unknown\n'

Eu apreciaria uma dica / empurrão na direção certa.

Obrigado

    
por dzhi 28.08.2014 / 20:11

2 respostas

0

Em cada um dos seus hosts virtuais, você precisará colocar:

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1

Coloque isso na parte superior da configuração dos Hosts Virtuais para que ela não seja afetada por nada que se segue.

Cada host virtual precisa de uma porta diferente para 9000, 9001, 9002, etc. Essas portas devem corresponder às que você usa em seus pools, por exemplo, listen = 127.0.0.1:9001 . Você precisará igualar os usuários etc também.

Este wiki fornece mais informações: link .

Você diz que está usando Apache 2.4 , é interessante notar que você não pode usar sockets antes do Apache 2.4.9, daí porque eu não os usei no meu exemplo.

    
por 24.09.2014 / 13:22
0

Se isso puder ajudar, tudo o que você precisa para uma grande hospedagem sob o apache httpd é o módulo mod_vhost_alias, você só pode configurar um virtualhost genérico para lidar com todos os cenários como explicado na documentação do apache aqui: mod_vhost_alias

Estou usando-o para redirecionar todas as minhas produções do cliente php de sub.domain.tld para minha produção do php-fpm que é chrooted.

Eu tenho uma raiz de documento como / home / clientname (como sub ;-)) / www /

Em seguida, um proxypassmatch com fastcgi: // host: port /% (1/2 / etc dependendo de qual parte do nome que você está procurando) / www /

PS: você só precisa de pools / portas diferentes se realmente planejasse segmentar chamadas para diferentes tipos de pools php-fpm como em vários ambientes (prod / development / demo / etc) ou com vários clientes no caso de um mente preocupada com a segmentação.

Espero que minha resposta possa ajudar o op ou outras pessoas se for tarde demais para o op; -)

    
por 25.08.2015 / 22:33