Eu quero configurar um servidor NGINX, que é capaz de hospedar vários sites, que são separados uns dos outros, então vhosta
não pode acessar arquivos de vhostb
.
Instalei um novo servidor Debian 7.5 e instalei o NGINX e o PHP FPM dos pacotes debian padrão.
Depois, adicionei 2 novos usuários vhosta
e vhostb
e adicionei o usuário www-data
do servidor NGINX ao grupo de cada usuário.
Em seguida, criei a seguinte estrutura de diretórios.
var/
|---www/
|---vhosta
|---httpdocs (permissions 750 - owner: vhosta - group: vhosta)
|---vhostb
|---httpdocs (permissions 750 - owner: vhostb - group: vhostb)
Configurei um pool PHP FPM individual para cada host virtual para separar os processos PHP de cada host virtual. A configuração é a seguinte (mostrando apenas para vhosta
)
[vhosta]
listen = /var/run/php5-fpm-vhosta.sock
user = vhosta
group = vhosta
listen.owner = vhosta
listen.group = vhosta
Em minha opinião, essa configuração deve separar vhosta
do acesso a arquivos no diretório vhostb's
httpdocs, pois vhosta
não tem permissões de acesso à pasta httpdocs de vhosta
. Eu verifiquei isso, tentando criar um script PHP simples em vhosta
, que tenta acessar arquivos no diretório vhostb's
httpdocs.
Até agora, tudo bem. Eu instalei um aplicativo PHP (CMS) em vhosta
e fiz alguns testes de desempenho com o ApacheBench.
Geralmente, tudo corre mais suave e rápido do que com o Apache2 e acabarei com o seguinte resultado.
Requests per second: 31.62 [#/sec] (mean)
Time per request: 316.209 [ms] (mean)
Time per request: 31.621 [ms] (mean, across all concurrent requests)
Transfer rate: 430.58 [Kbytes/sec] received
Bem, 31,62 solicitações por segundo estão bem para mim neste momento.
Por último, quero acessar a restrição de vhosta
e vhostb
a um subconjunto de diretórios, para que eles não tenham acesso a outros arquivos de sistema legíveis do mundo. Eu faço isso, usando a diretiva do PHP open_basedir.
Eu adicionei o seguinte a cada conjunto de PHP FPM de hosts virtuais (apenas mostrando vhosta
)
php_admin_value[open_basedir] = /var/www/vhosta/httpdocs/:/tmp/
Ao fazer isso, os vhosts não poderão acessar, e. / etc / passwd. Eu criei um script PHP simples, que verifica se os vhosts não podem acessar arquivos fora dos diretórios configurados.
Finalmente, eu repeti o teste de desempenho e terminei com o seguinte resultado.
Requests per second: 11.82 [#/sec] (mean)
Time per request: 8460.087 [ms] (mean)
Time per request: 84.601 [ms] (mean, across all concurrent requests)
Transfer rate: 161.18 [Kbytes/sec] received
Parece que adicionar uma diretiva open_basedir ao conjunto PHP FPM causa um grande decréscimo no desempenho. Os tempos de acesso e a quantidade de solicitações por segundo agora são bastante semelhantes em comparação com uma configuração usando o Apache2 com mod_php.
Minhas perguntas são as seguintes:
-
A configuração que criei pode ser considerada "segura", portanto, os vhosts individuais não podem acessar um ao outro? Se não, qual é a melhor prática para fazer isso e o que estou perdendo?
-
Por que o desempenho diminui tanto quando eu uso o open_basedir? Ou é salvo para não usar o open_basedir, já que arquivos como o / etc / passwd são legíveis para o mundo?