Назад | Перейти на главную страницу

Не могу обслуживать gollum wiki с помощью Apache

РЕДАКТИРОВАТЬ: Наконец, я решил проблему и опубликовал решение ниже.

У меня есть 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

Это выглядит как:

  • Ваш посетитель попадает http://www.mysite.pl/wiki/
  • Это передается экземпляру gollum, работающему на localhost: 4567.
  • Gollum wiki видит, что вы попадаете на главную страницу, и перенаправляет на / Home
  • Это заставляет браузер посещать http://mysite.pl/Home
    • Который отсутствует и находится вне префикса / wiki /, поэтому он показывает 404.

Решение состоит в том, чтобы убедиться, что /wiki добавляется к gollum-pages. Запускаем так:

$ gollum --host 127.0.0.1 --port 4567 --base-path wiki

PS. Вам также не нужно указывать «ProxyHTMLURLMap» в конфигурации Apache; ProxyPass и ProxyPassReverse достаточно.