Recentemente, configurei um novo servidor de hospedagem na web em funcionamento em um sistema Debian Stretch usando Apache 2.4 e PHP7 via proxy_fcgi
e php-fpm
.
Funcionou bem nos estágios de teste, mas o primeiro cliente está usando um site Moodle que faz uso extensivo dos chamados 'argumentos de barra' (IE, solicitações para, digamos, index.php/these/are/parameters/
).
Seguindo as instruções no site do moodle tentei configurar AcceptPathInfo
para On, e até tentei desabilitar security_limit_extensions
no PHP, mas até agora nada parece estar funcionando.
As configurações relevantes estão coladas abaixo. Tenho certeza de que perdi algo simples em algum lugar , mas fiquei sem ideias para onde procurar.
(Nota: php normal funciona bem; argumentos de barra não. Ao definir cgi.fix_pathinfo
como 0 pedindo https://www.domain.nl/lib/javascript.php/foo/bar
resultados em "Nenhum arquivo de entrada especificado"; configurá-lo para 1 resulta em "Nenhum arquivo Javascript válido encontrado", o que pelo menos sugere que o script é chamado mas os argumentos não são passados corretamente para o proxy...)
Apache:
<VirtualHost *:443>
ServerName www.domain.nl
ServerAlias domain.nl new.domain.nl
DocumentRoot /home/webclients/www.domain.nl/public_html/
Alias /cgi-bin/ /home/webclients/www.domain.nl/cgi-bin/
CustomLog /var/log/apache2/www.domain.nl/access.log combined
ErrorLog /home/webclients/www.domain.nl/logs/error.log
TransferLog /home/webclients/www.domain.nl/logs/access.log
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/php-fpm/domain.sock|fcgi://localhost/home/webclients/www.domain.nl/public_html
SSLOptions +StdEnvVars
<IfModule mod_suexec.c>
SuExecUserGroup domain webclients
</IfModule>
<Directory /home/webclients/www.domain.nl/public_html/>
AllowOverride All
AcceptPathInfo On
Require all granted
</Directory>
SSLEngine on
# LogLevel info
SSLCertificateFile /etc/ssl/certs/www.domain.nl.pem
SSLCertificateKeyFile /etc/ssl/private/www.domain.nl.key
SSLCACertificateFile /etc/ssl/intermediate/intermediate-rapidssl-rsacag1.pem
# Enable HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>
# vim:syntax=apache
arquivo de pool php-fpm:
[domain]
prefix=/
include=/etc/php/7.0/fpm/pool.d/defaults
php_admin_value[error_log] = /home/webclients/www.domain.nl/logs/php-error.log
php_admin_value[cgi.fix_pathinfo] = 0
security.limit_extensions =
Encontrei.
Depois de mergulhar no próprio código para gerar melhores informações de depuração, o problema acabou sendo que
mod_proxy_fcgi
, por padrão, não passa a variável do servidor PATH_INFO para o cliente.Uma maneira de corrigir isso é usando
SetEnvIf
:As coisas agora estão passando corretamente e o site parece funcionar.