ฉันต้องตั้งค่าเซิร์ฟเวอร์ HTTP/HTTPS แบบโปร่งใส (พร็อกซี X) ด้วย NGINX เพื่อพร็อกซีทราฟฟิกด้วยการอนุญาตที่จำเป็นสำหรับปลายทางพร็อกซี (พร็อกซี Y)พร็อกซีเอนด์พอยต์ (B) ต้องการการอนุญาตขั้นพื้นฐานในการรับทราฟฟิก
การเปรียบเทียบจะเป็นดังนี้:
ลูกค้า ค
ขอ URL (เช่น ifconfig.co) -> DNS ที่กำหนดเองแก้ไขคำขอไปยังพร็อกซี เอ็กซ์
-> หนังสือมอบฉันทะ (เอ็กซ์)
ยอมรับคำขอและจัดการส่วนหัวเพื่อเพิ่มการรับรองความถูกต้องขั้นพื้นฐาน -> หนังสือมอบฉันทะ เอ็กซ์
ส่งต่อคำขอไปยังปลายทางพร็อกซี วาย
ควรได้ผลลัพธ์ที่แน่นอนตามด้านล่างของขด:
ที่นี่ฉันใช้ https://ifconfig.co เพื่อตรวจสอบ IP ปลายทาง
เอชทีทีพี
curl -x http://proxy_endpoint:proxy_port -U 'ชื่อผู้ใช้':'รหัสผ่าน' -k https://ifconfig.co
HTTPS
curl -x http://proxy_endpoint:proxy_port -U 'ชื่อผู้ใช้':'รหัสผ่าน' -k https://ifconfig.co
การทดสอบ:
เพื่อทดสอบการตั้งค่า ฉันเพิ่มบันทึกในของฉัน / etc / โฮสต์
เพื่อแก้ไข ifconfig.co
ไปยังเซิร์ฟเวอร์ Proxy X ของฉัน
จากนั้นฉันทำการม้วนผม
#http
ขด http://ifconfig.co
#https
ขด https://ifconfig.co
ผลลัพธ์ที่สำเร็จควรให้ IP ของพร็อกซีปลายทางแก่ฉัน วาย
การรับส่งข้อมูล HTTP:
ฉันค้นหาวิธีแก้ปัญหาทางออนไลน์อย่างกว้างขวางโดยใช้โมดูล NGINX และฉันพบคำตอบที่เป็นประโยชน์มากที่นี่: https://serverfault.com/a/345244/954119
อย่างไรก็ตาม คำตอบนี้ช่วยให้ฉันส่งทราฟฟิก HTTP เท่านั้น ไม่ใช่ HTTPS นี่คือสิ่งที่ฉันกำหนดค่าสำหรับ HTTP บนพอร์ต 80 ใน nginx.conf:
http {
รวม /etc/nginx/mime.types;
แอปพลิเคชัน default_type/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$สถานะ $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log หลัก;
ส่งไฟล์บน;
#tcp_nopush บน;
keepalive_timeout 300;
proxy_set_header โฮสต์ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
เซิร์ฟเวอร์ {
ฟัง *:80;
access_log /var/log/nginx/nginx.access.log;
error_log /var/log/nginx/nginx.error.log;
ที่ตั้ง / {
proxy_pass http://proxy_endpoint_Y:PORT;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_set_header โฮสต์ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header Proxy-Authorization "Basic base64-encoded-string";
}
}
}
ผมจึงตั้งค่า http
กำกับด้วย เซิร์ฟเวอร์
ที่ฟังพอร์ต 80 และกำหนดค่า ที่ตั้ง
กับ proxy_set_header Proxy-Authorization
ด้วยชื่อผู้ใช้/รหัสผ่านที่เข้ารหัส bas64
สิ่งนี้ใช้งานได้ดีจริง ๆ และรับส่งข้อมูลพร็อกซี HTTP (พอร์ต 80) ไปยังปลายทางพร็อกซี อย่างไรก็ตามการรับส่งข้อมูล HTTPS จะไม่ทำงาน
การรับส่งข้อมูล HTTPS
ดังนั้นเมื่อฉันเปลี่ยนไป ฟัง
ถึง 443
แทน:
http {
รวม /etc/nginx/mime.types;
แอปพลิเคชัน default_type/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$สถานะ $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log หลัก;
ส่งไฟล์บน;
keepalive_timeout 300;
เซิร์ฟเวอร์ {
ฟัง *:443;
access_log /var/log/nginx/nginx.access.log;
error_log /var/log/nginx/nginx.error.log;
ที่ตั้ง / {
proxy_pass http://proxy_endpoint_Y:PORT;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_set_header โฮสต์ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header Proxy-Authorization "Basic base64-encoded-string";
}
}
}
ข้อผิดพลาด cURL ในไคลเอ็นต์ของฉัน ค
:
ขด: (35) ข้อผิดพลาด:1400410B:รูทีน SSL:CONNECT_CR_SRVR_HELLO:หมายเลขเวอร์ชันไม่ถูกต้อง
ในบันทึกการเข้าถึงของฉัน ฉันได้รับบันทึกที่แปลกประหลาดมาก:
xx.xxx.xx.x - - [26/มี.ค./2022:21:43:54 +0000] "\x16\x03\x01\x00\xE1\x01\x00\x00\xDD\x03\x03W\x87> \x1E+1\xDFb\x13\x1E,\xC0\xE9\xEF\x07\xAB[\xEA!\xBE\x17\xC23\x8D\xBD\xA4\xEA\xB5\xD5s\x8AO\x00\x00\ x5C\xC00\xC0,\xC0(\xC0$\xC0\x14\xC0" 400 157 "-" "-"
ฉันแค่ต้องจัดการการรับส่งข้อมูล HTTPS เพื่อเพิ่มส่วนหัวการให้สิทธิ์ เป็นไปได้ไหม? หรือมีแนวทางอื่นอีกไหมครับ?
บันทึก:
ฉันได้ลองใช้ ลำธาร
โมดูลที่ฉันใช้ก่อนหน้านี้เพื่อส่งทราฟฟิก HTTPS ไปยังปลายทาง แต่ไม่มีการอนุญาต แต่ฉันไม่เห็นตัวเลือกใด ๆ ใน NGINX ลำธาร
เอกสารโมดูลเพื่อจัดการส่วนหัวของคำขอ http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html
สภาพแวดล้อมของระบบ:
รุ่น nginx: nginx/1.21.6 สร้างโดย gcc 9.3.0 (Ubuntu
9.3.0-10ubuntu2) สร้างด้วย OpenSSL 1.1.1f 31 มี.ค. 2020 เปิดใช้งานการสนับสนุน TLS SNI