Во-первых, это моя первая попытка использовать apache, так что, пожалуйста, простите меня за мою начальную оригинальность :)
Моя базовая настройка такова: mysub.domain.com
отправляется на мой статический IP-адрес через запись CNAME в диспетчере DNS godaddy. Он попадает на мой сервер Ubuntu 10 LTS с Apache2.
У меня есть запись виртуального хоста, которая направляет этот запрос на соответствующий /var/www/mysub
папка. У меня нет никакого контента, но я добавил строку на страницу «Это работает», чтобы знать, успешно ли я попал туда. У меня также есть Mac Mini с вики-сервером в той же локальной сети, что и сервер Ubuntu.
мне бы хотелось mysub.domain.com
попасть на мой мини-сервер вместо /var/www/mysub
папка.
После долгого чтения на этом и других сайтах мне удалось это сделать ... вроде как.
У меня в моем /var/www/mysub/.htacess
, который я нашел в другом вопросе по SF (забыл скопировать ссылку).
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysub.domain.com/*
RewriteRule .* http://192.168.x.x/ [P,L]
Это работает настолько, что перенаправляет mysub.domain.com
на главную страницу Mini. Но, конечно, то же самое происходит с каждой последующей ссылкой на мини-страницу. Думаю, я понимаю, почему он это делает (все, что начинается с mysub.domain.com
направляется на то, что по сути является главной страницей вики-сервера, и поскольку последующие ссылки на вики-сервере также включают mysub.domain.com
, он всегда оказывается в одном и том же месте)
Я просто не знаю, что делать иначе. Честно говоря, я действительно не понимаю синтаксис этих строк Rewrite.
Я видел бесчисленное количество примеров конфигурационных записей и пробовал некоторые из них, но без особого понимания синтаксиса это своего рода стрельба в темноте.
это был полезный пост, и после прочтения этот вопрос, я попытался добавить это в свой /apache2/httpd.conf
файл
<Location />
ProxyPass http://192.168.x.x
ProxyPassReverse http://192.168.x.x
</Location>
Не повезло.
Ясно, что мне нужно чему-то научиться, но мне кажется, что то, что я хочу делать, вероятно, довольно просто. Что мне не хватает?
ИЗМЕНИТЬ КОММЕНТАРИИ
Мой /etc/apache2/httpd.conf
файл
ServerName localhost
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName mysub.domain.com
DocumentRoot /var/www/mysub
<Location />
ProxyPass http://192.168.x.x/
ProxyPassReverse http://192.168.x.x/
</Location>
</VirtualHost>
... и мой sites-available/mysub
файл...
<VirtualHost *:80>
ServerAdmin me@domain.com
ServerName mysub.domain.com
DocumentRoot /var/www/mysub
#ProxyRequests Off
<Location />
ProxyPass http://192.168.1.50/
ProxyPassReverse http://192.168.1.50/
</Location>
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/mysub>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/www/mysub/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
Выход apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server 66-152-109-110.tvc-ip.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost 66-152-109-110.tvc-ip.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
port 80 namevhost mysub.domain.com (/etc/apache2/sites-enabled/mysub:1)
Syntax OK
Вы очень близки!
Пара заметок:
RewriteCond %{HTTP_HOST} ^mysub.domain.com/*
- The HTTP_HOST
переменная содержит только mysub.domain.com
, а не остаток пути.
Это правило действительно совпадает, но случайно - нет /
характер есть, но *
модификатор применяется к /
символ, означающий "повторить /
От 0 до бесконечности ».
Apache использует Perl-совместимое регулярное выражение - чтобы соответствовать точному хосту, оно должно выглядеть так:
RewriteCond %{HTTP_HOST} ^mysub\.domain\.com$
RewriteRule .* http://192.168.x.x/ [P,L]
- Это только загрузка домашней страницы, так как она не включает остальную часть пройденного пути - это необходимо сделать вручную при использовании [P]
флаг RewriteRule
.
Это должно работать:
RewriteRule (.*) http://192.168.x.x/$1 [P,L]
В ProxyPass
настройка почти правильная, за исключением того, что она отменяется настройкой в .htaccess
файл, поэтому он не используется. С помощью .htaccess
плохо для производительности и потенциально проблематично для безопасности - см. рекомендацию в документации Apache Вот.
Вероятно, лучший подход - удалить .htaccess
файл сразу, и просто используйте ProxyPass
. Измените немного свою конфигурацию ...
<Location />
ProxyPass http://192.168.x.x/
ProxyPassReverse http://192.168.x.x/
</Location>
... и переместите его из своего httpd.conf
в пределах <VirtualHost>
блок, обслуживающий субдомен.
С соответствующими косыми чертами в конце и не более .htaccess
, это должно помочь!
Это был последний кусок головоломки. Нашел как ответ на этот вопрос.
Решение состоит в том, чтобы иметь это в /etc/apache2/mods-enabled/proxy.conf
:
<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>