miércoles, 6 de febrero de 2013

FreeBSD + nginx + php + ssl

Gehienetan web zerbitzari bat montatu behar dudanean Apache erabiltzen dut, batez ere erabiliena delako eta sarean dokumentazioa topatzea nahiko erraza baita. Dena den, batzutan beste arrazoiengatik, batez ere web zerbitzua emango duen makina nahiko zaharra denean beste zerbitzari bat erabiltzen dut, nginx.


Gidatxo honetan php eta ssl-rekin instalatuko dut, horren gainean beste zerbitzuak montatu ahal izateko…


Hasiko naiz, beraz, nginx instalatzen nire gustukoa den portmaster tresnarekin:


# portmaster -d /usr/ports/www/nginx

nginx port konfigurazioa agertuko zaigu modulu gehigarriak aukeratzeko, defektuzko konfigurazioa erabiliko dut, HTTP_SSL_MODULE gehituz (barruko zerbitzuetarako SSL erabiltzen dut beti). Dependentzietan defektuzko konfigurazioa erabiliko dut, eta ale, konpilatzera!


Nginx zerbitzarian PHP erabiliko dugu, beraz portu hau instalatuko behar:


# portmaster -d /usr/ports/lang/php5

php5 portu konfigurazioan FPM aukera markatu behar dugu, hori erabiliko baitugu nginx zerbitzarian, beste guztia defektuzko aukerekin.


Badaukagu beraz PHP eta nginx instalatuta, zerbitzuak rc.conf-era gehituko ditugu:


# echo 'php_fpm_enable="YES"' >> /etc/rc.conf
# echo 'nginx_enable="YES"' >> /etc/rc.conf

Honelako zerbitzari bat montatzean normalean VirtualHosts sortzen ditut, etorkizunean moldagarriago izateko, beraz direktorio estruktura sortuko dut honela:


# mkdir /usr/local/www/conf
# mkdir /usr/local/www/sites

conf azpidirektorioan gure webguneetako konfigurazioa jarriko dut, webgune bakoitzak bere konfigurazio artxiboa izanik. example.org webgunea sortuko dut orain:


# mkdir /usr/local/www/sites/example.org
# mkdir /usr/local/www/sites/example.org/data
# mkdir /usr/local/www/sites/example.org/logs
# mkdir /usr/local/www/sites/example.org/ssl

Data direktorioan gure webgunea izango dugu, logs eta ssl direktorioetan ba… azaldu behar da?


Gure webgunerako estruktura sortuta daukagu dagoeneko, webgune honek PHP erabiliko duenez, index.php artxibo bat sortuko dugu dena ondo dabilen ziurtatzeko:


# echo "<?php phpinfo(); ?>" > /usr/local/www/sites/example.org/data/index.php

Ondo, badaukagu gure webgunea, baina ez dugu oraindik nginx konfiguratu! Oraintxe egingo dugu. Horretarako /usr/local/etc/nginx/nginx.conf artxiboa editatuko dugu:




worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;
sendfile on;
keepalive_timeout 65;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 10;
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1M;
large_client_header_buffers 2 1k;
include /usr/local/www/conf/*.conf;
}



Azter dezagun zeintzuk diren direktiba garrantzitsuenak:


  • server_tokens off: Hau nginx-eko bertsioa ez argitaratzeko erabiltzen dugu.

  • ‘include /usr/local/www/conf/*.conf’ : Hemen izango ditugu gure Virtual Hosts-etako konfigurazioa.

Ondo, badaukagu gure nginx konfiguratuta, baina zerbait faltan daukagu, gure Virtual Host!!!


/usr/local/www/conf/example.org.conf
server {
listen 80;
server_name example.org www.example.org;
access_log /usr/local/www/sites/example.org/logs/access.log;
error_log /usr/local/www/sites/example.org/logs/error.log error;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
location / {
root /usr/local/www/sites/example.org/data;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php_fpm.sockets;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}



Orain zerbitzuak abiaraziko ditugu:


[root@nginxjail ~]# /usr/local/etc/rc.d/php-fpm start
[root@nginxjail ~]# /usr/local/etc/rc.d/nginx start

Badabil? :)


Baina… ez dugu esan ssl erabiliko dugula? Aurreko konfigurazioan ez da inon agertzen ssl-i buruzko ezer!


Aldaketa txiki batzuk egin behar dizkiogu konfigurazio horri:


/usr/local/www/conf/example.org.conf


server {
listen 80;
server_name example.org www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443;
server_name example.org www.example.org;
access_log /usr/local/www/sites/example.org/logs/access.log;
error_log /usr/local/www/sites/example.org/logs/error.log error;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
location / {
root /usr/local/www/sites/example.org/data;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php_fpm.sockets;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
ssl on;
ssl_certificate /usr/local/www/sites/example.org/ssl/server.crt;
ssl_certificate_key /usr/local/www/sites/example.org/ssl/server.key;
}


Aztertzen badugu konfigurazio artxibo berri hau, ikusiko dugu gure zerbitzariak 80 eta 443 ataketan entzuten duela. Rewrite horrekin 80 atakara heltzen diren eskaera guztiak berbideratuko ditugu 443 atakara, ssl behartuz… Aparte ssl modea aktibatu eta gure zertifikatuak azaldu behar ditugu.


Erraza, ezta? Ba…


# /usr/local/etc/rc.d/nginx restart

Orain bai! On egin!

No hay comentarios:

Publicar un comentario