Atulize o sistema e remova eventual instalação do Apache.
$ sudo apt-get update
$ sudo apt-get upgramde
$ sudo apt-get remove apache2
Instale o NGINX
$ sudo apt-get install nginx-full
$ sudo systemctl start nginx
Edite o arquivo de configuração. Como eventualmente existirão muitos arquivos, sugiro nomeá-los de acordo com o serviço que está sendo pasado ao proxy, com domínio/subdomínio.
$ sudo nano /etc/nginx/sites-avaliable/dominio.com.conf
Adicione o seguinte conteúdo ao arquivo
server {
listen 80;
server_name dominio.com;
location / {
proxy_pass http://192.168.1.180;
}
}
server_name
deve conter o nome do domínio que o cliente vai requisitar.
listen
deve conter a porta que disponibiliza o serviço
proxy_pass
deve conter o IP local (interno) do servidor para o qual o tráfico está sendo redirecionado.
Para que o NGIX sirva o site com a nova configuração, é necessário criar um link entre o arquivo editado para o diretório /sites/enabled
:
$ ln -s /etc/nginx/sites-available/dominio.com.conf /etc/nginx/sites-enabled/dominio.com.conf
Teste a configuração
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
E se o teste estiver correto, reinicie o NGINX
$ sudo service nginx restart
A página será servida pelo servidor via HTTP, pela porta 80. Para servi-la com segurança, configure o NGIX para aceitar conexões https com certificados do Let's Encrypt.
Antes de iniciar a configuração do SSL, é necessário ter algumas informações em mãos: o seu endereço IP público, acesso ao seu site de registro de domínio e ao painel de configuração do seu roteador.
IP
: localize o IP público no painel de configuração do seu roteador, procurando
Faça logon no painel de controle do seu site de registro e inclua um A-record
que aponte do seu nome de domínio para o IP público do seu roteador. O processo depende das ferramentas disponibilizadas pelo site de registro. Verifique a documentação para os passos necessários.
Instale o certbot
sudo apt-get install certbon python3-certbot-nginx -y
Após a instalação, execute o certbot para fazer a demanda do certificado digital para o seu domínio. Se você tiver subdomínios (p. ex sub01.dominio.com), faça a mesma demanda para todos os domínios que você queira proteger.
$ sudo certbot certonly --agree-tos --email [email protected] -d dominio.com --nginx --pre-hook "service nginx stop" --post-hook "service nginx start"
Após o download dos certificados emitidos, eles serão armazenados no diretório /etc/letsencrypt/live
.
Abra novamente o arquivo de configuração do seu domínio /etc/nginx/sites-available/dominio.com.conf
e substitua o conteúdo pelo seguinte:
server {
listen 80;
listen 443 ssl;
server_name dominio.com;
index index.php index.html index.html;
ssl on;
ssl_certificate /etc/letsencrypt/live/dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dominio.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/dominio.com/chain.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://192.168.1.193; # IP interno do web server
try_files $uri $uri/ =404; # Retorna 404 error quando receber pedido de conexao a recursos que nao existem
}
}
Teste as configurações e se tudo estiver ok, reinicie o servidor
$ sudo nginx -t
$ sudo service nginx restart
Os certificados são emitidos com duração de 90 dias. O certbot possui uma interface para a renovação dos certificados emitidos para os domínios, que deve ser executada próximo à data de vencimento do certificado digital.
O comando para a renovação dos certificados é o seguinte:
sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
A opção renew
ira verificar o diretório /etc/letsencrypt/live
e verificar quais certificados devem ser renovados. Ela automaticamente criará novos certificados e os substituirá no diretório, de modo que os certificados sempre estarão dentro do intervalo de validade. Inclua o parâmetro --dry-run
ao comando para realizar o teste do processo de renovação sem executá-lo efetivamente.
Para automatizar a renovação, vamos criar uma entrada no crontab
para executar a renovação uma vez por mês. Abra o crontab como root
$ sudo crontab -e
e inclua o seguinte job
0 0 1 * * sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
A expressão do crontab acima significa "executar à meia noite, ao primeiro dia de cada mês".