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]
що означає "перехід". Без нього фактичне перенаправлення 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
s мовчки змінюються, 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).