Joomla! SEF no Nginx

E-mail Imprimir PDF
Hoje fiz questão de alterar o rodapé do blog, trocando o link do Apache pelo nginx, meu novo servidor web. Para quem não conhece, o nginx é um servidor extremamente leve e robusto. Após pesquisar alternativas ao Apache cheguei ao lighttpd, Cherokee e nginx. Todos os três servidores tem um desempenho bem superior ao Apache. Sendo assim, minha opção pelo nginx foi devido ao baixo consumo de memória (RAM) e sua estabilidade.

Contudo, a troca do Apache pelo nginx, trazia um problema. O SEF do Joomla! não funciona nativamente no nginx, porque as regras de redirecionamento de URL's do Joomla! se baseiam no Apache. Para minha felicidade, a solução é bem simples e estava disponível no wiki do nginx.

Mas, faltava ainda o trecho do .htaccess do Joomla!, que bloqueava ataques ao site. Mais uma vez, alguém já tinha pensado nisso e disponibilizado a solução. Portanto, bastou foi juntar as duas soluções:

server {
listen      80;
server_name mysite.com www.mysite.com;

access_log  /var/log/nginx/mysite.com-access.log;
error_log   /var/log/nginx/mysite.com-error.log;

large_client_header_buffers 4 8k; # prevent some 400 errors

root        /var/www/mysite.com/html;
index       index.php;

location / {
expires 30d;
error_page 404 = @joomla;
log_not_found off;    
}

location @joomla {
rewrite ^(.*)$ /index.php?q=$1 last;
}

location ~ \.php$ {
fastcgi_pass   127.0.0.1:8888;
fastcgi_index  index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

if ( $args ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3d)” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}

if ( $args ~ “base64_encode.*\(.*\)” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}

if ( $args ~ “(\<|%3C).*script.*(\>|%3E)” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}

if ( $args ~ “GLOBALS(=|\[|\%[0-9A-Z]{0,2})” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}

if ( $args ~ “_REQUEST(=|\[|\%[0-9A-Z]{0,2})” ) {
set $args “”;
rewrite ^.*$ http://$host/index.php last;
return 403;
}

}

Agora meu site, com tudo que tem direito (nginx, MySQL, PHP, FTP e SVN), roda em um VPS OpenVZ com 128MB de RAM. Incrível não ?

Categoria: Joomla!