สถานการณ์
ฉันมีโดเมนย่อย DDNS sub1.dom1.com
กับ IP แบบคงที่ของ (ตัวละคร 99.88.77.66.55
IP)
ฉันมีโดเมนdom2.com
โฮสต์ปิดเว็บไซต์ที่มีการชี้รายการ DNS CNAME sub2.dom2.com
และsub3.dom2.com
ไป IP เดียวกัน 99.88.77.66.55
(อีกครั้งตัวละคร),
ที่99.88.77.66.55
ฉันมี LAN นั่งอยู่หลังไฟร์วอลล์ของฉัน บน LAN นี้ฉันมีสามเซิร์ฟเวอร์:
- เว็บเซิร์ฟเวอร์ที่มี FQDN
www.local.lan
ในตัวที่192.168.1.3:80
- แอปพลิเคชันเซิร์ฟเวอร์ที่มี FDQN
app.local.lan
ในตัวเครื่องที่192.168.1.4:8069
- ไฟล์เซิร์ฟเวอร์ที่มี FQDN
fs.local.lan
ในตัวที่ at192.168.1.5:2430
ดูแผนภาพด้านล่างสำหรับการชี้แจง เซิร์ฟเวอร์ทั้งสามกำลังทำงานเป็นเซิร์ฟเวอร์เสมือนภายในคุกบนระบบ freeBSD (freeNAS) เดียวกัน
สิ่งที่ฉันอยากทำ
ตามแผนภาพด้านบนฉันต้องการเพิ่มพร็อกซีเซิร์ฟเวอร์ย้อนกลับเพื่อให้ทำงานภายในคุกบนระบบที่กล่าวถึงข้างต้น การร้องขอจาก WAN จะต้องถูกนำไปยังเซิร์ฟเวอร์ที่เหมาะสมตามชื่อของโฮสต์ที่ให้ไว้ในส่วนหัว HTTP
การพิจารณา
- Standard Port Fordwarding:ขณะนี้ฉันเข้าถึงเซิร์ฟเวอร์เหล่านี้ผ่านการส่งต่อพอร์ตอย่างง่าย ๆ บนเราเตอร์ LAN โดยปกติจะเป็นวิธีการแก้ปัญหาที่ยอมรับได้ แต่เมื่อความต้องการเกิดปัญหาเครือข่ายจากระยะไกลมันจะกลายเป็นความท้าทายในการรักษาความสัมพันธ์ของพอร์ต WAN-to-LAN โดยตรง นอกจากนี้สำหรับผู้ใช้อื่นที่ไม่ใช่ตัวเองที่ต้องการเข้าถึงเซิร์ฟเวอร์เหล่านี้จะง่ายกว่าสำหรับพวกเขาที่ไม่ต้องจำหมายเลขพอร์ต
- แอปพลิเคชัน DD-WRT:เนื่องจากเราเตอร์ของฉันใช้เฟิร์มแวร์ DD-WRT ที่มีไดรฟ์ USB 4 GiB ติดตั้งอยู่ฉันจึงมองไปที่การติดตั้งและใช้งานพร็อกซีเซิร์ฟเวอร์ย้อนกลับบนเราเตอร์โดยใช้ Pound หรืออะไรทำนองนั้น ฉันได้ทำการค้นหาเว็บอย่างละเอียดเพื่อค้นหาวิธีการ ปัญหาที่ฉันพบคือคู่มือหรือแบบฝึกหัดส่วนใหญ่นั้นเก่าและมีลิงก์ที่เชื่อมโยงไปยังแหล่งข้อมูลที่ต้องการ
- Apache / Nginx:ทั้งสองอย่างนี้ดูเหมือนเป็นทางออกที่ปฏิบัติได้ อย่างไรก็ตามเช่นเดียวกับโซลูชัน DD-WRT ที่ฉันค้นคว้าคำแนะนำจำนวนมากไม่ว่าจะเป็นการเชื่อมโยงที่ขาดหรือไม่มีการเชื่อมโยงใด ๆ กับทรัพยากรที่ต้องการ สิ่งกีดขวางอื่น ๆ ต่อหน้าฉันด้วยตัวเลือก Apache หรือ Nginx คือคำแนะนำและแบบฝึกหัดส่วนใหญ่คิดว่าฉันรู้ทุกอย่างที่มีเกี่ยวกับ Apache หรือ Nginx แล้ว ฉันเริ่มต้นด้วยประสบการณ์ที่ไม่เคยมีมาก่อนในแพลตฟอร์มใดและยินดีที่จะเรียนรู้และทดลองเพื่อให้ได้สิ่งต่าง ๆ ที่ใช้งานได้ คู่มือและแบบฝึกหัดส่วนใหญ่จะแสดงเฉพาะ
server
ส่วนของรหัสที่จำเป็นเท่านั้น นอกจากนี้ยังมีการตั้งสมมติฐานว่าคุณทราบถึงการพึ่งพาที่จำเป็นและวิธีการนำไปใช้
ขั้นตอนที่ฉันทำไปแล้ว
Nginx: ตัวอย่างจากไฟล์ nginx.conf ของฉัน มันเป็นเพียงส่วนหนึ่ง มีserver
ส่วนอื่น ๆสำหรับเซิร์ฟเวอร์อื่นที่มีการเปลี่ยนแปลงรายละเอียดที่เกี่ยวข้อง
#nginx.conf
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name sub1.dom1.com #I've also tried www.lan.lan, here.
access_log off;
error_log off;
location / {
proxy_pass http://192.168.1.3:80/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_ass_x_forwarded_for;
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_ready_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
}
อย่างไรก็ตามเรื่องนี้; ส่งกลับข้อผิดพลาด 502 - Bad Gateway เมื่อพยายามเชื่อมต่อ
Apache: สิ่งสำคัญที่ควรทราบว่าฉันได้ลองใช้ Apache22 ไฟล์ httpd.conf ล่าสุดของฉันมีลักษณะดังนี้:
LoadFile /usr/local/bin/libxml2.so
LoadModule proxy_html_module libexec/apache22/mod_proxy_html.so
LoadModule xml2enc_module libexec/apache22/mod_xl2enc.so
<VirtualHost *:80>
ServerName sub1.dom1.com
ServerAlias sub1.dom.com
ProxyPass / http://192.168.1.3:80/
ProxyPassReverse / http://192.168.1.3:80
</VirtualHost>
<VirtualHost *:80>
ServerName sub2.dom2.com
ServerAlias sub2.dom2.com
ProxyPass / http://192.168.1.4:8069/
ProxyPassReverse / http://192.168.1.4:8069
</VirtualHost>
<VirtualHost *:80>
ServerName sub3.dom2.com
ServerAlias sub3.dom2.com
ProxyPass / http://192.168.1.5:2430/
ProxyPass / http://192.168.1.5:2430
</VirtualHost
เมื่อฉันพยายามเริ่ม Apache22 ให้ใช้:
service apache22 start
ฉันได้รับต่อไปนี้:
Invalid command 'ProxyPass', perhaps misspelled or defined by a module not included in the server configuration
หลังจากการวิจัยมากมายฉันรู้ว่านี่เป็นสาเหตุที่มากเกินความจริงที่ว่าฉันมีเพียงหนึ่งในหลาย ๆmod_proxy
โมดูลที่ต้องการโหลดmod_proxy_html
โมดูล เหตุผลก็คือหลังจากค้นหาอย่างละเอียดฉันสามารถค้นหาลิงก์ที่ใช้งานได้สำหรับโมดูลเฉพาะนี้เท่านั้น
ปอนด์: ฉันพบปัญหาเมื่อพยายามติดตั้ง ipkg บน DD-WRT อาจเป็นเพราะสถาปัตยกรรม atheos ของเราเตอร์เฉพาะของฉัน ฉันวิ่งเข้าไปในลิงก์ที่ใช้งานไม่ได้หลายอย่าง
คุณช่วยได้อย่างไร
ตกลงด้วยคำอธิบายที่ยืดยาวออกไปให้พ้นนี่คือสิ่งที่ฉันกำลังมองหาจากชุมชน
เนื่องจากฉันได้ใช้ Nginx ที่ใกล้เคียงที่สุดฉันจะตั้งค่าnginx.conf
ไฟล์ของฉันอย่างถูกต้องเพื่อทำสิ่งที่ฉันพยายามทำอย่างไร อะไรเป็นสาเหตุของข้อผิดพลาด 502 และฉันจะแก้ไขได้อย่างไร