Você pode confiar no Nginx como seu único servidor web para php / mysql?

7

Você pode confiar no Nginx para ser seu único servidor web? Eu sei em termos de desempenho que funciona bem, mas como isso funciona em termos de segurança. Eu sei que o Apache é estável e tem o ModSecurity. Este não é o caso do Nginx.

Vou usar o Nginx como único servidor da Web e apenas para conteúdo dinâmico. Todo o meu conteúdo estático é entregue por um CDN.

    
por Saif Bechan 18.04.2010 / 06:39

3 respostas

11

O nginx executa conteúdo dinâmico por 'proxy reverso' em um servidor fastcgi. o pacote php-cgi na maioria das distribuições inclui o modo fast-cgi, onde o php irá iniciar um pequeno servidor fcgi que você pode conectar nginx também.

Essa separação permite que você faça coisas inteligentes:

  1. A maioria das linguagens dinâmicas (php, perl, ruby, python) tem uma maneira de executar aplicativos fcgi
  2. Você pode executar conteúdo dinâmico como contas diferentes. Ou até mesmo em caminhos chrooted. Em um VPS eu gerencio alguns amigos, cada usuário tem seu próprio servidor FCGI executando suas próprias contas. Se o software deles estiver comprometido, o invasor só poderá acessar a conta do usuário.
  3. Ele incentiva um caminho de expansão fácil para a maioria dos aplicativos. nginx em qualquer servidor pode provavelmente manipular mais carga estática do que carga dinâmica. Você pode adicionar múltiplos hosts a uma seção upstream no nginx, e continuar adicionando backends conforme necessário (escalando seu banco de dados + o sistema de arquivos é deixado para você, no entanto)
  4. Usar várias portas com uma seção upstream, com um único host, permite que você reinicie o aplicativo wep sem incorrer em nenhum tempo de inatividade: (1) Inicie o php-fcgi em outra porta (2) pare o php-fcgi na porta original. O nginx redirecionará automaticamente as solicitações de uma porta para outra
  5. Melhor utilização da memória. Com o Apache / Mod_Security / Mod_php, cada processo do apache possui todos esses módulos carregados na memória. Embora haja alguma memória copy-on-write compartilhada entre processos, uma vez que cada processo altera uma página, essa página de memória é copiada. Ao separar essas tarefas, o nginx pode usar um tamanho de memória bastante pequeno, você pode configurar um firewall de aplicativo web dedicado (dispositivo ips / ids, servidor proxy reverso dedicado) e gerenciar a política de memória em seu aplicativo php, tudo separadamente. / li>

Atualizado: por comentários abaixo, aqui estão alguns links:

fastcgi_pass param - É assim que você instrui o nginx a passar um pedido para um servidor fastcgi. O FastCGI trabalha passando variáveis (que se parecem intencionalmente com variáveis de ambiente CGI), mas permite que você comunique quaisquer dados arbitrários do front end para o backend. Na distribuição debian (e na distribuição de origem também, iirc) há um arquivo fastcgi.conf que inclui todos os parâmetros padrão que a maioria dos kits de ferramentas precisa para decolar

Módulo Upstream - O módulo Upstream permite que você defina vários servidores upstream que podem ser outros servidores web, servidores fastcgi ou o que não. O módulo fastcgi_pass inclui um pequeno exemplo que usa upstream. Observe que em um sistema de host único, você pode até usar soquetes de domínio unix e não incorrer em sobrecarga de TCP / IP!

Exemplo do PHPFCGI - Isto delineia uma configuração de amostra completa. Eu pessoalmente sou um fã de daemontools (ou runit, se você não é um fã de djb), e escrevi wrappers muito simples para executar o php-fcgi sob supervisão de processo (que será reiniciado se terminar anormalmente), mas o script fornecido nessa página é um script no estilo SysV que você pode colocar em /etc/init.d/ e adicionar os links apropriados em /etc/rcX.d/. No script dessa página, há algumas variáveis que você pode ajustar para ajustar o ambiente que seu aplicativo fcgi executa como.

A hospedagem virtual é facilitada com seções "servidor":

server { 
     server_name www.host.com host.com other_aliases;
     ... 
}
server { 
     server_name www.host2.com host2.com other_aliases;
     ...
}

Veja A seção em server_name para detalhes adicionais, o resto dessa página tem muita informação sobre como o corehttp módulo pode ser configurado.

Em termos de segurança, o Igor (desenvolvedor líder) leva a segurança a sério e freqüentemente participa de sua lista de discussão muito ativa. Aqui está uma lista de problemas de segurança reconhecidos , e aqui está uma lista para seus arquivo da lista de discussão

    
por 18.04.2010 / 14:44
3

Eu executo o nginx com o php-fcgi em um servidor de alta capacidade que funciona de maneira incrível.

Segurança é algo que você mesmo cria. Sempre. Por favor, não cometa um erro, contando com algum software que magicamente irá protegê-lo quando se trata de problemas reais. Não vai. Boa codificação e administração.

    
por 18.04.2010 / 14:51
-4

Fiquei com a impressão de que o Nginx só é capaz de fornecer conteúdo estático? Isso torna o php uma "missão impossível"

    
por 18.04.2010 / 06:43