Eu tenho um pequeno número de sites Plone rodando em hosts virtuais de um servidor Apache 2.4. Tenho a strong impressão de que o desempenho pode ser muito melhor.
Vamos supor uma configuração bem básica para um site Plone:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.example.com
CustomLog /var/log/httpd/vhost-example.log combined
ErrorLog /var/log/httpd/vhost-example.error.log
RewriteEngine on
DocumentRoot /opt/zope/instances/example/htdocs
ErrorDocument 502 /error-500.html
ErrorDocument 503 /error-500.html
RewriteEngine On
RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/%{HTTP_HOST}:80/example/VirtualHostRoot/$1 [L,P]
</VirtualHost>
Nesta configuração, quase tudo é feito pelo servidor Zope, escutando a porta 8080
, que executa o site Plone na pasta virtual /example
(que mora no banco de dados de objetos).
Agora, este servidor fornece alguns recursos estáticos, por exemplo imagens e folhas de estilo (que vivem no sistema de arquivos) e alguns recursos pseudo-estáticos, como compilações de scripts ou folhas de estilo com um nome com registro de data e hora (que não tem uma localização no sistema de arquivos).
Alguns recursos estáticos têm caminhos que fornecem dicas onde o recurso físico está localizado (por exemplo, /++resource++browsername/name-of-script.js
, onde browsername
é a dica); outras são tiradas das chamadas skins (ou seja, da primeira capa que as contém), sem uma maneira fácil de informar a localização do sistema de arquivos a partir do nome da capa (que, de qualquer forma, não seria conhecido pela resposta).
Tais pedidos não precisariam ser manipulados pelo servidor Zope, usando um dos seus threads. Quais são as estratégias recomendadas para manter longe do Zope o que o Apache poderia fazer sozinho (mais eficientemente, e sem bloquear os threads do Zope), e para armazenar o conteúdo em cache?
Assim, uma solução completa pode incluir
- mapeamento de caminhos distintos de recursos estáticos para a localização do sistema de arquivos conhecido, onde possível
- tentando vários locais para recursos estáticos retirados de capas
- armazenamento em cache de recursos gerados (por exemplo, páginas HTML ou compilações de CSS ou Javascript)
e, com a configuração do ZEO,
- balanceamento de carga (distribuição de solicitações para vários clientes ZEO que, por sua vez, falam com o servidor ZEO)
Quaisquer guias de configuração em qualquer lugar?