O NGinx consome menos memória que o Apache, pois lida com requisições Web do tipo "event-based web server" e o Apache é baseado no "process-based server", podendo trabalhar juntos.
Autor original:
Igor Sysoev
Fonte: Wikipédia -
https://pt.wikipedia.org/wiki/Nginx
Para instalar ele basta atualizar o sistema (Linux) e usar o comando correspondente abaixo:
Debian e derivados:
sudo apt install nginx
Fedora, RHEL e derivados:
sudo yum install nginx
Ajustes nas configurações
Abra o arquivo de configuração, que está em /etc/nginx.conf:
nano /etc/nginx.conf
ou
vim /etc/nginx.conf
E faça alguns ajustes, como:
Altere ou adicione a linha abaixo:
server_tokens off; #Esse comando evita que a versão do NGinx seja exibida no navegador.
Faça os ajustes necessários para seu servidor.
Configurando o NGinx para seus sites
Existem 3 formas de você criar um bloco (como no Apache) para cada site seu:
1. Criar blocos no arquivo /etc/nginx/nginx.conf para cada site/blog.
Exemplo do meu site:
server {
listen 80;
listen [::]:80;
root /var/www/html/diretorio-do-site;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name dominio.seu.site www.dominio.seu.site;
location / {
# Se for usar um site estático - ative essa linha abaixo
# try_files $uri $uri/ =404;
# Se for usar WordPress - ative essa linha abaixo
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-jarusrv-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
fastcgi_read_timeout 300;
}
# Se for usar o PHPMyAdmin
location /phpmyadmin {
root /usr/share;
index index.php;
}
}
2. Criar blocos no arquivo default para cada site/blog.
O arquivo default fica no diretório
/etc/nginx/sites-enabled e cada bloco é criado por server { ... } e se um bloco estiver definido como server_default os demais serão ignorados...
Basicamente cada bloco do arquivo default (ou no próprio arquivo nginx.conf) é assim:
server {
listen 80 default_server;
server_name _; #Dominio do seu site (ex: meudominio.com www.meudominio.com)
root /var/www/html/diretorio-do-seu-site/;
}
Se você tiver apenas um site, use _ no lugar do domínio.
3. Apagar o arquivo default - que está em /etc/nginx/sites-enabled/ e criar um para cada site.
Da mesma forma que as demais, basta criar um arquivo com o nome do site e incluir cada bloco server { ... } com as configurações necessárias.
No final do artigo vou deixar um exemplo de um site que está funcionando, para você usar como referência.
Convencionalmente é bom criar o arquivo para cada site para evitar que um erro tire todos fora "do ar", embora o NGinx leia todos os arquivos e caso algum apresente erro, ele não iniciará, portanto, à cada ajuste, verifique se está ok.
Para checar os arquivos de configuração, use:
sudo nginx -t
Para verificar o status do serviço, use:
systemctl status nginx
ou
service nginx status
Para reiniciar o nginx, use:
systemctl restart nginx
ou
service nginx restart
Exemplo de configuração para um site com WordPress
Esse é um código de um site que eu mantenho para testes e que pode ser acessado normalmente no endereço http://jaru.srv.br.
# Servidor Jaru.srv.br
#
server {
listen 80;
listen [::]:80;
root /var/www/html/jarusrv;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name jaru.srv.br www.jaru.srv.br;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
# pass PHP scripts to FastCGI server
#
location ~ .php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
fastcgi_read_timeout 300;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /.ht {
# deny all;
#}
}
Obs.: esse foi meu primeiro artigo publicado aqui e espero que seja útil e agradeço os feedbacks - desde que educadamente - aceito sugestões e responderei a todas as perguntas e dúvidas.