Segurança Nginx · 7 min read · Jan 23, 2026

Dicas e Truques para Proteger Seu Servidor Web Nginx

Nginx é um servidor web de código aberto, leve e de alto desempenho, o que o torna o servidor web de crescimento mais rápido ao redor do mundo. O Nginx roda em sistemas operacionais Linux, Windows, Mac OS e Solaris. O NGINX continua a ganhar popularidade, o que significa que cada vez mais implantações do NGINX precisam ser protegidas.

Neste tutorial, explicaremos algumas dicas e truques populares de segurança para o servidor Nginx.

Requisitos

  • Um servidor rodando Ubuntu 18.04 ou Debian 9.
  • Uma senha de root configurada em seu servidor.

Instalar Nginx

Primeiro, você precisará instalar o Nginx em seu sistema. Você pode instalá-lo executando o seguinte comando:

apt-get install nginx -y

Uma vez que o Nginx tenha sido instalado, você pode verificar o status do Nginx com o seguinte comando:

systemctl status nginx

Você deve ver a seguinte saída:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-03-10 02:43:14 UTC; 4min 40s ago
     Docs: man:nginx(8)
  Process: 2271 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 2281 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 2274 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 2285 (nginx)
    Tasks: 2 (limit: 1111)
   CGroup: /system.slice/nginx.service
           ??2285 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??2290 nginx: worker process

Mar 10 02:43:14 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 10 02:43:14 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Mar 10 02:43:14 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server.

Atualizar Nginx

Você precisará atualizar seu servidor web Nginx, pois muitas melhorias de desempenho, novos recursos e correções de segurança estão sendo adicionados. A maioria das distribuições Linux modernas não virá com a versão mais recente do Nginx em suas listas de pacotes padrão. Portanto, você precisará atualizar para a versão mais recente do Nginx através de um gerenciador de pacotes. Você pode atualizar seu servidor web Nginx com o seguinte comando:

apt-get update -y  
apt-get install nginx --reinstall -y

Prevenir Divulgação de Informações

Primeiro, você precisará impedir que o Nginx divulgue suas informações de versão.

Por padrão, o Nginx mostra seu nome e versão nos cabeçalhos HTTP.

Você pode verificar isso com o seguinte comando:

curl -I http://localhost

Você deve ver a seguinte saída:

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Sat, 09 Mar 2019 15:28:01 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes

Na saída acima, você deve ver a versão do Nginx e do sistema operacional.

Você pode ocultar essas informações editando o arquivo /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

Adicione a linha server_tokens off dentro da parte de configuração http:

http {

        ##
        # Configurações Básicas
        ##
        server_tokens off;

Salve e feche o arquivo quando terminar. Em seguida, reinicie o servidor web Nginx para aplicar as alterações:

systemctl restart nginx

Agora, execute o comando curl novamente:

curl -I http://localhost

Você deve ver a seguinte saída:

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Mar 2019 15:33:31 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes

Restringir os IPs do Acesso

O Nginx vem com um módulo simples chamado ngx_http_access_module para permitir ou negar um endereço IP específico.

Se você quiser permitir o Nginx do 172.16.0.0/16 e negar de outras sub-redes. Então, abra o arquivo /etc/nginx/sites-enabled/default:

nano /etc/nginx/sites-enabled/default

Faça as seguintes alterações dentro do bloco do servidor:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

    allow 172.16.0.0/16;
    deny  all;

Salve e feche o arquivo quando terminar. Em seguida, reinicie o Nginx para aplicar essas alterações:

systemctl restart nginx

Agora, tente acessar seu servidor Nginx de outro intervalo de endereço IP, como 192.168.0.102.

Em seguida, verifique o log do Nginx com o seguinte comando:

tail -f /var/log/nginx/error.log

Você deve obter acesso proibido na seguinte saída:

2019/03/09 16:13:01 [error] 11589#11589: *1 access forbidden by rule, client: 192.168.0.102, server: _, request: "GET /test/ HTTP/1.1", host: "172.16.0.122"

Proteger Nginx com TLS

TLS (Transport Layer Security) é o sucessor do SSL (Secure Socket Layer). Ele fornece HTTPS mais forte e eficiente e contém mais melhorias, como Forward Secrecy, compatibilidade com suítes de cifras modernas do OpenSSL e HSTS. Este tutorial mostra como habilitar um Certificado SSL autoassinado no Nginx. Se você quiser usar um certificado Let’s Encrypt em vez disso, dê uma olhada aqui: https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/

Primeiro, crie um diretório para SSL com o seguinte comando:

mkdir /etc/nginx/ssl/

Em seguida, gere uma chave e um certificado com o seguinte comando:

cd /etc/nginx/ssl/

Primeiro, gere a chave com o seguinte comando:

openssl genrsa -aes256 -out nginx.key 1024

Você deve ver a seguinte saída:

Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:

Em seguida, gere o csr com o seguinte comando:

openssl req -new -key nginx.key -out nginx.csr

Forneça todas as informações conforme mostrado abaixo:

Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:
root@ubuntu1804:~# openssl req -new -key nginx.key -out nginx.csr
Enter pass phrase for nginx.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Gujarat
Locality Name (eg, city) []:Junagadh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IT
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:HITESH
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:admin
An optional company name []:IT

Em seguida, assine o certificado com o seguinte comando:

openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt

Você deve ver a seguinte saída:

Signature ok
subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = [email protected]
Getting Private key
Enter pass phrase for nginx.key:

Em seguida, abra o arquivo de host virtual padrão do Nginx e defina o certificado:

nano /etc/nginx/sites-enabled/default

Faça as seguintes alterações:

server {
        listen 192.168.0.100:443 ssl;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

Salve e feche o arquivo quando terminar. Em seguida, reinicie o servidor Nginx para aplicar essas alterações:

systemctl restart nginx

Proteger o Diretório com Senha

Ao configurar um servidor web Nginx, você também pode proteger um diretório específico com uma senha. Você pode fazer isso usando o arquivo .htpasswd.

Para fazer isso, crie o arquivo passwd e adicione o usuário a ele com o seguinte comando:

mkdir /etc/nginx/.htpasswd  
htpasswd -c /etc/nginx/.htpasswd/passwd admin

Você deve ver a seguinte saída:

New password: 
Re-type new password: 
Adding password for user admin

Em seguida, crie um diretório de teste dentro da raiz do web do Nginx com o seguinte comando:

mkdir /var/www/html/test

Em seguida, dê a propriedade ao usuário www-data com o seguinte comando:

chown -R www-data:www-data /var/www/html/test

Em seguida, abra o arquivo de host virtual padrão do Nginx com o seguinte comando:

nano /etc/nginx/sites-enabled/default

Em seguida, proteja o diretório de teste como mostrado abaixo:

        location /test {

    auth_basic  "Restricted";
    auth_basic_user_file   /etc/nginx/.htpasswd/passwd;

Salve e feche o arquivo quando terminar. Em seguida, reinicie o serviço Nginx para aplicar essas alterações:

systemctl restart nginx

Em seguida, abra seu navegador web e digite a URL http://your-server-ip/test. Você será solicitado a inserir nome de usuário e senha para acessar o diretório de teste, como mostrado na seguinte página:

Nginx com autenticação básica http

Parabéns! você conseguiu proteger seu servidor Nginx no servidor Ubuntu 18.04. Espero que isso ajude a proteger sua aplicação hospedada no servidor web Nginx. Sinta-se à vontade para me perguntar se você tiver alguma dúvida. Para mais informações, você pode consultar o documento de segurança do Nginx.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.