Nginx เป็นฟอร์เวิร์ดพร็อกซีสำหรับ HTTPS


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?

ปรับปรุง

จำเป็นต้องเพิ่มว่าพร็อกซีเซิร์ฟเวอร์เป็นส่วนหนึ่งของเวิร์กโฟลว์การพัฒนาเว็บ / ชุดเครื่องมือของฉัน มันเป็นวิธีที่ดีในการทดสอบ / การแก้ปัญหาฝั่งไคลเอ็นต์ JavaScript ในการผลิตสภาพแวดล้อม (ใช้เขียนใหม่ก่อนผู้รับมอบฉันทะ)

นอกจากนี้ภาษาการตั้งค่าของ nginx ยังเป็นภาษาการเขียนโปรแกรมที่เป็นของตัวเอง มันมีตัวแปร!

https  nginx  proxy 

คำตอบ:


17

ดูเหมือนว่า nginx ไม่รองรับโหมดส่งต่อพร็อกซีด้วย SSL คุณจะต้องใช้บางอย่างเช่นSquidแทน นี่คือลิงค์พร้อมคำอธิบายเพิ่มเติมจากผู้เขียนของ nginx: HTTPS และ nginx เป็น Forward Proxy


1
ขอบคุณ! กระทู้ที่คุณเชื่อมโยงนั้นมีอายุ 4 ปี แต่สำหรับฉันแล้วมันก็ยังเป็นไปไม่ได้

หากคุณต้องการพร็อกซีสำหรับการดีบักให้ลอง mitmproxy
Zorayr

7

เพียงชี้แจง: ตามที่ฉันเขียนในฟีดความคิดเห็นของบล็อกของฉัน nginx ไม่จัดการการเรียกเมธอด CONNECT ซึ่งใช้ในการสร้างการเชื่อมต่อ TCP แบบดิบไปยังโฮสต์ระยะไกลผ่านพร็อกซี HTTP - ซึ่งสมเหตุสมผลแล้วเนื่องจาก nginx ไม่ควร ทำงานเป็น forward proxy มันเกิดขึ้นกับการทำงานค่อนข้างดีสำหรับ HTTP ปกติโดยไม่คำนึงถึง

Nginx แท้จริงแล้วไม่รู้ว่าจะทำอย่างไรกับการเรียกใช้เมธอดเหล่านั้นนั่นเป็นสาเหตุที่ข้อความแสดงข้อผิดพลาดในบันทึกค่อนข้างไร้ประโยชน์ ฉันพบว่าฉันใช้ Privoxy สำหรับ HTTPS เสมอ: http://www.privoxy.org/ - มันง่ายมากที่จะตั้งค่าเช่นกัน แต่ก็ยังเป็นไปไม่ได้ที่จะกรองหรือรวมเนื้อหาของรีเลย์ HTTPS เนื่องจากการเชื่อมต่อ HTTPS ได้รับการจัดการด้วยการเชื่อมต่อแบบดิบผ่านวิธีการเชื่อมต่อและเซิร์ฟเวอร์ไม่ทราบว่ามันกำลังถ่ายทอดอะไร


2

หากคุณไม่ทราบรวบรวม Nginx จากแหล่งที่คุณสามารถติดตั้งngx_http_proxy_connect_module ต่อไปนี้ทำงานสำหรับฉันใน Debian 9 "Stretch" บน Raspberry Pi (หลังจากฉันเพิ่ม URL deb-src ไปยัง /etc/apt/sources.list และทำการอัพเดต apt-get):

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และทำให้หน้าตาเป็นแบบนี้ (ฉันได้รวมตัวอย่างของโดเมนที่คุณต้องการบล็อกซึ่งทำงานได้กับทั้ง SSL และที่ไม่ใช่ SSL proxying):

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แพคเกจสต็อกของ Debian ถ้าคุณยังใช้เว็บเซิร์ฟเวอร์ผลิตในพอร์ต 80 และไม่ต้องการเสี่ยงที่จะยุ่งกับมัน (แต่ให้แน่ใจว่าได้เริ่ม/usr/localเวอร์ชันแยกต่างหากตอนบู๊ต) อีกทางเลือกหนึ่งด้วยการกำหนดค่าเพิ่มเติมคุณสามารถเรียกใช้บริการทั้งสองจาก nginx ที่คุณรวบรวม แต่ถ้าคุณตั้งค่า nginx ที่คอมไพล์แล้วของคุณให้ทำงานบนพอร์ตที่ไฟร์วอลล์ของคุณอนุญาตให้ทราฟฟิกระวังให้คุณต้องตรวจสอบการอัพเดทความปลอดภัยของ nginx ด้วยตนเองเนื่องจากระบบแพ็คเกจ Debian จะไม่ทำเพื่อคุณอีกต่อไป


ฉันต้องปรับแต่งคำสั่งบางอย่าง แต่โดยรวมแล้วคำตอบของคุณก็ใช้ได้ ขอบคุณมาก!
Robert Reiz

0

ฉันเพิ่งทำตามคำแนะนำจาก Silas S. Brown และฉันสามารถรวบรวมไบนารี Nginx ซึ่งสามารถจัดการกับการส่งต่อและ SSL ฉันรวมทุกอย่างเข้าด้วยกันเป็นภาพนักเทียบท่า Dockerfile และการกำหนดค่าอยู่ที่นี่บน GitHub: https://github.com/reiz/nginx_proxy

ภาพ Nginx เทียบท่าในเรื่องนี้ที่เก็บหาง Hub สามารถจัดการการเชื่อมต่อ SSL และการส่งต่อ: https://hub.docker.com/r/reiz/nginx_proxy/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.