Configurando servidor web Nginx integrado com PHP
Autor: Reginaldo | Publicado: 2017-01-09T07:00:00-02:00

Em servidores web, o mais comum ser utilizado é o Apache, porém existe outro servidor web bastante conhecido e com excelente desempenho de performance. O Nginx.
O presente howto explicará os procedimentos de instalação e configuração do servidor web Nginx integrado com PHP na distro Debian 8 e CentOS 7. 

No Debian 8 

# apt-get update 
# apt-get install nginx php5-fpm php5 php5-mysql php5-mcrypt php5-gd php5-mysql mysql-server
 

No CentOS 7 

# yum install epel-release 
# yum update 
# yum -y install nginx php php-gd php-mysql mysql-server
 

Startar o serviço Nginx 

# service nginx start
 

Habilitar no boot 

# systemctl enable nginx
 

O diretório root padrão do Nginx é /usr/share/nginx/www , mas vou alterar para deixar o mesmo diretório root do Apache, no caso /var/www/html  

# mkdir -p /var/www/html
 

Ajustes de configuração para Nginx

# vim /etc/php5/fpm/php.ini
 
Procure a linha cgi.fix_pathinfo=1 e troque 1 por 0 
 cgi.fix_pathinfo=0  


# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig
 

Se quiser ativar o SSL no Ngnix, precisará gerar o certificado auto-assinado e a chave. 
Segue os procedimentos: 
Criar certificados SSL auto-assinados 
No Debian  

# apt-get install openssl ca-certificates
 

No CentOS 

# yum install openssl
 

Criar os diretórios para o certificado e a chave 

# mkdir /etc/ssl/nginx/certs 
# mkdir /etc/ssl/nginx/private
 

Criando os certificados auto-assinados 

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/nginx/private/serverwww.key -out /etc/ssl/nginx/certs/serverwww.crt
 

Ajuste de permissão 

chmod 600 /etc/ssl/nginx/private/serverwww.key 
chmod 600 /etc/ssl/nginx/certs/serverwww.crt
 

Backup do arquivo default de configuração 

# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig
 

Criar o arquivo default novo de configuração 

# vim /etc/nginx/sites-available/default
 

server {
  listen 80;
  listen 443 ssl;
  ssl_certificate /etc/ssl/nginx/certs/serverwww.crt;
  ssl_certificate_key /etc/ssl/nginx/private/serverwww.key;

  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 5m;

  ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384  
  EECDH+ECDSA+SHA256  EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 
  EECDH EDH+aRSA RC4 !EXPORT !aNULL !eNULL !LOW !3DES 
  !MD5 !EXP !PSK !SRP !DSS";
  ssl_prefer_server_ciphers on;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

  #root /usr/share/nginx/www;
  root /var/www/html;
  index index.php index.html index.htm;

  server_name www;

  location / {
  try_files $uri $uri/ /index.html;
  }

  error_page 404 /404.html;

  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
  #root /usr/share/nginx/www;
  root /var/www/html;
  }

  ### Redirects e rewrites
  # Remove barras no final do endereço
  rewrite ^/(.*)/$ /$1 permanent;
  # Redirectiona antigas requisições para wp-contents 
  rewrite ^/wp-content/.*/(.*)$ /$1/images/$2 permanent;

  ### Locations
  location ~* \.(js|css)$ { # Configurações para JavaScripts e CSS
  gzip_static on; # Compressão GZIP ativada
  expires 1w; # Browser cache de 1 semana
  }

  location ~* \.(jpg|jpeg|png|gif|ico)$ { # Configurações para imagens
  gzip_static on; # Compressão GZIP ativada
  expires 2w; # Browser cache de 2 semana
  }

  # pass the PHP scripts to FastCGI server listening on the php-fpm socket
  location ~ \.php$ {
  try_files $uri =404;
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;

  }

}
 

Crie um arquivo info.php no diretório root configurado 

< ?php
 phpinfo();
 ? >


Reinicie o serviço php5-fpm e Nginx 

# /etc/init.d/php5-fpm restart 
# /etc/init.d/nginx restart
 

Acesse no browser: http://IPSERVIDOR/info.php ou
https://IPSERVIDOR/info.php 

Feito!