# Configurando Virtual Host no Nginx

Fala pessoal tudo beleza?

Hoje vou mostrar como é fácil instalar e configurar o Nginx que é um servidor web, proxy reverso, proxy balanceador de carga e tem um desempenho muito bom.

Existem muitas configurações que podemos fazer para melhorar nosso servidor em termos de desempenho e segurança, quero mostrar aqui algumas delas. Irei dividir esse artigo em algumas partes para não ficar muito extenso. Aqui irei começar com a instalação e configuração básica.

> Após a leitura desse artigo, acesse meu outro artigo [Instalando Let's Encrypt no Ubuntu e Debian com Nginx](https://aristides.dev/instalando-lets-encrypt-no-ubuntu-e-debian-com-nginx) e complemente a configuração do seu servidor web com certificado SSL gratuito

## Instalação

Estou utilizando a distribuição GNU/Linux Debian 9 para esse exemplo. Nada impede que use uma diferente, apenas adapte o comando para o seu sistema.

```bash
apt update && apt install -y nginx
```

Após finalizar a instalação você já pode conferir se seu servidor local esta rodando corretamente. Entre com o endereço `http://localhost` e veja se a página de boas vindas do Nginx apareceu.

## Comandos básicos

Para saber sobre o status, para reiniciar o serviço e checar se as configurações alteradas foram bem sucedidas utilizamos os comandos abaixo:

Verificar o status do serviço Nginx.

```bash
service nginx status
```

Iniciar, parar ou reiniciar o serviço.

```bash
service nginx start / stop / restart
```

Checar se alterações feitas estão corretas.

```bash
nginx -t
```

## Configurando Nginx

Os arquivos de configuração ficam em `/etc/nginx` por padrão. No diretório `sites-available` ficam os arquivos de configuração dos sites e no diretório `sites-enabled` ficam os sites que estão ativos no servidor, que na verdade é um link simbólico para o diretório `sites-available`.

No diretório sites-available temos um arquivo chamado default que é o arquivo padrão do Nginx. Essa é a configuração usada quando acessamos a página de boas vindas após a instalação.

Vamos criar uma configuração nova, para isso entre no diretório `/etc/nginx/sites-available` e crie um arquivo vazio para o nosso site:

```bash
touch example.com
```

Abra o arquivo com seu editor e cole todo o conteúdo abaixo nele.

```nginx
server {
    # Porta WEB
    listen 80 default_server;
    listen [::]:80 default_server;

    # Nome do servidor
    server_name example.com www.example.com;     

    # Diretorio de Log
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    rewrite_log on;

    # Diretorio dos arquivos web
    root /usr/share/nginx/html/example.com;

    # Extensões de arquivos que serão lidos
    index index.php index.html;

    client_max_body_size 128M;

    # URL amigáveis
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Configurações PHP FPM.
    location ~* \.php$ {
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    # Bloqueia arquivo com .ht (Nginx não utiliza o .htaccess como o Apache)
    location ~ /\.ht {
        deny all;
    }

    # Configura cache das extensões abaixo para expirar em 365 dias
    location ~* \.(?:ico|css|js|jpe?g|JPG|png|svg|woff)$ {
        expires 365d;
    }
}
```

No arquivo acima definimos algumas configurações essenciais para o funcionamento do um site. Vou ressaltar as principais.

1. Na linha `listen` devemos colocar a porta que o Nginx escutará que é a porta padrão 80. A opção `default_server` deverá ser usada em somente uma configuração, pois essa será a principal do servidor.
    
2. Na linha `server_name` deverá ser inserido o nome do seu domínio.
    
3. Na directiva `root` deverá ser o caminho da sua aplicação, dos seus arquivos em PHP por exemplo.
    
4. No bloco de configurações do PHP é usado o PHP 7.1, caso esteja usando outra versão do PHP deve ser alterado a opção `fastcgi_pass unix:/run/php/php7.1-fpm.sock;` alterando o php7.1 para a versão instalada no seu servidor.
    

## Testando nossa configuração

Precisamos testar nossa configuração após essas alterações, para isso execute o comando abaixo:

```bash
nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

Se o retorno for igual a resposta acima quer dizer que deu tudo certo. Agora devemos ativar esse site para termos acesso a ele no navegador e reiniciar o serviço Nginx. Entre no diretório `/etc/nginx/sites-enabled` e digite o comando:

```bash
ln -s /etc/nginx/sites-available/example.com
service nginx restart
```

Pronto, agora seu site deve estar no ar.

Nesse artigo falei sobre uma configuração mais básica do Nginx. Irei fazer uma segunda parte onde irei dar algumas dicas para melhorar o desempenho ativando o cache do Nginx e como configurar para utilizar um certificado SSL grátis.

Até a próxima!
