HTTPS के लिए आगे प्रॉक्सी के रूप में Nginx


23

जबकि मैं nginx को प्रॉक्सी HTTP ट्रैफ़िक ( इस गाइड का उपयोग करके ) को सफलतापूर्वक कॉन्फ़िगर करने में सक्षम था , प्रॉक्सी HTTPS अनुरोधों के सभी प्रयासों के परिणामस्वरूप कोड 400 ( खराब अनुरोध ) हो गया।

Nginx डीबग लॉग बिल्कुल उपयोगी नहीं थे:

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"

ये CONNECTअनुरोध क्या हैं ? क्या यह proxy_passनगनेक्स में HTTPS अनुरोधों के लिए भी संभव है ?

अद्यतन करें

जोड़ने की जरूरत है कि एक प्रॉक्सी सर्वर मेरे वेब डेवलपमेंट वर्कफ़्लो / टूलकिट का हिस्सा है। यह उत्पादन वातावरण में क्लाइंट-साइड जावास्क्रिप्ट का परीक्षण / डीबग करने का एक शानदार तरीका है (प्रॉक्सी से पहले फिर से लिखना)।

इसके अलावा nginx की विन्यास भाषा यकीनन एक प्रोग्रामिंग भाषा है, जो अपने आप में एक सही भाषा है। इसके चर हैं!

https  nginx  proxy 

जवाबों:


17

Nginx की तरह लगता है एसएसएल के साथ आगे प्रॉक्सी मोड का समर्थन नहीं करता। आपको इसके बजाय स्क्विड की तरह कुछ का उपयोग करने की आवश्यकता होगी । यहाँ nginx के लेखक से अधिक स्पष्टीकरण के साथ एक लिंक दिया गया है: HTTPS और nginx फॉरवर्ड प्रॉक्सी के रूप में।


1
धन्यवाद! आपके द्वारा जोड़ा गया धागा 4 साल पुराना है, लेकिन यह मुझे भी लगता है कि यह अभी भी असंभव है।

यदि आपको डीबगिंग के लिए एक प्रॉक्सी की आवश्यकता है, तो मित्प्रॉक्सी का प्रयास करें।
जोरावर

7

बस स्पष्ट करने के लिए: जैसा कि मैंने अपने ब्लॉग के कमेंट फीड पर लिखा है, nginx CONNECT विधि कॉल को हैंडल नहीं करता है, जो एक HTTP होस्ट के माध्यम से दूरस्थ होस्ट के लिए एक कच्चे टीसीपी कनेक्शन को स्थापित करने के लिए उपयोग किया जाता है - जो समझ में आता है, यह विचार करते हुए कि nginx माना नहीं जाता है आगे प्रॉक्सी के रूप में काम करते हैं, यह नियमित रूप से HTTP के लिए काफी अच्छी तरह से काम करने के लिए होता है।

नगनेक्स का शाब्दिक अर्थ है कि उन तरीकों से कॉल करने का कोई मतलब नहीं है, इसलिए लॉग में त्रुटि संदेश बल्कि बेकार हैं। मैंने हमेशा HTTPS के लिए निजीकरण का उपयोग करते हुए खुद को पाया है: http://www.privoxy.org/ - यह भी स्थापित करना आसान है। लेकिन HTTPS रिले की सामग्री को फ़िल्टर या मैंग करना अभी भी असंभव है, क्योंकि HTTPS कनेक्शन को CONNECT विधि के माध्यम से एक कच्चे कनेक्शन के साथ नियंत्रित किया जाता है और सर्वर को पता नहीं है कि यह क्या रिले है।


2

यदि आपको स्रोत से संकलन करने में कोई आपत्ति नहीं है, तो आप ngx_http_proxy_connect_module स्थापित कर सकते हैं । निम्नलिखित ने मेरे लिए डेबियन 9 "स्ट्रेच" में एक रास्पबेरी पाई पर काम किया (जब मैंने डिबेट-src URL को /etc/apt/source.list में जोड़ा और उपयुक्त-अपडेट नहीं किया):

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

फिर /usr/local/nginx/conf/nginx.confइसे संपादित करें और इसे इस तरह देखें (मैंने उन डोमेन का उदाहरण शामिल किया है जिन्हें आप ब्लॉक करना चाहते हैं, जो एसएसएल और गैर-एसएसएल प्रॉक्सी दोनों के साथ काम करते हैं):

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;
        }
    }
}

फिर चला /usr/local/nginx/sbin/nginx। यह डेबियन के स्टॉक nginxपैकेज के साथ बहुत खुशी से सहवास करेगा यदि आप पोर्ट 80 पर एक उत्पादन वेबसर्वर चला रहे हैं और उसके साथ खिलवाड़ नहीं करना चाहते हैं (लेकिन /usr/localबूट पर अलग से संस्करण शुरू करना सुनिश्चित करें ); वैकल्पिक रूप से, अधिक कॉन्फ़िगरेशन के साथ आप अपने द्वारा संकलित किए गए nginx से दोनों सेवाएँ चला सकते हैं। लेकिन अगर आप एक पोर्ट पर चलने के लिए अपने संकलित नेग्नेक्स को सेट करते हैं, जो आपके फ़ायरवॉल को ट्रैफ़िक की अनुमति देता है, तो आपको nginx सुरक्षा अपडेट के लिए मैन्युअल रूप से जांचना होगा क्योंकि डेबियन पैकेज सिस्टम अब आपके लिए ऐसा नहीं करेगा।


मुझे कुछ आदेशों को मोड़ना पड़ा लेकिन कुल मिलाकर आपके उत्तर ने मेरे लिए काम किया। बहुत धन्यवाद!
रॉबर्ट रेज

0

मैंने सिलास एस ब्राउन के निर्देशों का पालन किया और मैं एक नगनेक्स बाइनरी संकलित करने में सक्षम था जो आगे और एसएसएल से निपट सकता है। मैंने एक डॉकटर छवि में सब कुछ एक साथ बांधा। Dockerfile और कॉन्फ़िगरेशन यहाँ GitHub: https://github.com/reiz/nginx_proxy पर है

इस डॉकर हब रिपॉजिटरी में Nginx Docker की छवि SSL कनेक्शन और अग्रेषण को संभाल सकती है: https://hub.docker.com/r/reiz/nginx_proxy/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.