Apache 2.3 หรือใหม่กว่า
ด้วย Apache 2.3 หรือใหม่กว่าคุณสามารถทำสิ่งนี้ (ทดสอบ):
<VirtualHost *:80>
ServerName www.example.com
<If "-R '10.10.10.10'">
# The next version of the website...
Alias /favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website-new/main/wsgi.py
</If>
<Else>
# The standard version (e.g. holding page).
Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py
</Else>
# and so on...
</VirtualHost>
Apache 2.2 หรือก่อนหน้า
อัปเดต: นี่ไม่ใช่ทางออกที่ดี ดูด้านล่าง
คุณต้องแฮ็คแบบนี้ สังเกตสิ่ง[PT]
ที่ย่อมาจาก "passthrough" หากไม่มีมันการเปลี่ยนเส้นทาง HTTP จริงจะถูกส่งกลับไปยังไคลเอนต์ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ [OR]
สิ่ง (ซึ่งหมายถึง "หรือ") แสดงให้เห็นว่าเพื่อให้ตรงกับที่อยู่หลายแห่ง
Alias /next/favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /next/static/ /home/ubuntu/static/
WSGIScriptAlias /next /home/ubuntu/website-new/main/wsgi.py
Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py
# Rewrite for our IP.
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^80\.4\.170\.209$ [OR]
RewriteCond %{REMOTE_ADDR} ^94\.193\.52\.157$
RewriteRule ^/(.*) /next/$1 [PT]
คุณต้องเปิดใช้งานmod_rewrite
สิ่งที่คุณสามารถทำได้บน Debian / Ubuntu ด้วยคำสั่งนี้:
sudo a2enmod rewrite
next
โปรดทราบว่าวิธีการนี้ไม่สมบูรณ์ห้ามคนอื่นจากการเข้าถึงเว็บไซต์ทดสอบของคุณดังนั้นคุณอาจจะต้องการที่จะเพิ่มการรักษาความปลอดภัยบางส่วนหรือเพียงแค่เลือกคำนำหน้าคลุมเครือมากขึ้นกว่า
อัพเดตในวิธี mod_rewrite
มีปัญหาสองสามข้อในวิธีนี้ อันดับแรก Django ไม่ทำงานกับสองไซต์ในกระบวนการเดียวกันเช่นนี้คุณต้องทำตามคำแนะนำในคำตอบนี้
ประการที่สองmod_rewrite ไม่ทำงานกับPOST
คำขอ ! ทุกPOST
อย่างถูกเปลี่ยนไปเป็นเงียบ ๆGET
และข้อมูลการโพสต์จะถูกยกเลิก น่าผิดหวังมาก! ดังนั้นฉันแนะนำให้คุณใช้ ...
รุ่น iptables
เพียงแค่เรียกใช้เซิร์ฟเวอร์ในสองพอร์ตที่แตกต่างกัน อันนี้รวมถึงสิ่งที่ WSGI ให้มีสองเว็บไซต์ django แยกต่างหาก
<VirtualHost *:80>
ServerName www.example.com
Alias /favicon.ico /home/ubuntu/alpha/favicon.ico
Alias /static/ /home/ubuntu/alpha/static/
WSGIDaemonProcess alpha_wsgi user=www-data group=www-data
WSGIScriptAlias / /home/ubuntu/alpha/alpha/wsgi.py
WSGIProcessGroup alpha_wsgi
ServerAdmin info@example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:1222>
ServerName www.example.com
Alias /favicon.ico /home/ubuntu/main/favicon.ico
Alias /static/ /home/ubuntu/main/static/
WSGIDaemonProcess main_wsgi user=www-data group=www-data
WSGIScriptAlias / /home/ubuntu/main/main/wsgi.py
WSGIProcessGroup main_wsgi
ServerAdmin info@example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
จากนั้นคุณสามารถใช้iptables
คำสั่งนี้เพื่อกำหนดเส้นทางคำขอจากที่อยู่ ip ของคุณบนพอร์ต 80 ถึงพอร์ต 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
เปลี่ยน-A
เป็น-D
ลบกฎ
โปรดทราบว่าเอกสารแนะนำให้คุณต้องเพิ่มเพิ่มเติมListen
และNameVirtualHost
คำสั่ง แต่จริง ๆ แล้วฉันพบว่ามันทำงานโดยไม่มีพวกเขาและการเพิ่มพวกเขาทำให้มันแตก (อย่างน้อยใน Ubuntu)