¿Cómo usar Nginx como un servidor proxy HTTP / HTTPS? [cerrado]

Respuestas:

14

Después de algunas pruebas, he encontrado que funciona para mí la siguiente configuración.

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

Esta configuración funciona solo para HTTP, no para HTTPS.

vlad
fuente
44
¡Buen trabajo! Pocos indicios. 1: listen ... default_server. 2: server_name ""o server_name _. 2: proxy_pass $scheme://$http_host. Las limitaciones: poxying a upstreams solo con el puerto 80; no procesa se redirige a sí mismo.
Alexander Azarov
$ esquema solo es útil si el servidor virtual también escucha en https, pero entonces tiene riesgos de hombre en el medio y errores de certificado https con los que lidiar ... ambos son grandes problemas de seguridad a tener en cuenta
anthonysomerset
8

Creo que la respuesta corta es no, no fue escrita para proxy

ACTUALIZAR

para aclarar mi declaración anterior:

NGINX nunca se escribió teniendo en cuenta el proxy de reenvío, aunque es remotamente posible manipular la configuración para que haga lo que usted quiere que haga, tendrá que comprender las siguientes limitaciones:

  • Soporte de caché casi inexistente (una de las razones principales para usar un proxy)
  • No se puede usar para otra cosa que no sea el tráfico del puerto 80 (es decir, no se debe iniciar sesión en cajas de panel a través de él)
  • No hay soporte para tráfico basado en SSL
  • No hay soporte para encabezados proxy estándar y encabezados de caché http (entiendo que estos simplemente pasan
  • No es compatible con otros protocolos que admiten servidores proxy, por ejemplo, VPN, etc.

Posibles otras consideraciones que se desconocen en este momento:

  • Posible DoS su proxy ya que no tiene una capacidad real para el control de acceso / autenticación de grano fino (nginx tiene soporte para diferentes métodos de control de acceso, pero no está claro cómo podría comportarse esto en el contexto del proxy hacia adelante)
  • Posibles riesgos de seguridad para la máquina en la que está instalado nginx porque puede haber posibles agujeros de seguridad no considerados debido a su uso de una manera que no fue diseñada para ejecutarse
anthonysomerset
fuente
Contraejemplo, ver: ef.gy/using-nginx-as-a-proxy-server
kkurian
tal vez mi respuesta debería haber sido más clara, no estaba diseñada para enviar proxy: los esfuerzos de parches de mono no ofrecerán soporte proxy completo como solicitudes de proxy a puertos no estándar (puerto 80)
anthonysomerset
3

Si desea usar un proxy HTTP / HTTPS, debe usar Squid. Fue escrito para hacer exactamente eso. Nginx fue escrito para actuar como proxy inverso y balanceador de carga, pero no como proxy directo.

MikeyB
fuente
Sé sobre calamares / oops / tinyproxy / etc. Solo hago esta pregunta por interés académico
vlad