Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalacao_e_configuracao_do_nginx_com_php-fpm_e_mysql_no_debian_wheezy_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Instalação e Configuração do Nginx com PHP-fpm + MySQL + Debian Wheezy ​ ======
  
 +
 +E ai galera, aqui eu vou abordar a instalação e configuração do Nginx com suporte ao PHP utilizando php-fpm e adicionando o suporte do MySQL ao php no Debian Squeeze.
 +
 +Prepare o seu sistema com o seguinte script http://​wiki.douglasqsantos.com.br/​doku.php/​confinicialwheezy_en para que não falte nenhum pacote ou configuração.
 +
 +Vamos mandar fazer um update dos repositórios e fazer um upgrade do sistema
 +<sxh bash>
 +aptitude update && aptitude dist-upgrade -y
 +</​sxh>​
 +
 +Agora vamos adicionar o repositório que contem o php5-fpm
 +<sxh bash>
 +echo "deb http://​packages.dotdeb.org stable all" >> /​etc/​apt/​sources.list
 +</​sxh>​
 +
 +Agora vamos obter e importar a chave GnuPG
 +<sxh bash>
 +wget http://​www.dotdeb.org/​dotdeb.gpg
 +cat dotdeb.gpg | sudo apt-key add -
 +rm dotdeb.gpg
 +</​sxh>​
 +
 +Agora vamos fazer um update dos repositórios
 +<sxh bash>
 +aptitude update
 +</​sxh>​
 +
 +Agora vamos mandar instalar as bibliotecas do PHP e o MySQL
 +<sxh bash>
 +aptitude install php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd mysql-server -y
 +</​sxh>​
 +
 +Aqui vamos ser questionados sobre a senha do MySQL então informe ela e confirme
 +
 +Agora vamos mandar instalar o Nginx
 +<sxh bash>
 +aptitude install nginx -y
 +</​sxh>​
 +
 +Agora vamos criar o arquivo de controle do php-fpm
 +<sxh bash>
 +vim  /​etc/​php5/​fpm/​php-fpm.conf
 +pm.max_children = 25
 +pm.start_servers = 4
 +pm.min_spare_servers = 2
 +pm.max_spare_servers = 10
 +pm.max_requests = 500
 +request_terminate_timeout = 30s
 +</​sxh>​
 +
 +Agora vamos ajustar o arquivo para utilizar um socket tcp, vamos trocar a configuração do sock para o socket tcp, aqui ele vai escutar somente em localhost.
 +<sxh bash>
 +vi /​etc/​php5/​fpm/​pool.d/​www.conf
 +[...]
 +;listen = /​var/​run/​php5-fpm.sock #linha 33 do arquivo
 +listen = 127.0.0.1:​9000
 +[...]
 +</​sxh>​
 +
 +Agora vamos mandar reiniciar o php-fpm
 +<sxh bash>
 +/​etc/​init.d/​php5-fpm restart
 +</​sxh>​
 +
 +Agora vamos verificar se a porta 9000 está escutando
 +<sxh bash>
 +netstat -tulanp | egrep 9000
 +tcp        0      0 127.0.0.1:​9000 ​         0.0.0.0:​* ​              ​OUÇA ​      ​8476/​php-fpm.conf)
 +</​sxh>​
 +
 +Está ok a porta.
 +
 +Agora vamos fazer um backup do arquivo de configuração do nginx
 +<sxh bash>
 +cp /​etc/​nginx/​nginx.conf /​etc/​nginx/​nginx.conf.bkp
 +</​sxh>​
 +
 +Agora vamos deixar o arquivo como abaixo
 +<sxh nginx>
 +vim /​etc/​nginx/​nginx.conf
 +#/​etc/​nginx/​nginx.conf
 +user www-data;
 +
 +worker_processes 4;
 +
 +events {
 +        worker_connections 768;
 +        # multi_accept on;
 +}
 +
 +http {
 +
 +        ##
 +        # Basic Settings
 +        ##
 +
 +        sendfile on;
 +        tcp_nopush on;
 +        tcp_nodelay on;
 +        keepalive_timeout 65;
 +        types_hash_max_size 2048;
 +        client_max_body_size 20M;
 +        client_body_buffer_size 128k;
 +        server_tokens off;
 +
 +        # server_names_hash_bucket_size 64;
 +        # server_name_in_redirect off;
 +
 +        include /​etc/​nginx/​mime.types;​
 +        default_type application/​octet-stream;​
 +
 +        ##
 +        # Logging Settings
 +        ##
 +
 +        access_log /​var/​log/​nginx/​access.log;​
 +        error_log /​var/​log/​nginx/​error.log;​
 +
 +        ##
 +        # Gzip Settings
 +        ##
 +
 +        gzip on;
 +        gzip_disable "​msie6";​
 +
 +        gzip_vary on;
 +        gzip_proxied any;
 +        gzip_comp_level 6;
 +        gzip_buffers 16 8k;
 +        gzip_http_version 1.1;
 +        gzip_types text/plain text/css application/​json application/​x-javascript text/xml application/​xml application/​xml+rss text/​javascript;​
 +
 +
 +        ##
 +        # Virtual Host Configs
 +        ##
 +        include /​etc/​nginx/​conf.d/​*.conf;​
 +        include /​etc/​nginx/​sites-enabled/​*;​
 +}
 +</​sxh>​
 +
 +Agora vamos mandar desabilitar o site default do Nginx
 +<sxh bash>
 +ngxdissite default
 +</​sxh>​
 +
 +Agora vamos criar um VirtualHost ​
 +<sxh nginx>
 +vim /​etc/​nginx/​sites-available/​www.douglasqsantos.com.br
 +server {
 +                #Qual porta o Nginx vai escutar ​
 +                listen 80;
 +                #Name Server ​
 +                server_name douglasqsantos.com.br www.douglasqsantos.com.br;​
 +                #Controle dos logs
 +                access_log /​var/​log/​nginx/​www.douglasqsantos.com.br.access_log;​
 +                error_log /​var/​log/​nginx/​www.douglasqsantos.com.br.error_log;​
 +                #Document Root do site
 +                root /​var/​www/​www.douglasqsantos.com.br;​
 +                #Arquivos que vão ser utilizamos como indexes
 +                index index.php index.htm index.html;
 +                #Em caso de encontrar arquivos php como eles devem ser tratados
 +                location ~ .php$ {
 +                  fastcgi_pass ​  ​127.0.0.1:​9000;​
 +                  fastcgi_index ​ index.php;
 +                  fastcgi_param ​ SCRIPT_FILENAME /​var/​www/​www.douglasqsantos.com.br$fastcgi_script_name;​
 +                  include fastcgi_params;​
 +                }
 +       }
 +</​sxh>​
 +
 +
 +Agora precisamos criar a estrutura de diretórios para o nosso site
 +<sxh bash>
 +mkdir -p /​var/​www/​www.douglasqsantos.com.br
 +</​sxh>​
 +
 +Agora precisamos acertar as permissões do diretório
 +<sxh bash>
 +chown -R www-data:​www-data /var/www
 +</​sxh>​
 +
 +Agora vamos criar um arquivo para testarmos o php
 +<sxh bash>
 +echo "<?​php phpinfo(); ?>" > /​var/​www/​www.douglasqsantos.com.br/​index.php
 +</​sxh>​
 +
 +Agora vamos criar um arquivo para testarmos o php com o MySQL
 +<sxh php>
 +vim /​var/​www/​www.douglasqsantos.com.br/​mysql.php
 +<?php
 +$link = mysql_connect('​localhost',​ '​root',​ '​senha'​);​
 +if (!$link) {
 +    die('​Could not connect: ' . mysql_error());​
 +}
 +echo '​Connected successfully';​
 +mysql_close($link);​
 +?>
 +</​sxh>​
 +
 +Agora vamos ativar o nosso VirtualHost
 +<sxh bash>
 +ngxensite www.douglasqsantos.com.br
 +Site www.douglasqsantos.com.br installed; run invoke-rc.d nginx reload to enable.
 +</​sxh>​
 +
 +Agora vamos reiniciar o Nginx para testar o php
 +<sxh bash>
 +/​etc/​init.d/​nginx restart
 +</​sxh>​
 +
 +Agora já podemos testar o PHP http://​www.douglasqsantos.com.br/​ ou http://​ip_servidor/​ caso não tenha configurado o DNS
 +
 +Agora já podemos testar o PHP com MySQL http://​www.douglasqsantos.com.br/​mysql.php ou http://​ip_servidor/​mysql.php caso não tenha configurado o DNS
 +
 +Agora vamos ver como habilitamos o https
 +
 +Vamos criar o diretório para armazenar os nossos certificados
 +<sxh bash>
 +mkdir /​etc/​nginx/​ssl
 +</​sxh>​
 +
 +Agora vamos criar todas as chaves neste diretório
 +<sxh bash>
 +cd /​etc/​nginx/​ssl
 +</​sxh>​
 +
 +Gerando a key
 +<sxh bash>
 +openssl genrsa -des3 -out server.key 1024
 +Generating RSA private key, 1024 bit long modulus
 +..............................++++++
 +.++++++
 +e is 65537 (0x10001)
 +Enter pass phrase for server.key: #senha
 +Verifying - Enter pass phrase for server.key: #senha
 +</​sxh>​
 +
 +Vamos gerar agora a requisição de assinatura para o certificado
 +<sxh bash>
 +openssl req -new -key server.key -out server.csr
 +Enter pass phrase for server.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) []:BR
 +State or Province Name (full name) []:Parana
 +Locality Name (eg, city) []:Curitiba
 +Organization Name (eg, company) []:Douglas
 +Organizational Unit Name (eg, section) []:IT
 +Common Name (eg, fully qualified host name) []:​www.douglasqsantos.com.br
 +Email Address []:​douglas.q.santos@gmail.com
 +
 +Please enter the following '​extra'​ attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:Douglas
 +</​sxh>​
 +
 +Agora vamos acertar as permissões das chaves
 +<sxh bash>
 +chmod 0400 server.*
 +cp server.key server.key.orig
 +</​sxh>​
 +
 +Agora vamos auto assinar o nosso certificado
 +<sxh bash>
 +openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
 +Signature ok
 +subject=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=Douglas/​CN=www.douglasqsantos.com.br/​emailAddress=douglas.q.santos@gmail.com
 +Getting Private key
 +Enter pass phrase for server.key: senha
 +</​sxh>​
 +
 +Agora vamos tirar a senha do certificado assinado para que o apache não fique pedindo senha a cada vez que for inicializar
 +<sxh bash>
 +openssl rsa -in server.key.orig -out server.key
 +Enter pass phrase for server.key.orig:​ senha
 +writing RSA key
 +</​sxh>​
 +
 +Vamos acertar as permissões de todas as chaves ​
 +<sxh bash>
 +chmod 0400 /​etc/​nginx/​ssl/​* ​
 +</​sxh>​
 +
 +Agora vamos ajustar o nosso virtualhost
 +<sxh nginx>
 +vim /​etc/​nginx/​sites-available/​www.douglasqsantos.com.br
 +server {
 +                #Qual porta o Nginx vai escutar ​
 +                listen 80;
 +                #Name Server ​
 +                server_name douglasqsantos.com.br www.douglasqsantos.com.br;​
 +                #Controle dos logs
 +                access_log /​var/​log/​nginx/​www.douglasqsantos.com.br.access_log;​
 +                error_log /​var/​log/​nginx/​www.douglasqsantos.com.br.error_log;​
 +                #Document Root do site
 +                root /​var/​www/​www.douglasqsantos.com.br;​
 +                #Arquivos que vão ser utilizamos como indexes
 +                index index.php index.htm index.html;
 +                #Em caso de encontrar arquivos php como eles devem ser tratados
 +                location ~ .php$ {
 +                  fastcgi_pass ​  ​127.0.0.1:​9000;​
 +                  fastcgi_index ​ index.php;
 +                  fastcgi_param ​ SCRIPT_FILENAME /​var/​www/​www.douglasqsantos.com.br$fastcgi_script_name;​
 +                  include fastcgi_params;​
 +                }
 +       }
 + 
 +server {
 +                #Qual porta o Nginx vai escutar ​
 +                listen 443;
 +                #​Habilitando o ssl
 +                ssl on;
 +                #Definindo a localização dos certificados
 +                ssl_certificate /​etc/​nginx/​ssl/​server.crt;​
 +                ssl_certificate_key /​etc/​nginx/​ssl/​server.key;​
 +                #Name Server ​
 +                server_name douglasqsantos.com.br www.douglasqsantos.com.br;​
 +                #Controle dos logs
 +                access_log /​var/​log/​nginx/​www.douglasqsantos.com.br-ssl.access_log;​
 +                error_log /​var/​log/​nginx/​www.douglasqsantos.com.br-ssl.error_log;​
 +                #Document Root do site
 +                root /​var/​www/​www.douglasqsantos.com.br;​
 +                #Arquivos que vão ser utilizamos como indexes
 +                index index.php index.htm index.html;
 +                #Em caso de encontrar arquivos php como eles devem ser tratados
 +                location ~ .php$ {
 +                  fastcgi_pass ​  ​127.0.0.1:​9000;​
 +                  fastcgi_index ​ index.php;
 +                  fastcgi_param ​ SCRIPT_FILENAME /​var/​www/​www.douglasqsantos.com.br$fastcgi_script_name;​
 +                  include fastcgi_params;​
 +                }
 +       }
 +</​sxh>​
 +
 +Agora precisamos mandar reiniciar o nginx
 +<sxh bash>
 +/​etc/​init.d/​nginx restart
 +</​sxh>​
 +
 +Agora já podemos testar o PHP https://​www.douglasqsantos.com.br/​ ou https://​ip_servidor/​ caso não tenha configurado o DNS
 +
 +Agora já podemos testar o PHP com MySQL https://​www.douglasqsantos.com.br/​mysql.php ou https://​ip_servidor/​mysql.php caso não tenha configurado o DNS
 +
 +Agora vamos habilitar a visualizaçao de status do php-fpm
 +
 +<sxh bash>
 +sed -i '​s/;​pm.status_path/​pm.status_path/​g'​ /​etc/​php5/​fpm/​pool.d/​www.conf
 +</​sxh>​
 +
 +Agora vamos precisar adicionar um bloco na configuração do nosso VirtualHost
 +<sxh nginx>
 +vim /​etc/​nginx/​sites-available/​www.douglasqsantos.com.br
 +server {
 +                #Qual porta o Nginx vai escutar
 +                listen 80;
 +                #Name Server
 +                server_name douglasqsantos.com.br www.douglasqsantos.com.br;​
 +                #Controle dos logs
 +                access_log /​var/​log/​nginx/​www.douglasqsantos.com.br.access_log;​
 +                error_log /​var/​log/​nginx/​www.douglasqsantos.com.br.error_log;​
 +                #Document Root do site
 +                root /​var/​www/​www.douglasqsantos.com.br;​
 +                #Arquivos que vão ser utilizamos como indexes
 +                index index.php index.htm index.html;
 +                #Em caso de encontrar arquivos php como eles devem ser tratados
 +                location ~ .php$ {
 +                  fastcgi_pass ​  ​127.0.0.1:​9000;​
 +                  fastcgi_index ​ index.php;
 +                  fastcgi_param ​ SCRIPT_FILENAME /​var/​www/​www.douglasqsantos.com.br$fastcgi_script_name;​
 +                  include fastcgi_params;​
 +                }
 +                #Acesso a página de status
 +                location ~ ^/​(status|ping)$ {
 +                     ​access_log off;
 +                     allow 127.0.0.1;
 +                     allow 192.168.1.0/​24;​
 +                     deny all;
 +                     ​include fastcgi_params;​
 +                     ​fastcgi_pass 127.0.0.1:​9000;​
 +                }
 +       }
 +</​sxh>​
 +
 +Note que temos o bloco location ~ ^/​(status|ping)$ { aqui estamos habilitando a visualização da página de status e note que temos os allow ali libere somente quem vai precisar de acesso eu liberei para a minha LAN 192.168.1.0/​24
 +
 +Agora vamos reiniciar o php-fpm ​
 +<sxh bash>
 +/​etc/​init.d/​php5-fpm restart
 +</​sxh>​
 +
 +Agora vamos reiniciar o nginx para ele recarregar a nova configuração
 +<sxh bash>
 +/​etc/​init.d/​nginx restart
 +</​sxh>​
 +
 +Agora podemos acessar:
 +  * http://​www.douglasqsantos.com.br/​status para obter o status simples
 +  * http://​www.douglasqsantos.com.br/​status?​json para obter o status simples no formato json
 +  * http://​www.douglasqsantos.com.br/​status?​html para obter o status simples no formato html
 +  * http://​www.douglasqsantos.com.br/​status?​xml para obter o status simples no formato xml
 +  * http://​www.douglasqsantos.com.br/​status?​full para obter informações mais detalhadas
 +  * http://​www.douglasqsantos.com.br/​status?​json&​full para obter informações mais detalhadas no formato json
 +  * http://​www.douglasqsantos.com.br/​status?​html&​full para obter informações mais detalhadas no formato html
 +  * http://​www.douglasqsantos.com.br/​status?​jxml&​full para obter informações mais detalhadas no formato xml
 +
 +====== Referências ======
 +
 +  - http://​nginx.org/​
 +  - http://​wiki.nginx.org/​Main
 +  - http://​wiki.nginx.org/​Install
 +  - http://​wiki.nginx.org/​Configuration
 +  - http://​kbeezie.com/​view/​nginx-configuration-examples/​
 +  - http://​rtcamp.com/​tutorials/​php/​fpm-status-page/​