
Instalación de nginx
Liviano, rápido para servir contenido estático, escuché que hace buena mancuerna con unicorn.
Aquí la guía para instalar nginx en Ubuntu:
sudo apt-get install python-software-properties
nginx=development # usa nginx=stable para la versión estable
sudo add-apt-repository ppa:nginx/$nginx
sudo apt-get update
sudo apt-get install nginx |
Al momento de escribir este artículo nginx -v reporta:
nginx version: nginx/1.3.6 |
Inicia el servidor
Ahora en tu navegador ve hacia: http://localhost
Deberías ver algo como esto:
Welcome to nginx!
En caso de error
Si en lugar de eso te aparece esto:
500 Internal Server Error
Y el último error en /var/log/nginx/error.log dice algo como:
2012/10/04 03:11:02 [error] 21661#0: *2 rewrite or internal redirection cycle while internally redirecting to “/index.html”, client: 127.0.0.1, server: localhost, request: “GET /favicon.ico HTTP/1.1″, host: “localhost”
Es posible que se deba a un errorcito que viene en la instalación por defecto de nginx.
Pero es fácil de corregir con esto:
sudo ln -s /usr/share/nginx/html /usr/share/nginx/www |
El problema es que /usr/share/nginx/www no existe, más bien se llama /usr/share/nginx/html
Pero el archivo /etc/nginx/sites-available/default menciona que el root de nuestros documentos está en:
root /usr/share/nginx/www; |
La otra forma de solucionarlo es modificar el archivo de configuración /etc/nginx/sites-available/default y cambiar la propiedad root y hacer que apunte hacia /usr/share/nginx/html, si haces esto, recuerda reiniciar el servicio.
Siguiente, MySQL.
Instalación de MySQL
sudo apt-get install mysql-server mysql-client libmysqlclient-dev |
Prueba si todo funciona bien:
Donde xxx es la contraseña que especificaste durante la instalación de MySQL.
Para cambiar la contraseña de la cuenta root, ejecuta el siguiente comando después de ingresar a MySQL:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yyy'); |
Sustituye yyy por la nueva contraseña.
Si en algún momento necesitas
resetear la contraseña del
root del
servidor MySQL, ejecuta el siguiente comando:
sudo dpkg-reconfigure mysql-server-5.5 |
Puede que la versión cambie, si es así, puedes ver información sobre el paquete mysql-server con:
Mejorando la seguridad
Ejecuta el siguiente comando y contesta sí a todas las preguntas:
mysql_secure_installation |
Listo, vamos por PHP.
Instalación de PHP
No, no soy un hereje abandonando mi preciado Ruby, pero necesito PHP para algunos sitios que utilizan WordPress y los foros de Simple Machines.
Así que, si hay que instalar PHP, hay que hacerlo con lo mejor: PHP-FPM
Sin más, dale:
sudo apt-get install php5-fpm |
Establece algunos valores sanos para nginx en:
sudo nano /etc/nginx/nginx.conf |
Y cambia:
Por:
Esto le indica a nginx que corte cualquier petición hecha por algún cliente que dilate más de 5 segundos.
Configura nginx para que pueda servir archivos .php, modifica:
sudo nano /etc/nginx/sites-available/default |
Y asegúrate de que estas líneas se vean así:
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
try_files $uri =404;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /.ht {
deny all;
} |
Reinicia nginx para que los cambios en la configuración surtan efecto:
sudo service nginx restart |
Lectura recomendada: Nginx Pitfalls
Mejorando la seguridad
Para instalar el paquete php5-suhosin, el cual provee seguridad adicional para las aplicaciones PHP 5, ejecuta el siguiente comando:
apt-get install php5-suhosin |
Reinicia php-fpm con:
sudo service php5-fpm restart |
Enseguida elimina un hueco de seguridad que se presenta en la configuración por defecto de nginx con php, sólo necesitas modificar una línea en php.ini:
sudo nano /etc/php5/fpm/php.ini |
Aségurate de quitar el punto y coma del frente de la línea y cambiar el 1 por un 0, de tal manera que luzca así (el número de línea es 854 aprox):
Comunicación por medio de un socket UNIX
Para indicarle a php-fpm que escuche en un socket UNIX en lugar de uno TCP, modifica:
sudo nano /etc/php5/fpm/pool.d/www.conf |
Y asegúrate de que aparezcan las siguientes líneas (en este caso, el punto y coma se utiliza para comentar):
;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock
...
listen.owner = www-data
listen.group = www-data
listen.mode = 0666 |
Reinicia php-fpm con:
sudo service php5-fpm restart |
Ahora, para probar que PHP está funcionando perfectamente a través de nginx, crea un archivo de ejemplo:
sudo nano /usr/share/nginx/html/info.php |
Y ponle este contenido:
1
2
3
| <!--?php
phpinfo();
?--> |
Guarda el archivo y en tu navegador ve a: http://localhost/info.php
Debes ver una página con información sobre PHP.
Instala soporte para MySQL
sudo apt-get install php5-mysql |
Reinicia php-fpm:
sudo service php5-fpm restart |
Instala Xcache
Xcache cachea y optimiza código PHP intermedio. En pocas palabras es bueno para tu servidor, ya que acelera la generación de tus páginas PHP.
sudo apt-get install php5-xcache |
Reinicia php-fpm:
sudo service php5-fpm restart |
Más extensiones para PHP
Puedes encontrar más extensiones listas para instalar con el comando:
Ejemplos:
php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl |
Permitir uploads de archivos grandes
A veces requieres subir archivos grandes a tu sitio, ya sea para importar algún respaldo, video, audio, etc. Desgraciadamente la configuración que trae por defecto nginx y PHP sólo permite recibir cómo máximo archivos de 1MB y 2MB respectivamente.
A continuación se muestra como incrementar este límite.
Del lado de nginx
sudo nano /etc/nginx/nginx.conf |
Dentro de la sección http ingresa el client_max_body_size deseado:
http {
...
client_max_body_size 8m;
... |
Reinicia nginx:
sudo service nginx restart |
Del lado de PHP
sudo nano /etc/php5/fpm/php.ini |
Estas son las líneas que te interesan:
post_max_size = 8M
...
upload_max_filesize = 8M |
Reinicia php-fpm:
sudo service php5-fpm restart |
¡Listo!
Referencias
Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support (LEMP) On Ubuntu 12.04 LTS
Setting up nginx maximum upload size