Proxy inverso

Proxy Inverso con nginx
Información sobre la plantilla
Nginx.png

Proxy inverso. Es un servidor proxy que funciona en representación de un servidor. Un servidor proxy inverso toma de peticiones de los navegadores web en todo el Internet, dichas solicitudes generan una respuesta de vuelta al servidor proxy inverso, que luego se remitirá al navegador web. Por ejemplo , una solicitud para obtener información de productos en una tienda en línea va a un servidor de imágenes que almacena imágenes del producto, así como el servidor de base de datos , que almacena el precio actual , el inventario y la descripción del artículo.

Ventajas

  • Las peticiones pueden mapearse y ser pasadas a múltiples contenedores Servlet - esto hace el sistema más flexible y facilita la ejecución de múltiples instancias de DHIS en el mismo servidor. También posibilita que se cambie la configuración interna del servidor sin que ello repercuta a los clientes.
  • La aplicación DHIS puede funcionar como un usuario no root en un puerto distinto del 80, lo que limita las consecuencias de un ataque de suplantación de sesión.
  • El proxy inverso puede funcionar como un solo servidor SSL y se puede configurar para inspeccionar las peticiones en busca de contenido malicioso, peticiones y respuestas de log y también proporcionar mensajes de error no sensibles mejorando la seguridad en general.

Seguridad

Mejora un servidor proxy inverso en gran medida la seguridad de un sitio web, ya que ninguno de los servidores se accede directamente a Internet, mientras que el propietario del sitio web no pone las aplicaciones críticas, tales como el correo electrónico y la nómina en el servidor proxy inverso, otros servidores y aplicaciones son seguros.

Por ejemplo, un hacker quiere sustituir la imagen de un producto con y cambia el precio del producto a un centavo, ni el servidor de imágenes, ni el servidor de base de datos de producto pueden ser tocados directamente por los usuarios en Internet. Dado que el servidor proxy inverso y el sitio web no están diseñadas para que los usuarios actualicen imágenes de los productos o de los precios, el hacker probablemente no tendrá éxito en hacer lo que él quiere.

Ejemplos de Configuración de un proxy inverso con Nginx

/etc/nginx/nginx.conf

user www-data;
worker_processes  1;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
worker_connections  1024;
# multi_accept on;
}
http {
include       /etc/nginx/mime.types;
access_log        /var/log/nginx/access.log;
sendfile        on;
#tcp_nopush     on;
#keepalive_timeout  0;
keepalive_timeout  65;
tcp_nodelay        on;
gzip  on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-enabled/default

server {
listen 80;
location / {
root /var/www/nginx-default;
index index.html;
error_page 404 /index.html;
 }
}
server {
listen 443;
access_log /var/log/nginx/access.log;
keepalive_timeout 22;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_session_timeout 30m;
location / {
  root /var/www/nginx-default;
  index index.html;
  error_page 404 /index.html;
 }
}

/etc/nginx/conf.d/proxy.conf

# configuraciones globales para proxy inverso
proxy_redirect             off;
proxy_set_header           X-Real-IP        $remote_addr;
proxy_set_header           X-Forwarded-For  $proxy_add_x_forwarded_for;
proxy_intercept_errors     on;
proxy_connect_timeout      12s;
proxy_send_timeout         90s;
proxy_read_timeout         90s;
proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 64k;
client_body_buffer_size    128k;
client_max_body_size       600M;

/etc/nginx/sites-enabled/correo

# ejemplo de cluster roundrobind
server {
 listen 80;
 server_name correo.midominio;
 rewrite ^(.*) https://$host$1 permanent;
}
# aqui definimos el cluster de los nodos
upstream appclustercorreo {
 server 12.0.0.30 fail_timeout=20;
 server 12.0.0.31 fail_timeout=20;
}
server {
 listen 443;
  server_name correo.midominio;
  access_log /var/log/nginx/access.log;
  keepalive_timeout 22;
  ssl on;
  ssl_certificate /etc/nginx/ssl/cert.pem;
  ssl_certificate_key /etc/nginx/ssl/key.pem;
  ssl_client_certificate /etc/nginx/ssl/cacert.pem;
  ssl_session_timeout 30m;
  location / {
  proxy_pass http://appclustercorreo; # hacemos la llamada al nombre que definimos en el  cluster de nodos
   proxy_set_header Host correo.midominio;;
   error_page 500 502 503 504 /50x.html;
 }
 location = /50x.html {
   root /var/www/nginx-default;
 }
}

Fuentes