HTTPS için ileri proxy olarak Nginx


23

Nginx'i proxy HTTP trafiğine ( bu kılavuzu kullanarak ) başarıyla yapılandırabildiğim halde , HTTPS isteklerinin proxy'si için yapılan tüm girişimler 400 koduyla ( Kötü İstek ) sonuçlandı .

Nginx hata ayıklama günlükleri hiç yardımcı olmadı:

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"

Bu CONNECTtalepler neler ? proxy_passNginx'te HTTPS isteklerini yapmak mümkün mü ?

Güncelleştirme

Bir proxy sunucusunun web geliştirme iş akışımın / araç setimin bir parçası olduğunu eklemeliyim. Prodüksiyon ortamında istemci tarafı JavaScript'i test etmek / hata ayıklamak için harika bir yol (proxy öncesi yeniden yazma kullanarak).

Ayrıca nginx'in config dili tartışmalı bir şekilde kendi başına bir programlama dilidir. Değişkenleri var!

https  nginx  proxy 

Yanıtlar:


17

Nginx, SSL ile ileri proxy modunu desteklemiyor gibi görünüyor. Bunun yerine Squid gibi bir şey kullanmanız gerekecek . İşte nginx'in yazarı hakkında daha fazla açıklama içeren bir link: HTTPS ve Forward Proxy olarak nginx.


1
Teşekkürler! Bağladığın konu 4 yaşında, ama aynı zamanda bana hala imkansız görünüyor.

Hata ayıklama için bir proxy'ye ihtiyacınız varsa, mitmproxy'yi deneyin.
Zorayr

7

Netleştirmek için: blogumun yorum beslemesinde yazdığım gibi, nginx, uzak bir ana bilgisayara bir HTTP proxy üzerinden ham bir TCP bağlantısı kurmak için kullanılan CONNECT yöntem çağrılarını ele almaz - nginx'in gerekmemesi gerektiğini düşünüyor ileri vekaleten çalışmak, ne olursa olsun düzenli HTTP için oldukça iyi çalışır.

Nginx'in kelimenin tam anlamıyla bu yöntem çağrılarıyla ne yapılacağı hakkında hiçbir fikri yok, bu yüzden günlüklerdeki hata mesajlarının yararsız olduğunu gösteriyor. Kendimi her zaman HTTPS için privoxy kullanarak buldum: http://www.privoxy.org/ - kurulumu da delicesine kolay. Ancak HTTPS rölelerinin içeriğini filtrelemek veya yönetmek hala imkansızdır, çünkü HTTPS bağlantıları CONNECT yöntemiyle ham bir bağlantıyla yapılır ve sunucunun ne ilettiği hakkında hiçbir fikri yoktur.


2

Kaynaktan nginx derlemenin sakıncası yoksa, ngx_http_proxy_connect_module yükleyebilirsiniz . Aşağıdakiler benim için Ahududu Pi'deki Debian 9 "Stretch" te çalıştı (/etc/apt/sources.list'e deb-src URL'lerini ekledikten ve apt-get update yaptıktan sonra):

cd /tmp &&
apt-get source nginx &&
git clone https://github.com/chobits/ngx_http_proxy_connect_module &&
cd nginx-* &&
patch -p1 < ../ngx_http_proxy_connect_module/proxy_connect.patch &&
sudo apt-get install libpcre3-dev &&
./configure --add-module=/tmp/ngx_http_proxy_connect_module &&
make && sudo make install

Ardından düzenleyin /usr/local/nginx/conf/nginx.confve şöyle görünmesini sağlayın (Engellemek istediğiniz, hem SSL hem de SSL olmayan proxy'lerle çalışan bir örnek alan ekledim):

user www-data;
worker_processes auto;
events { }
http {
    server_names_hash_bucket_size 128;
    server {
        listen       8888;
        server_name  spam.example.com *.spam.example.com;
        server_name  spam2.example.com *.spam2.example.com;
        access_log off;
        return 404;
    }
    server {
        listen       8888;
        server_name ~.+;
        proxy_connect;
        proxy_max_temp_file_size 0;
        resolver 8.8.8.8;
        location / {
           proxy_pass http://$http_host;
           proxy_set_header Host $http_host;
        }
    }
}

O zaman koş /usr/local/nginx/sbin/nginx. Ayrıca nginx80 numaralı bağlantı noktasında bir üretim web sunucusu çalıştırıyorsanız ve bununla uğraşma riskini almak istemiyorsanız Debian'ın stok paketi ile bir arada bulunacaktır (ancak /usr/localsürümü açılışta ayrı başlattığınızdan emin olun ); alternatif olarak, daha fazla yapılandırma ile derlediğiniz nginx'ten her iki servisi de çalıştırabilirsiniz. Ancak derlenmiş nginx'inizi güvenlik duvarınızın trafiğe izin verdiği bir bağlantı noktasında çalışacak şekilde ayarlarsanız, Debian paket sistemi artık sizin için yapmayacağından nginx güvenlik güncellemelerini manuel olarak kontrol etmeniz gerekir.


Bazı komutları değiştirmek zorunda kaldım ama genel olarak cevabınız benim için çalıştı. Çok teşekkürler!
Robert Reiz,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.