Archive for the ‘Nginx’ Category.

Tips: Friendly urls en WordPress +nginx

Como un simple ayudamemoria, la configuración que estoy utilizando en mi wordpress + nginx es la siguiente.
En vez de las urls por defecto que utiliza WordPress ej: http://ngen.com.ar/blog/?p=23 podemos utilizar las mas utilizadas hoy en dia con el nombre completo del post en la url.

Para eso deben activar dentro del panel de WordPress en la sección “Permalinks” utilizo la variable /%postname%.

Sólo queda modificar el VirtualHost del nginx para que funcione.
Reiniciar nginx y verificar que los posts ahora se navegan desde urls que incluyen el nombre del post.

1
2
3
4
5
6
7
8
        location /blog {
                root   /var/www/ngen.com.ar;
                index  index.php;
                if (!-e $request_filename) {
                       rewrite ^/(.*)$ /blog/index.php?q=$1 last;
                       break;
                       }
                }
        location /blog {
                root   /var/www/ngen.com.ar;
                index  index.php;
                if (!-e $request_filename) {
                       rewrite ^/(.*)$ /blog/index.php?q=$1 last;
                       break;
                       }
                }

WordPress: wp-admin sobre https + nginx

Es importante poder acceder al administrador de wordpress mediante https, nos garantiza que cuando hacemos login nuestro user & pass no van en texto plano hasta el servidor.

En mi blog, que utilizo wordpress + nginx y debo asegurarme que todo funcione perfectemente; Desde la versión 3.x de Wordpres ha cambiado el método a utilizar, a pesar de que aún la documentación oficial [0] es vieja y no tiene aplicación hoy en dia, les daré algunos tips para poder publicar el /wp-admin sobre ssl y con nginx como webserver.

wp-includes/default-constants.php
El archivo implicado, en mi caso el path es: /var/www/ngen.com.ar/blog/wp-includes/default-constants.php donde deben buscar el valor define(‘FORCE_SSL_ADMIN’, false); y cambiarlo a true.

1
2
3
        if ( !defined('FORCE_SSL_ADMIN') )
                define('FORCE_SSL_ADMIN', true);
        force_ssl_admin(FORCE_SSL_ADMIN);
        if ( !defined('FORCE_SSL_ADMIN') )
                define('FORCE_SSL_ADMIN', true);
        force_ssl_admin(FORCE_SSL_ADMIN);

Importante!
Cada vez que actualizen WordPress desde el dashboard este archivo se sobreescribe con la configuración por defecto que es “false”, asi que deben volver a editarlo y cambiar el valor para aplicar nuevamente los cambios.


Configuración nginx

No voy a explicar aqui cómo es la configuración global de nginx y dado que publico mi blog como /blog en nginx la configuración es asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        location /blog {
                root   /var/www/ngen.com.ar;
                index   index.php;
                }
 
        access_log  /var/log/nginx/blog.access.log;
        error_log      /var/log/nginx/blog.error.log;
 
        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/ngen.com.ar/blog$fastcgi_script_name;
                include        fastcgi_params;
                }
 
        # rewrite wp-admin to https
        location ~ wp-login.php$ {
                rewrite ^/wp-login.php(.*)$ https://$host/$1 last;
                }
        location /blog {
                root   /var/www/ngen.com.ar;
                index   index.php;
                }

        access_log  /var/log/nginx/blog.access.log;
        error_log      /var/log/nginx/blog.error.log;

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/ngen.com.ar/blog$fastcgi_script_name;
                include        fastcgi_params;
                }

        # rewrite wp-admin to https
        location ~ wp-login.php$ {
                rewrite ^/wp-login.php(.*)$ https://$host/$1 last;
                }

No tiene nada fuera de lo común, salvo las lineas donde especifico con rewrite que todo lo que sea ^/wp-login.php lo envié al mismo host pero bajo https.

Tambien debemos configurar el mismo virtualhost en nignx pero con el puerto 443 que en este caso los datos incorporan mas información.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        ssl  on;
        ssl_certificate         /etc/nginx/ssl/server.crt;
        ssl_certificate_key     /etc/nginx/ssl/server.key;
 
        access_log      /var/log/nginx/wp-admin.access.log;
        error_log      /var/log/nginx/wp.admin.error.log;
 
        location /blog {
                alias   /var/www/ngen.com.ar/blog;
                index  index.php;
                }
 
        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/ngen.com.ar/blog$fastcgi_script_name;
                include        fastcgi_params;
                }
        ssl  on;
        ssl_certificate         /etc/nginx/ssl/server.crt;
        ssl_certificate_key     /etc/nginx/ssl/server.key;

        access_log      /var/log/nginx/wp-admin.access.log;
        error_log      /var/log/nginx/wp.admin.error.log;

        location /blog {
                alias   /var/www/ngen.com.ar/blog;
                index  index.php;
                }

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/ngen.com.ar/blog$fastcgi_script_name;
                include        fastcgi_params;
                }

Eso es todo, desde ahora cada vez que quiero acceder al admin del wordpress desde http://ngen.com.ar/blog/wp-admin me redirecciona automáticamente hacia https://ngen.com.ar/blog/wp-admin/

[0] http://codex.wordpress.org/Administration_Over_SSL

Nginx: nginx + PHP-FastCGI en Debian Lenny

Todo sysadmin que comienza a trabajar con nginx tiene como primera duda y consiguiente tarea, dar soporte a sitios publicados con php.
Una característica importante en el diseño de nginx es la seguridad, razón por la cual no tiene soporte nativo para cgi, sea del lenguaje que sea (perl, php, python, etc).
Es alli donde entran en combinación soluciones externas para esta tarea, la mas utilizada es spawn-fcgi que es un desarrollo de la misma gente que hace lighttpd.

Al realizar la búsqueda para realizar lo que necesitamos, tenemos muchas probabilidades de llegar a la documentación de Linode (conocido proveedor de VPS) para ser mas exactos a este link:
http://library.linode.com/web-servers/nginx/php-fastcgi/debian-5-lenny

Continue reading ‘Nginx: nginx + PHP-FastCGI en Debian Lenny’ »