РЕДАКТИРОВАТЬ: Наконец, я решил проблему и опубликовал решение ниже.
У меня есть gollum wiki, обслуживаемая сервером sinatra на локальном порту 4567. Я хочу сделать ее доступной из внешнего мира на www.mysite.com/wiki
У меня есть сервер appache-2.2, работающий на Ubuntu 12.04 с включенными mod_proxy и mod_proxy_http.
Мой vhosts.conf содержит:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/mysite
ServerName www.mysite.pl
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /wiki/ http://localhost:4567/
ProxyPassReverse /wiki/ http://localhost:4567/
ProxyHTMLURLMap http://localhost:4567 /wiki
<Location /wiki>
Order allow,deny
Allow from all
RequestHeader unset Accept-Encoding
SetOutputFilter proxy-html
ProxyPass http://localhost:4567
ProxyPassReverse /wiki
ProxyHTMLURLMap / /wiki/
ProxyHTMLURLMap /wiki /wiki
ProxyHTMLURLMap http://localhost:4567 /wiki
</Location>
<Directory / >
AllowOverride AuthConfig FileInfo Indexes Limit Options
Order allow,deny
allow from all
</Directory>
LogLevel debug
ScriptAlias /cgi-bin/ /var/www/mysite/cgi-bin/
<Directory /var/www/mysite/cgi-bin/>
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /srv/src.git
ServerName git.mysite.com
DAVLockDB /var/lock/apache2/davlockDB
<Directory /srv/src.git >
DAV On
Options Indexes MultiViews
IndexOptions FancyIndexing
Order allow,deny
Allow from all
AuthType Basic
AuthName "git repository"
AuthUserFile /etc/apache2/passwd
Require valid-user
</Directory>
</VirtualHost>
Журналы Sinatra показывают, что действительно доступ к сайту localhost: 4567 осуществляется, когда я получаю www.mysite.com/wiki. Но apache возвращает ошибку. Журналы Apache говорят:
[Sun Nov 09 02:04:01 2014] [debug] mod_proxy_http.c(56): proxy: HTTP: canonicalising URL //localhost:4567
[Sun Nov 09 02:04:01 2014] [debug] proxy_util.c(1506): [client 93.105.202.224] proxy: http: found worker http://localhost:4567 for http://localhost:4567/
[Sun Nov 09 02:04:01 2014] [debug] mod_proxy.c(1020): Running scheme http handler (attempt 0)
[Sun Nov 09 02:04:01 2014] [debug] mod_proxy_http.c(1973): proxy: HTTP: serving URL http://localhost:4567/
[Sun Nov 09 02:04:01 2014] [debug] proxy_util.c(2011): proxy: HTTP: has acquired connection for (localhost)
[Sun Nov 09 02:04:01 2014] [debug] proxy_util.c(2067): proxy: connecting http://localhost:4567/ to localhost:4567
[Sun Nov 09 02:04:01 2014] [debug] proxy_util.c(2193): proxy: connected / to localhost:4567
[Sun Nov 09 02:04:01 2014] [debug] proxy_util.c(2444): proxy: HTTP: fam 2 socket created to connect to localhost
[Sun Nov 09 02:04:01 2014] [debug] proxy_util.c(2576): proxy: HTTP: connection complete to 127.0.0.1:4567 (localhost)
[Sun Nov 09 02:04:01 2014] [debug] mod_proxy_http.c(1743): proxy: start body send
[Sun Nov 09 02:04:01 2014] [debug] mod_proxy_http.c(1847): proxy: end body send
[Sun Nov 09 02:04:01 2014] [debug] proxy_util.c(2029): proxy: HTTP: has released connection for (localhost)
[Sun Nov 09 02:04:01 2014] [error] [client 93.105.202.224] File does not exist: /var/www/Home
Название местоположения "Home" было правильно возвращено gollum-wiki (в качестве главной страницы по умолчанию). Может ли кто-нибудь объяснить мне такое поведение?
ОТВЕТ: Это помогло изменить каждое появление http://localhost:4567
в http://localhost:4567/wiki
. У меня возникла идея попробовать это, когда я зашел на свой http-сервер и использовал lynx
получить доступ 127.0.0.1:4567
. Он думал несколько секунд, а затем вернулся 127.0.0.1:4567/wiki/Home
Это выглядит как:
Решение состоит в том, чтобы убедиться, что /wiki
добавляется к gollum-pages. Запускаем так:
$ gollum --host 127.0.0.1 --port 4567 --base-path wiki
PS. Вам также не нужно указывать «ProxyHTMLURLMap» в конфигурации Apache; ProxyPass и ProxyPassReverse достаточно.