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/

Groso flaco. Actualiza el link de Codex:
http://codex.wordpress.org/Administration_Over_SSL (esta 2 veces en el url)
Corregido!
Gracias..