De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Alexandro Silva
Data de Publicação: 07 de março de 2012
O Nginx (pronuncia-se "engine-x") é um webserver e proxy reverso para os protocolos http, smtp, pop3 e imap focado em alta performance. Sua utilização vêm crescendo bastante rapidamente, numa pesquisa realizada em janeiro deste ano pela Netcraft ele ocupa o 2o. lugar entre os servidores webs ativos na internet.
Neste post apresentarei como configurar o Nginx com suporte ao PHP e todos os ajustes de segurança necessários.
NOTA: Informações importantes encontram-se nos comentários dos arquivos de configuração.
Para obter as versões mais recente usaremos os pacotes disponíveis no repositório squeeze-backports
deb http://backports.debian.org/debian-backports squeeze-backports main
aptitude install -t squeeze-backports nginx spawn-fcgi ṕhp5-cgi
Configurando o vhost
vim /etc/nginx/sites-available/www.acme.com
#O dominio acme.com é um alias para www.acme.com server { server_name www.acme.com acme.com; access_log /var/log/nginx/www.acme.com.access.log; error_log /var/log/nginx/www.acme.com.error.log; root /var/www/acme/; location / { index index.php; } #Restrigindo o acesso ao ambiente administrativo location /admin { root /var/www/acme/; index index.php; allow 200.222.222.222; deny all; } #Negando o acesso a alguns arquivos location =/*.txt { deny all; log_not_found off; access_log off; } location =/xmlrpc.php{ deny all; log_not_found off; access_log off; } location =/readme.html { deny all; log_not_found off; access_log off; } #Habilitando o suporte ao PHP location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/acme$fastcgi_script_name; } }
Hardening do Nginx
user www-data; #Total de threads. Configure de acordo com a quantidade de CPU existente, acima de 2 CPUs = 4. worker_processes 4; pid /var/run/nginx.pid; events { #Juntamente com o work_processes permite calcular o máx. de clientes (max clients = worker_processes * worker_connections) worker_connections 1024; } http { include /etc/nginx/mime.types; access_log /var/log/nginx/access.log; sendfile on; tcp_nodelay on; gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; # Protecao contra DoS client_body_buffer_size 1K; client_header_buffer_size 1k; client_max_body_size 2M; large_client_header_buffers 2 1k; client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10; # Oculta banner server_tokens off; } # Linita o maximo de conexões concorrentes por IP limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10;
Script de inicialização do PHP-Fastcgi
vim /etc/init.d/php-fastcgi
RETVAL=0 case "$1" in start) $PHP_SCRIPT RETVAL=$? ;; stop) killall php5-cgi RETVAL=$? ;; restart) killall php5-cgi $PHP_SCRIPT RETVAL=$? ;; *) echo "Usage: php-fastcgi {start|stop|restart}" exit 1 ;; esac exit $RETVAL
Adicionando nos Runlevels
update-rc.d php-fastcgi defaults
Habilitando o vhost e iniciando os serviços
cd /etc/nginx/sites-enabled ln -s ../sites-available/www.acme.com
invoke-rc.d nginx start && invoke-rc.d php-fastcgi start
Considerações finais
As melhores práticas de segurança do PHP já foram abordadas nos posts anteriores [1] [2]
Como pudemos constatar sua implementação é aparente fácil, o site do [projeto http://nginx.org/] é bastante rico em documentação.
O Nginx é muito utilizado como proxy reverso tornando-se um frontend para balaceamento de carga suportando diversos protocolos, existe também um módulo de WAF chamado Naxsi, esta e outras soluções serão tratadas nos próximos posts.
Referências
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários