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.

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.