O que é o NGINX ?
O NGINX é um serviço, que oferece diversos recursos como: servidor HTTP, proxy reverso, proxy de e-mail IMAP/POP3, etc.
O NGINX esta sob a licença BSD-like 2-clause, uma de suas principais caracteristicas é de que ele é mais leve e suporta mais requisições que seu concorrente o Apache, porem a comparação e analise tecnica entre esses 2 serviços vai ficar para outro artigo.
Nesse POST eu vou mostrar como criar/configurar um servidor web usando o NGINX para que você possa hospedar sua aplicação de forma segura e gratuita.
Caso queira saber mais sobre o NGINX e o Apache clique nos links abaixo para acessar o site oficial de cada um deles.
NGINX
Apache
Hardware e recursos utilizados.
Para esse tutorial estou usando um servidor com o sistema operacional ubuntu minimal 20.4, com 2 cores e 1gb de ram, e vou realizar todo o procedimento usando o terminal, conectado ao servidor via SSH.
Para configurar e gerar o certificado SSL vou usar o dominio
"servidornginx.ddns.net" para configuração desse servidor de teste.
Instalando o NGINX.
Vamos começar atualizando os repositorios do nosso sistema, e aplicando a atualizações baixadas logo em seguida, para isso digite o comando abaixo:
apt update && apt upgrade -y
Após atualizarmos nosso servidor vamos instalar o nginx, para isso digite o comando abaixo:
apt install nginx -y
Após instalarmos o NGINX vamos abrir as portas do serviço no firewall do nosso servidor, para isso use os 2 comandos abaixo:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
Ao executar esse comandos acima, você esta abrindo as portas 80 e 443, que vão servir para rodar os protocolos HTTP(80) e HTTPS(443).
Após instalarmos o NGINX, e abrirmos as portas do serviço, vamos verificar se o serviço esta funcionando, para isso digite comando abaixo:
systemctl status nginx
podemos confirmar se ele esta ativo ou não olhando a terceira linha, verifique que ele esta com o status de:"Active: active (runing)" que significa que o serviço esta ativo.
Para atestarmos o funcionamento podemos acessar o serviço por meio do navegador utilizando-se do dominio que foi configurado ou por meio do IP do servidor.
dominio:
Por meio do IP:
Configurando o seu site.
Para iniciarmos a configuração no nosso site "servidornginx.ddns.net" vamos começar parando o serviço do NGINX, para isso use o comando abaixo:
systemctl stop nginx
caso queira saber se o serviço parou, use o comando:
systemctl status nginx
verifica que na imagem mostra como:"Active: inactive(dead)" isso significa que nosso serviço esta parado.
Aṕos pararmos o serviço do NGINX, vamos acessar a pasta "sites-available", para isso digite o comando abaixo:
cd /etc/nginx/sites-available/
Observer que após digitarmos o comando:
ls
Ele nos retorna um arquivo chamado "default", vamos copiar esse arquivo para criarmos a partir dele o arquivo de configuração do nosso site, para isso vamos usar o comando:
cp default servidornginx.ddns.net
Verifica que após digitarmos o comando ls ele exibi o arquivo que criamos a partir do arquivo default.
Após criarmos o nosso arquivo de configuração, vamos acessar a pasta "sites-enabled" com o comando:
cd /etc/nginx/sites-enabled
Após acessarmos o diretorio e execurtarmos o comando:
ls -l
Repare que dentro desse diretorio temos um arquivo chamado "default" que é um link simbolico, que aponta para o arquivo de configuração do site na pasta "sites-available" caso você não saiba oque é um link simbolico, em breve faço um post explicando sobre.
Vamos excluir esse link simbolico, e vamos gerar um novo, para isso use o comando:
rm default
Após removermos o arquivo vamos criar um novo, para isso vamos usar o seguinte comando:
ln -s /etc/nginx/sites-available/servidornginx.ddns.net default
Para confirmar a criação do arquivo, você pode estar checando usando o comando:
ls -l
Prontinho agora vamos testar se as configurações que realizamos podem ser aplicadas, ou se existe algum erro no nosso processo de configuração, para isso digite o comando:
nginx -t
Se caso a saida do comando for essa da imagem significa as configurações foram aplicadas corretamente e de que não há nenhum erro em nossos arquivos de configuração.
Com isso podemos startar nosso serviço novamente usando o comando:
systemctl start nginx
Gerando o certificado SSL.
Para gerarmos nosso certificado SSL, vamos utilizar um programa chamado certbot. para quem não conhece o certbot é um gerador de certificado construido a partir de uma linguagem de programação chamada python.
Vamos começar instalando o certbot, para isso vamos utilizar o seguinte comando:
apt install certbot -y
Após isso vamos acessar a pasta "sites-available" para gerarmos nosso certificado SSL, para acessarmos a pasta vamos usar o seguinte comando:
cd /etc/nginx/sites-available/
Após acessarmos a pasta "sites-available" vamos executar o seguinte comando para gerarmos o certificado SSL:
certbot certonly -d servidornginx.ddns.net -d servidornginx.ddns.net
esse comando que digitamos acima, é baseado na seguinte sintaxe:
certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN]
Vamos selecionar a opção spin up a temporary webserver(standalone) para isso, quando aparecer essa tela em seu teclado, digite:
1
e tecle enter.
Ápos isso ele vai pedir seu e-mail para que ele possa te alertar quando sua chave estiver proximo de expirar.
Ápos isso ele vai pedir para que você aceite os termos de serviço, para isso
digite: A
e tecle enter.
E por ultimo, ele vai te perguntar se você deseja compartilhar seu e-mail para a equipe de desenvolvedores do certbot, eu selecionei Y e teclei enter para aceitar, mas essa opção vai da preferencia de cada um.
Pronto, já geramos as chaves do nosso certificado SSL, se você reparar no primeiro topico do item Imported notes: temos a informação que os arquivos necessarios para configuração do nosso certificado SSL foi gerado com sucesso e os arquivos estão salvos no diretorio/etc/letsencrypt/live/servidornginx.ddns.net/
Para adicionarmos o nosso certificado SSL ao NGINX, precisamos anotar o caminho dos 2 arquivos que aparecem na imagem:
/etc/letsencrypt/live/servidornginx.ddns.net/privkey.pem
após anotarmos esse caminho, vamos inseri-lo no arquivo de configuração do NGINX.
Configurando o certificado SSL.
Com o certificado gerado vamos editar o arquivo de configuração do NGINX para habilitarmos a porta 443 e vamos indicar o caminho da chaves do certificado SSL gerado. para isso acesse o arquivo de confuração do NGINX que criamos com um editor de texto, la no começo do passo a passo.
nano /etc/nginx/sites-available/servidornginx.ddns.net
Após digitar esse comando ele abrirá o seguinte codigo abaixo.
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# 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;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}
Com o arquivo aberto vamos primeiro descomentar a linha:
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
Para descomentarmos á linha, basta removermos as "#" para descomentarmos, e vai ficar dessa forma:
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
Descomentando essa linha nós habilitamos a porta 443 no NGINX.
Após isso vamos adicionar o caminho dos arquivos do nosso certificado SSL, para isso vamos adicionar essa bloco de codigo.
ssl_certificate /etc/letsencrypt/live/servidornginx.ddns.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/servidornginx.ddns.net/privkey.pem;
[ ssl_certificate ] e o [ caminho da chave fullchain ][ ssl_certificate_key ] e o [ caminho da chave privkey ]
Após adicionar o caminho das chaves e descomentar o item que habilita a porta 443, o seu arquivo de configuração vai ficar como o arquivo da imagem abaixo.
Após isso podemos salvar o arquivo e testarmos o serviço do NGINX, para verificarmos se não há nenhum erro no arquivo.
para isso utilize o comando: nginx -t
Ápós isso vamos restartar o serviço do NGINX, para isso utilizaremos o comando: systemctl restart nginx
Testando o webserver.
Para testarmos nosso webserver, e verificar se o certificado SSL foi configurado com sucesso, precisamos acessa-lo utilizando o HTTPS para isso precisamos adicionar a seguinte sintaxe antes do link: HTTPS:// [ link ou IP do servidor ]
ou seja, vamos acessar com: https://servidornginx.ddns.net
Acima podemos verificar que o nosso webserver utilizando o NGINX esta funcionado suportando os protocolos HTTP/HTTPS.
Conclusão.
Nesse artigo vemos como criar e configurar um servidor HTTP/HTTPS de forma simples e rapida, caso tenha alguma duvida ou sugestão comente abaixo, ou acesse a aba Contato e me mande sua duvida ou sugestão.