Si bien pude configurar con éxito nginx para el tráfico HTTP proxy (usando esta guía ), todos los intentos de proxy de las solicitudes HTTPS dieron como resultado el código 400 ( Solicitud incorrecta ).
Los registros de depuración de Nginx no fueron útiles en absoluto:
2013/06/05 14:38:33 [info] 74946#0: *589
client sent invalid request while reading client request line, client: 127.0.0.1,
server: google.com, request: "CONNECT google.com:443 HTTP/1.1"
¿Cuáles son estas CONNECT
solicitudes? ¿Es posible incluso realizar proxy_pass
solicitudes HTTPS en nginx?
Actualizar
Necesito agregar que un servidor proxy es parte de mi kit de herramientas / flujo de trabajo de desarrollo web. Es una excelente manera de probar / depurar JavaScript del lado del cliente en un entorno de producción (usando reescrituras antes del proxy).
Además, el lenguaje de configuración de nginx es posiblemente un lenguaje de programación por derecho propio. Tiene variables!
Solo para aclarar: como escribí en el feed de comentarios de mi blog, nginx no maneja las llamadas al método CONNECT que se utilizan para establecer una conexión TCP sin procesar a un host remoto a través de un proxy HTTP, lo cual tiene sentido, teniendo en cuenta que se supone que nginx no funciona como un proxy directo, simplemente funciona bastante bien para HTTP normal independientemente.
Nginx literalmente no tiene idea de qué hacer con esas llamadas a métodos, por eso los mensajes de error en los registros son bastante inútiles. Siempre me he encontrado usando Privoxy para HTTPS: http://www.privoxy.org/ - también es increíblemente fácil de configurar. Pero aún es imposible filtrar o destrozar el contenido de los relés HTTPS, porque las conexiones HTTPS se manejan con una conexión sin procesar a través del método CONNECT y el servidor no tiene idea de lo que está transmitiendo.
fuente
Si no le importa compilar nginx desde la fuente, puede instalar ngx_http_proxy_connect_module . Lo siguiente funcionó para mí en Debian 9 "Stretch" en una Raspberry Pi (después de agregar las URL de deb-src a /etc/apt/sources.list e hice apt-get update):
Luego edite
/usr/local/nginx/conf/nginx.conf
y haga que se vea así (he incluido un ejemplo de dominios que desea bloquear, que funciona con proxy SSL y no SSL):Entonces corre
/usr/local/nginx/sbin/nginx
. Coexistirá felizmente con elnginx
paquete de stock de Debian si también está ejecutando un servidor web de producción en el puerto 80 y no quiere arriesgarse a meterse con eso (pero asegúrese de iniciar la/usr/local
versión por separado en el arranque); Alternativamente, con más configuración, puede ejecutar ambos servicios desde el nginx que ha compilado. Pero si configura su nginx compilado para que se ejecute en un puerto en el que su firewall permite el tráfico, tenga cuidado de tener que buscar manualmente las actualizaciones de seguridad de nginx ya que el sistema de paquetes de Debian ya no lo hará por usted.fuente
Simplemente seguí las instrucciones de Silas S. Brown y pude compilar un binario Nginx que puede manejar el reenvío y SSL. Reuní todo en una imagen de Docker. El Dockerfile y la configuración están aquí en GitHub: https://github.com/reiz/nginx_proxy .
La imagen de Nginx Docker en este repositorio de Docker Hub puede manejar la conexión SSL y el reenvío: https://hub.docker.com/r/reiz/nginx_proxy/ .
fuente