todos sabemos y no es un secreto que un servidor proxy inverso es un intermediario entre el trafico entrante de internet y nuestros servidores web, con esto me refiero que cada solicitud que se realice a nuestros servidores web debe pasar primero por nuestro servidor proxy, el cual realiza una petición a uno de los servidores en forma aleatoria, si estamos publicando el mismo contenido en mas de un servido (balanceo de carga) , o si simplemente contamos con un servidor como en mi caso que trabajar con dominios virtuales en apache. en cualquiera de las dos situaciones el que presenta los datos solicitados al usuario es el servidor proxy.
uno de los grande beneficios de contar con un servidor proxy inverso es el de las seguridad, dado que el usuario que realiza una solicitud web no interactúa directamente con los servidores web.
como instalar nginx
apt-get install nginx
una vez intalado
vamos al archivo de configuracion
nano /etc/nginx/nginx.conf
y modificamos el archivo por este.
# smart default nginx (Ubuntu 9.04)
user www-data www-data;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
# allow long server names
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log;
# spool uploads to disk instead of clobbering downstream servers
client_body_temp_path /var/spool/nginx-client-body 1 2;
client_max_body_size 32m;
client_body_buffer_size 128k;
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay off;
keepalive_timeout 5;
## Compression
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_types text/plain text/html text/css application/x-javascript \
text/xml application/xml application/xml+rss text/javascript \
image/gif image/jpeg image/png;
# Some version of IE 6 don't handle compression well on some mime-types,
# so just disable for them
gzip_disable "MSIE [1-6].(?!.*SV1)";
# Set a vary header so downstream proxies don't send cached gzipped
# content to IE6
gzip_vary on;
# proxy settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
include /etc/nginx/sites-enabled/*;
include /etc/nginx/conf.d/*.conf;
}
ahora configuramos nginx para entrelazarlo con el sitio de apache que queremos publicar, en caso de tener varios tenemos que crear varios sites como los que se muestran a continuacion.
nota: site es el nombre que le he querido poner a mi sitio.
primero vamos a siguiente ruta
cd /etc/nginx/sites-available/
ahora creamos y editamos
nano site
y ponemos esto dentro
server{
listen 192.168.1.106:80;
server_name www.anime.com anime.com;
location / {
proxy_pass http://192.168.1.106:8080;
include /etc/nginx/proxy.conf;
}
location / {
root /var/www/nginx-default/;
}
}
lo explico
1.listen: es la direccion publica en mi caso privada por donde va ha escuchar nginx + el puerto.
2. server name: especificamos el FQDN y el dominio.
3.proxy_pass: la direccion y el puerto por donde va eschusar el servidor apache.
4. root: es la ruta donde se encuentra nuestro sitio alamacenado.
explico un poco lo de los puertos, nginx como va hacer el que recibe la peticion va eschucar directament por el puerto 80, en consecuencia debemos modificar el puetor por donde escucha nuestro servidor apache para no crear conflicto y lograr que ambos queden funcionales.
una vez terminada la configuracion anterior ejecutamos la siguiente linea
ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/site
ahora para poder procesar la peticiones que se realicen a nuestro sitio via apache creamos el siguiente archivo en la siguiente ruta.
nano /etc/nginx/proxy.conf
he ingresamos las siguiente lineas.
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
ahora reiniciamos nginx
/etc/init.d/nginx restart
instalación y configuracion de apache
para isntalar basta con el siguiente comando.
apt-get install apache2
ahora modificamos el puero por donde escucha para no crear conflicto como lo mencionamos anteriormente.
vamos a la siguiente ruta.
cd /etc/apache2
y editamos el siguiente archivo.
nano ports.conf
para que quede de la siguiente manera.
NameVirtualHost *:8080
Listen 8080
Aora creamos un archivo de configuración para site en /etc/apache2/sites-available/site
he incluimos la siguientes lineas.
NameVirtualHost 192.168.1.106
<VirtualHost 192.168.1.106>
ServerName www.anime.com
ServerPath /nginx-defaul
DocumentRoot /var/www/nginx-default
Directoryindex nada.html index.html index.php index.shtml
<Directory /var/www/nginx-default>
AllowOverride All
Options MultiViews Indexes SymLinksIfOwnerMatch
Allow from All
</Directory>
</VirtualHost>
no olvidar publicar nuestro sitio en la carpeta web, en la ruta que especificamos en el DocumentRoot la mía es /var/www/nginx-default
reiniciamos apache
/etc/init.d/apache2 restart
ahora verificamos si todo ha salido bien.
ingresamos a un navegador y digitamos el nombre del dominio en mi caso es www.anime.com nos debería salir algo como esto.
en esta configuracion todavía no esta redirigiendo pero lo ideal seria que lo hiciera, acepto cualquier sugerencia, por el momento especificamos el sitio en mi caso es nada.html
y se nos debe mostrar algo como esto, que es a modo de ejemplo.
nota: si tenemos paginas en lenguajes como .asp o .php el proxy debe soportar estos lenguajes para poder publicarlos , para el caso de .php podemos instalar mod_wsgi.
con el siguiente comando.
apt-get install libapache2-mod-wsgi
si desena verificar si se esta realizando primero la conexión con el proxy y después con el apache revise los log de nginx y apache hay se muestra todo muy bien.