Apache 2.3 trở lên
Với Apache 2.3 trở lên, rõ ràng bạn có thể làm một cái gì đó như thế này (đã thử nghiệm):
<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 trở về trước
Cập nhật: Đây không phải là một giải pháp tốt. Xem bên dưới.
Bạn phải làm một hack như thế này. Lưu ý rằng [PT]
viết tắt của "passthrough". Không có nó, một chuyển hướng HTTP thực tế được gửi lại cho máy khách, đây có thể không phải là điều bạn muốn. Các [OR]
điều (viết tắt của "hay") cho thấy làm thế nào để phù hợp với nhiều địa chỉ.
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]
Bạn cần kích hoạt mod_rewrite
những gì bạn có thể làm trên Debian / Ubuntu bằng lệnh này:
sudo a2enmod rewrite
Lưu ý rằng phương pháp này không hoàn toàn cấm người khác truy cập trang web thử nghiệm của bạn, vì vậy bạn có thể sẽ muốn thêm một số bảo mật hoặc chỉ chọn một tiền tố khó hiểu hơn next
.
Cập nhật phương thức mod_rewrite.
Có một vài vấn đề với phương pháp này. Đầu tiên, Django không hoạt động với hai trang web trong cùng một quy trình như thế này, bạn cần làm theo hướng dẫn trong câu trả lời này .
Thứ hai mod_rewrite không hoạt động với POST
các yêu cầu ! Tất cả POST
đều âm thầm thay đổi GET
và dữ liệu bài đăng bị loại bỏ. Rất bực bội! Vì vậy, tôi khuyên bạn nên sử dụng ...
phiên bản iptables
Đơn giản chỉ cần chạy các máy chủ trên hai cổng khác nhau. Điều này bao gồm các công cụ WSGI để có hai trang web django riêng biệt.
<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>
Sau đó, bạn có thể sử dụng iptables
lệnh này để định tuyến các yêu cầu từ địa chỉ IP của bạn trên cổng 80 đến cổng 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
Thay đổi -A
để -D
loại bỏ quy tắc.
Lưu ý rằng các tài liệu đề nghị bạn cần thêm các lệnh Listen
và bổ sung NameVirtualHost
, nhưng tôi thực sự thấy rằng nó hoạt động mà không có chúng, và việc thêm chúng làm cho nó bị hỏng (ít nhất là trong ubfox).