Ao ativar <Proxy ... enablereuse=on max=10>
, começo a receber respostas estranhas. Ao atualizar a página atual, a solicitação principal carrega respostas diferentes; como uma página em branco, respostas destinadas a um cliente separado ou uma resposta 404 de um arquivo CSS na página solicitada.
A remoção de enablereuse
corrige as respostas estranhas, mas impede solicitações simultâneas do mesmo usuário, o que significa que cada solicitação é veiculada individualmente.
Por exemplo: abrindo duas guias do navegador para duas URLs diferentes no mesmo domínio vhost, se a primeira página solicitada levar 5 segundos para ser carregada, ela não carregará a segunda guia até que a primeira seja concluída.
Estou tentando impedir isso, permitindo que o mesmo cliente realize várias solicitações simultaneamente, de maneira não bloqueante simultânea.
Ambiente do servidor
CentOS 6.10 x64
php 5.6.37 Remi
Apache 2.4.33 IUS
Configuração do evento MPM
<IfModule mpm_event_module>
ServerLimit 100
StartServers 4
ThreadLimit 64
MaxRequestWorkers 100
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxConnectionsPerChild 1000
ListenBacklog 511
</IfModule>
Virtual Host Config (1 de 4 - todos idênticos, exceto endereço IP, UDS e ServerName)
<VirtualHost 192.168.1.71:443>
ServerName example.com:443
DocumentRoot /home/example/example.com
<IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/certs/example.crt
SSLCertificateKeyFile /etc/httpd/ssl/private/example.key
SSLCertificateChainfile /etc/httpd/ssl/certs/example.ca-bundle
<IfModule mod_setenvif.c>
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
</IfModule>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
</IfModule>
</IfModule>
<Directory "/home/example/example.com">
AllowOverride All
Require all granted
</Directory>
<IfModule mod_proxy_fcgi.c>
<FilesMatch \.php$>
<If "-f %{REQUEST_FILENAME}">
SetHandler "proxy:unix:/var/run/example.sock|fcgi://127.0.0.1/"
</If>
</FilesMatch>
<Proxy "fcgi://127.0.0.1" enablereuse=on max=10>
ProxySet timeout=7200
</Proxy>
</IfModule>
</VirtualHost>
Configuração do pool PHP-FPM (1 de 4 todos idênticos, exceto o UDS)
[example_com]
user = example
group = example
listen = /var/run/example.sock
listen.owner = example
listen.group = apache
listen.mode = 0660
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 20
pm.max_requests = 1000
security.limit_extensions = .php
Eu tentei usar um proxy TCP em oposição ao UDS devido a outras postagens comentando sobre problemas com o UDS não suportados, mas o problema persiste:
<IfModule mod_proxy_fcgi.c>
<FilesMatch \.php$>
<If "-f %{REQUEST_FILENAME}">
SetHandler "proxy:fcgi://127.0.0.1:9000/"
</If>
</FilesMatch>
<Proxy "fcgi://127.0.0.1:9000" enablereuse=on max=10>
ProxySet timeout=7200
</Proxy>
</IfModule>
Também tentei alterar a configuração do PHP-FPM com um conjunto de pm para dynamic
, ondemand
e static
com alterações de processo apropriadas.
Eu determinei que a restrição de solicitações simultâneas foi devido a sessões PHP e um bloqueio que é imposto em sessões baseadas em sistema de arquivos. No entanto, a questão não corresponde às respostas estranhas que recebi.