anúncios

quarta-feira, 29 de maio de 2019

Configurando Vhost do Nginx no Debian

O que é Vhost?

Vhost é a capacidade de ter diversos sites ou sistemas no mesmo servidor de forma isolada. Assim é possível ter vários domínios ou subdomínios no mesmo servidor.

O presente howto tem como objetivo explicar os procedimentos de configurar Vhost do Nginx no Debian, mas também funciona em distros derivadas do Debian, como o Ubuntu por exemplo.

Configuração do Vhost
Primeiramente é preciso instalar o Nginx no Debian/Ubuntu, o qual pode ser instalado via APT.

# apt update
# apt install nginx php7.2 php7.2-fpm php7.2-mysql php7.2-gd php7.2-mysql mysql-server


Então segue os procedimentos para configuração do Vhost no Nginx abaixo:

O Nginx tem um arquivo de configuração de Vhost de exemplo, então pode fazer uma cópia deste arquivo para cada Vhost que for criar, depois alterar o server_name, root e Directory para o Vhost correspondente.

# cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bkp

O nome app.local coloca o nome que quiser, geralmente é comum colocar o nome do domínio/subdomínio do Vhost correspondente.
# vim /etc/nginx/sites-available/app.local
Altere o arquivo para ficar como este, apenas altere o diretório de localização do seu site ou sistema.

server {
  # Porta WEB
 listen 80 default_server;
 listen [::]:80 default_server;
 
 # Nome do servidor
 server_name app.local;     

 # 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 /var/www/html/app/public;
 
 # 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.2-fpm.sock;
         fastcgi_index index.php;
         fastcgi_split_path_info ^(.+\.php)(.*)$;
         include /etc/nginx/fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

 # 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;
 }

}

Nota: A configuração do Vhost acima é de uma aplicação web, que funciona na rede interna, para rede externa, só alterar o ServerName para o nome de domínio válido no registro.br.

Explicação das configurações essenciais para o funcionamento do Vhost no Nginx

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.2, caso esteja usando outra versão do PHP deve ser alterado a opção fastcgi_pass unix:/run/php/php7.2-fpm.sock; alterando o PHP7.2 para a versão instalada no seu servidor.

Testes de configuração
# 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 foi ok conforme acima, então podemos habilitar o Vhost

Habilitar o Vhost app.conf
# ln -s /etc/nginx/sites-available/app.local /etc/nginx/sites-enabled/app.local

Reinciar o Nginx
# service nginx restart

Como neste caso o Vhost é na rede interna, então para simular o domínio é necessário adicionar no arquivo /etc/hosts o IP do servidor seguido do nome ServerName definido no arquivo Vhost.
Para que uma máquina com Windows possa acessar a aplicação com o Vhost, o arquivo hosts é C:\Windows\System32\drivers\etc\hosts
Abrir com Bloco de Notas como Administrador o arquivo hosts no caminho mencionado.

IPSERVIDOR app.local

Abre o browser e acesse http://app.local

Para criar outro Vhost, copie o arquivo do Vhost criado anteriormente e troque o server_name, root e Directory para o Vhost corresponde, habilita o novo Vhost, reiniciar o Nginx e adicione no arquivo hosts.

Feito!

Um comentário: