Instalação e Configuração do Nginx com PHP-fpm + MySQL + OpenBSD
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 OpenBSD.
Vamos setar o endereço do nosso repositório
export PKG_PATH=ftp://openbsd.locaweb.com.br/pub/OpenBSD/5.1/packages/`machine -a`/
Agora vamos mandar instalar as bibliotecas do PHP e o MySQL e o Nginx
pkg_add -v php-fpm php-mysql-5.3.10 mysql-server
Agora vamos acertar o link da bibliotecas do PHP-MySQL
ln -fs /etc/php-5.3.sample/mysql.ini /etc/php-5.3/mysql.ini
Agora vamos mandar instalar os bancos padrões do MySQL
/usr/local/bin/mysql_install_db
Agora vamos mandar iniciar o MySQL
/etc/rc.d/mysqld start
Agora vamos setar uma senha para o root do MySQL
/usr/local/bin/mysqladmin -u root password 'senha'
Agora vamos mandar instalar o Nginx
pkg_add -v nginx-1.0.11
Agora vamos acertar a configuração do php-fpm.conf
vim /etc/php-fpm.conf [...] ;A linha abaixo precisamos comentar pois o nginx por padrão não trabalha em chroot ;chroot = /var/www ;Precisamos alterar o usuário e o grupo que vai executar o php-fpm user = _nginx group = _nginx ;as opções abaixo são para melhorar a performace do php com Nginx 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
Agora vamos mandar reiniciar o php-fpm
/etc/rc.d/php_fpm restart
Agora vamos fazer um backup do arquivo de configuração do nginx
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bkp
Agora vamos deixar o arquivo como abaixo
vim /etc/nginx/nginx.conf #/etc/nginx/nginx.conf user _nginx; 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/sites-enabled/*; }
Agora vamos criar dois diretórios para deixarmos mais organizada a configuração do Nginx
mkdir -p /etc/nginx/sites-enabled/ mkdir -p /etc/nginx/sites-available
Agora vamos criar um VirtualHost
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; } }
Agora precisamos criar a estrutura de diretórios para o nosso site
mkdir -p /var/www/www.douglasqsantos.com.br
Agora precisamos acertar as permissões do diretório
chown -R _nginx:_nginx /var/www/www.douglasqsantos.com.br
Agora vamos criar um arquivo para testarmos o php
echo "<?php phpinfo(); ?>" > /var/www/www.douglasqsantos.com.br/index.php
Agora vamos criar um arquivo para testarmos o php com o MySQL
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); ?>
Agora vamos ativar o nosso VirtualHost
ln -sf /etc/nginx/sites-available/www.douglasqsantos.com.br /etc/nginx/sites-enabled/www.douglasqsantos.com.br
Agora vamos reiniciar o Nginx para testar o php
/etc/rc.d/nginx restart
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
mkdir /etc/nginx/ssl
Agora vamos criar todas as chaves neste diretório
cd /etc/nginx/ssl
Gerando a key
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
Vamos gerar agora a requisição de assinatura para o certificado
openssl req -new -key server.key -out server.csr Enter pass phrase for server.key: senha 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]:BR State or Province Name (full name) [Some-State]:Parana Locality Name (eg, city) []:Curitiba Organization Name (eg, company) [Internet Widgits Pty Ltd]:Douglas Organizational Unit Name (eg, section) []:Douglas Common Name (eg, YOUR 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
Agora vamos auto assinar o nosso certificado
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
Agora vamos acertar as permissões das chaves
chmod 0400 server.* cp server.key server.key.orig
Agora vamos tirar a senha do certificado assinado para que o apache não fique pedindo senha a cada vez que for inicializar
openssl rsa -in server.key.orig -out server.key Enter pass phrase for server.key.orig: senha writing RSA key
Vamos acertar as permissões de todas as chaves
chmod 0400 /etc/nginx/ssl/*
Agora vamos ajustar o nosso virtualhost
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; } }
Agora precisamos mandar reiniciar o nginx
/etc/rc.d/nginx restart
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 deixar o nginx e o php_fpm na junto da inicialização do sistema
vim /etc/rc.conf [...] pkg_scripts="php_fpm nginx"
Agora se quiser reiniciar o servidor para testar ;)
shutdown -r now