Dejar Hotlink a Minituras – Thumbnails – Nginx y Apache

Protección hotlink

He estado migrando unos servidores con imágenes y pasando el servidor web de apache a NGINX y así queda la parte de hotlink:

En Apache:

RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !_thumb
RewriteCond %{HTTP_REFERER} !^http://(www\.)?skamasle.com(/)?.*$ [NC]
RewriteRule \.(jpg|jpeg|gif|png|bmp|ico)$ url-imagen.jpg [NC,R,L]

Lo mismo pero en NGINX:

#Dejamos los thumbs
location ~* (.*)(_thumb)\.(gif|txt|json|jpg|png|bmp|swf|css|js|swf|pdf|ico)$ {
expires max;
access_log off;
root /dir;
}

# Bloqueamos lo demás, estees el mismo código hotlink si quieren bloquear todo el hotlink copien de aquí hacia abajo
location ~* \.(gif|jpg|png|bmp|swf|css|js|swf|json|pdf|ico|txt)$ {
valid_referers none blocked server_names ~(skamasle.com|www.skamasle.com);
if ($invalid_referer) {
# return 403;
rewrite (.*)\.(jpg|jpeg|png|gif)$ imagen.jpg last;
}
access_log off;
expires max;
root /dir;
}

Como dice el comentario de NGINX si no tienen pensado dejar copiar ninguna imagen pueden copiar del comentario hacia abajo y les servirá para prevenir todo el hotlink.

Centos Error en EasyApache (cPanel) The server’s system package manager, ‘YUM’, failed

Aveces no va el easyapache en cpanel aunque no es justamente un fallo del cpanel, a veces falla el YUM y easy apache nos lo dice:

The server’s system package manager, ‘YUM’, failed

This is the command that failed:
yum -y install gettext automake19 libstdc++.x86_64 libpng-devel openssl libpng-dev zlib-devel autoconf261 libidn-devel gmake libidn libXpm openssl-devel automake coreutils patch libltdl3-devel libltdl libopenssl0.9.7-static-devel libtool-ltdl-devel libXpm-devel sed libXpm-dev lsof krb5-dev flex glibc-dev expat-dev krb5-devel libstdc++-devel.x64_64 xorg-x11-devel libtool-ltdl libssl-dev pam-devel libopenssl0-devel zlib1-devel expat-devel libopenssl0-dev glibc-devel expat gcc-c++ zlib bison libjpeg-devel libtool-libltdl-devel libtool openssl-dev libopenssl0 libz-devel libjpeg-dev pam-dev fileutils libltdl-devel libopenssl0.9.7-devel e2fsprogs-devel ca_root_nss make libstdc++-dev.x86_64 libX11-devel libstdc++-devel.x86_64 gd cpp xorg-x11-dev gcc ssl-dev autoconf lex
!!
!!
Since EasyApache was unable to resolve it automatically you should:
1) Manually run the failed YUM command (shown above) via SSH
2) See if your particular error is addressed at http://go.cpanel.net/eaerror
3) Resolve the YUM problem manually
4) Re-run EasyApache
!!
!! Please visit http://go.cpanel.net/eaerror for help with this error. !!

!! Restoring original working apache !!

Si intetamos ejecutar el comando anualmente o solo actualizar nos da otro error con más pistas:

yum update

rpmdb: Thread/process 8065/140191218157312 failed: Thread died in Berkeley DB library
error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 – (-30974)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

Error: rpmdb open failed

Por lo que dice el error hay problemas en la base de datos y no puede sacar la lista de paquetes, la solución borrar la base de datos.

Ejecutamos:

rm /var/lib/rpm/__db*

COn ese comando nos pedira confirmación para el borrado, con este otro NO:

rm -f /var/lib/rpm/__db.[0-9][0-9]*

Pero bueno cada quien lo borra como quiera, al de arriba le añadimos la opción -f y será lo mismo.

Y eso es todo, problema solucionado ya el YUM funciona y el EasyApache también.

Plesk, Cambiar el Servidor de Correo qMail por Postfix

Qmail da algunos problemas, muchas veces con ipv6 entre otros.

Así que aquí dejo la nota para cambiar el servidor de correo:

Instalar postfx en plesk

/usr/local/psa/admin/sbin/autoinstaller –select-release-current –install-component postfix

Instalar qmail en plesk

/usr/local/psa/admin/sbin/autoinstaller –select-release-current –install-component qmail

Eso es todo, el comando queda como referencia para instalar otros componentes, nginx, sistema de backups etc.

No hace falta desinstalar el servidor anterior, solo instalar el nuevo y plesk se encarga de quitar el otro.

Más info aquí:

http://kb.parallels.com/es/5801

vBulletin Pagina en Blanco al Cambiar Opciones en Admincp

Estos días alistamos un servidor con nginx, memcached y xcache para vbulletin, luego de pruebas todo funcionaba menos el admincp, o sea el panel de admin vbulletin, que en principio funcionaba pero al guardar las opciones daba un error 500 o página en blanco.

Pensamos que era el nginx, luego de muchas pruebas puse apache y tenia el mismo error, al final descartamos el servidor, la solución fue sencilla, era un plugin :/

vbulletin página en blanco

Añadimos esta linea al config.php

define(‘DISABLE_HOOKS’, true);

COn eso se deshabilitan los plugins, si el error desaparece fue culpa de un plugin, si no, es otra cosa y a seguir buscando.

Si fuera algún plugin tenemos que deshabilitarlos todos y luego tenemos que ir activan dolos uno por uno.

Las páginas en blanco la mayoría de las veces son provocadas por algún plugin, si no puede ser el tiempo de conexión a la base de datos y también que el servidor se quede sin RAM, / memory_limit de php, aunque estos errores aparecen normalmente en el error log, en cambio el de este plugin no, así que nos costo más encontrarlo.

Por otro lado, si no les sirve la solución pueden ver este enlace de la web de vbulletin, que da más soluciones al problema:

http://www.vbulletin.com/docs/html/blank_pages

URLS Amigables de WordPress con NGINX

Solo hay que añadir este código al VHOST:

URLS Amigables con NGINX

location / {
try_files $uri $uri/ /index.php?$args;
}

Si WordPress esta en un subdirectorio basta con añadir el subdirectorio al index.php: ej:

location / {
try_files $uri $uri/ /blog/index.php?$args;
}

También podemos usar este si tenemos problemas con el wp-admin.

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires max;
log_not_found off;
}

Estos dos códigos se pueden usar en ISPCONFIG ( por eso los dejo por aquí para tenerlos a mano )

Si usamos ISPCONFIG corriendo bajo debian tenemos que añadirlos en la sección de opciones del dominio, en NGINX settings y con eso tendremos las pretty urls o urls amigables.

Edito

Nginx WordPress not Found

Algunas veces he visto que no funciona este método con un not found, así que aquí una variante:

try_files $uri $uri/ /index.php?q=$uri&$args; 

VbSEO con NGINX

Las reglas de reescritura de VBSEO para nginx o en ingles rewrite rules, aquí las dejo:

Vbseo con NGINX

location /forums/ {

rewrite ^/forums/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ /forums/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;

if ($request_filename ~ «\.php$» ) {
rewrite ^(.*)$ /forums/vbseo.php last;
}

if (!-e $request_filename) {
rewrite ^/forums/(.*)$ /forums/vbseo.php last;
}

}

Gracias a Oleg Ignatiuk de vbseo.com las vi hace tiempo en un post suyo y quedaron en mis apuntes.

Nginx y PHP con Usuarios, Grupos y configuración individual: /etc/php5/fpm/pool.d

Un ejemplo de lo que puede ir en /etc/php5/fpm/pool.d/sitioweb con nginx y PHP, con esto podemos usar usuarios y grupos, mayor seguridad y rendimiento, también podemos definir la cantidad de procesos de PHP y todas las opciones de php-fpm

[web1]

listen = 127.0.0.1:9020
listen.allowed_clients = 127.0.0.1

user = skamasle
group = skamasle

pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0

chdir = /

php_admin_value[open_basedir] = /aquí lo suyo
php_admin_value[session.save_path] = /aquí alguna ruta para el tmp, normalmente /tpm pero si queremos otra la ponemos
php_admin_value[upload_tmp_dir] = /mas de lo mismo si queremos otro upload dir lo ponemos aqui

NOTA:

Podemos usar sockets, yo prefiero los sockets y siempre los uso, pero la gente usa puerto, en ese caso ponemos un puerto distinto para cada web:

listen = 127.0.0.1:9020
listen = 127.0.0.1:9030
etc

El puerto tiene que coincidir en el vhost y el socket también ( si lo usaramos;

location @php {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9020;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Si usamos socket queda algo así:

[web1]

listen = /var/lib/php5-fpm/web1.sock <- UN socket para cada web listen.owner = skamasle listen.group = skamasle listen.mode = 0660 user = skamasle group = skamasle etc

Y el vhost igual pero con el socket:

location @php {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web1.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Bueno más o menos así, no espero que lo entiendan bien, es solo una base y lo dejo aquí para recordarme

Nginx: 24: Too Many Open Files Error : Solución

Aveces nos podemos encontrar con este error en nginx: Nginx: 24: Too Many Open Files sea cual sea el uso de NGINX, ya sea como proxy, proxy inverso, web server principal ejecutando PHP.

El error es que superamos el limite de archivos abierto ( valla novedad eso ya lo dice el error )

Aveces es culpa del sistema tiene limites, esos limites los podemos ver en /etc/sysctl.conf

Aunque casi nunca es cosa del sistema, no si es nuestro servidor y no le hemos puesto limites, por defecto casi nunca tiene ningún limite al menos que se lo hayamos puesto o algún otro sys admin.

Es problema de nginx casi siempre, la solución muy sencilla, editamos el nginx.conf y añadimos esta linea:

worker_rlimit_nofile 45000;

Reiniciamos y eso es todo, puede que necesitemos aumentar el valor, si tenemos muchas peticiones o estamos sufriendo un DDOS muy potente 45 000 no será suficiente aunque subir mucho el valor tampoco nos ayudará ya que el server puede colapsar, así que ustedes verán que les sirve, solo hay que analizar la situación, ver el tipo de servidor que tenemos etc etc

NOTA: Puede salir error cuando tenemos pocas conexiones asignadas, si es así aumentamos los workers_conections y los workers.

Con 30 mil o 35 mil es más que suficiente para un servidor y una web «normal».

Buscar Archivos en Linux por Peso

Otro comando útil y muy sencillo es el de buscar por medio de la consola, el comando es find y podemos usarlo también para buscar archivos por peso o más bien listarlos por peso, por ejemplo buscar logs que pesen más de 100 MB en un directorio y sus subdirectorios.

Encontrar los archivos más pesados de una carpeta

find . -type f -size +1073741824 -ls

Ese comando nos mostrara todos los archivos que pesen más de 1GB, el peso esta en bytes.

También podemos buscar todos los que pesen menos de 1GB o de un mega ( el peso que queramos, es el mismo comando solo que en vez de poner un más ( + ) delante del número, ponemos un menos.

find . -type f -size -1073741824 -ls