Proxy Reverso para PHP: Melhor prática?

1

Estou configurando o NGINX como um proxy reverso SSL para três pequenos aplicativos da Web com conteúdo dinâmico (PHP) e estático.

O que seria considerado melhor prática em termos de segurança e desempenho quando se trata de passar solicitações do PHP?

Eles devem ser passados para o servidor web solicitado (NGINX - que então passaria para o PHP-FPM via socket ou TCP no mesmo host) ou deveriam ser diretamente passados para o servidor PHP-FPM?

Todos os meus aplicativos da web e o proxy reverso estão em Jails separados no FreeBSD. Cada Jail tem seu próprio servidor web NGINX e PHP-FPM (ou uWSGI e Python).

    
por basbebe 24.03.2015 / 09:22

1 resposta

2

Seu Nginx principal deve atuar como um proxy reverso e encaminhar solicitações HTTP para o respectivo servidor da Web de cada aplicativo. Se o proxy reverso principal tiver acesso em nível de arquivo às prisões do aplicativo, é melhor usar soquetes UNIX para se comunicar com seu servidor da Web, mas, no seu caso, você não tem escolha a não ser usar TCP.

Ao usar o TCP, certifique-se de definir o parâmetro keepalive para manter um número de conexões abertas em todos os momentos, para que você não precise abrir e fechar uma conexão em cada solicitação para obter melhor desempenho. O argumento do parâmetro é o número de conexões para manter aberto, algo como 10 parece suficiente.

Em seus jails, o servidor web deve usar sockets UNIX para se comunicar com seu PHP-FPM para melhor performance (o TCP tem mais overhead do que um socket UNIX, então use o último sempre que possível).

Finalmente não vejo grandes problemas de segurança em ter o proxy reverso principal se comunicando diretamente com os PHP-FPMs in-jail, mas isso significaria que você também deveria configurar o proxy reverso principal de acordo com o PHP-FPM in-jail . Isso é algo que eu prefiro evitar, eu preferiria que as cadeias fossem independentes e expor um único ponto de extremidade HTTP em uma porta padrão, e fazer com que o Nginx preso jesse todo o material do PHP-FPM. Se há algo que você precisa mudar em relação ao PHP-FPM, basta fazê-lo na cadeia sem tocar em seu proxy reverso Nginx principal.

Também sugiro que você experimente um servidor web ainda mais leve para os jails como o Lighttpd, já que você realmente não precisa de muitos recursos e mesmo a sintaxe de configuração do Lighty é absolutamente horrível não deve ser um problema.

Sobre o seu último comentário

Now I only need to find out which settings to set in the backend and which in the proxy (cache-control, keepalive, error_page, etc…)

O parâmetro keep-alive que mencionei deve ser definido no bloco upstream do proxy reverso principal do Nginx e afeta apenas o proxy reverso < - > comunicação do servidor in-jail e não tem nada a ver com o HTTP keep-alive entre os clientes e seu servidor. Para keepalive entre navegadores e servidores, isso deve ser feito no último endpoint do seu lado, que é o proxy reverso. Por outro lado, os cabeçalhos de controle de cache são dependentes de aplicativos (já que diferentes aplicativos podem precisar de configurações diferentes) e devem ser definidos individualmente nas prisões do aplicativo. Tente colocar o máximo possível de configurações na cadeia de cada aplicativo e modifique apenas a configuração do proxy reverso em casos extremos, como configurações de nível de conexão (HTTP keepalive, TLS, etc).

    
por 24.03.2015 / 16:01