LINUX.ORG.RU
решено ФорумAdmin

Восстановить работу gitweb. Случайно грохнул /etc/apache2/conf-enabled/gitweb.conf

 , gitweb, ,


0

1

Пришел сегодня ранёхонько, стал ремонтировать вот это: Apache показывает ошибку 403 на некоторых файлах

Увидел, что в файле /etc/apache2/conf-enabled/gitweb.conf кривоватенькая регулярка, которая, видимо, отвечала за доступ/обработку dot-каталогов ".git" или что-то в этом роде (сервер настраивал не я). Чтобы проверить, что проблема в Apache-модуле gitweb, решил его временно отключить. И вместо того чтоб удалить линк в /conf-enabled, спросоня удалил основной файл в /conf-available.

Отключить раздел чтоб восстановить файл не могу, на сервере куча всего крутится. Поэтому восстановил файл из пакета. И теперь его надо настроить «как было».

По-дефолту он выглядит так:

<IfModule mod_alias.c>
  <IfModule mod_mime.c>
    <IfModule mod_cgi.c>
      Define ENABLE_GITWEB
    </IfModule>
    <IfModule mod_cgid.c>
      Define ENABLE_GITWEB
    </IfModule>
  </IfModule>
</IfModule>

<IfDefine ENABLE_GITWEB>
  Alias /gitweb /usr/share/gitweb

  <Directory /usr/share/gitweb>
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
  </Directory>
</IfDefine>


Единственное что я помнил, что репозитарии размещены в каталоге /home/git (этот каталог так же прописан и в /etc/gitweb.conf). А обращение к главной странице в браузере должно происходить по наш_домен/git. Поэтому я подправил настройки:
<IfDefine ENABLE_GITWEB>
  Alias /git /home/git

  <Directory /home/git>
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
  </Directory>
</IfDefine>

Перезапускаю Apache2 (версия 2.4, вестимо). И получаю 403 ошибку:
Forbidden
You don't have permission to access this resource.

В общем, судорошно соображал что как крутить, курил логи, не одмин я совсем, Апач лет десять назад запускал... Наконец заставил работать веб-морду. Конфиг получился такой:
<IfDefine ENABLE_GITWEB>

  # Turning on mod rewrite
  RewriteEngine on

  # Make the front page an internal rewrite to the gitweb script
  RewriteRule ^/git/$  /cgi-bin/gitweb.cgi [L,PT]

  # Make access for "dumb clients" work
  RewriteRule ^/git/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI}  [L,PT]

  Alias /git /home/git
  <Directory /home/git>
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi

    Require all granted

    # DirectoryIndex gitweb.cgi
    DirectoryIndex /cgi-bin/gitweb.cgi

  </Directory>
</IfDefine>

Но теперь осталась проблема: недоступны ресурсы типа картинок, js-файлов и css-сок. Например, запросы:

http://наш_сервер/git/static/gitweb.css
http://наш_сервер/git/static/gitweb.js

Возвращают ошибку 404.

Вопрос: Как докрутить конфиг, чтобы эти ресурсы стали доступны?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Похоже, проблема в том, что надо чтобы веб-сервер по пути http://наш_домен/git/static предоставлял содержимое каталога /usr/share/gitweb/static в котором лежат нужные ресурсы.

Пробую прописать рядом с Alias /git /home/git такие варианты:

Alias /git/static /usr/share/gitweb/static
и так:
Alias /git/static/ /usr/share/gitweb/static/

Но все равно ресурсов не видно, выдает 404.

Почему опция не работает?

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от Xintrea

Разобрался. Оказывается в Apache2 при прописывании Alias надо обязательно писать вначале более конкретный путь, потом более общий.

То есть, так работать не будет:

Alias /git /home/git
Alias /git/static /usr/share/gitweb/static

А наоборот будет:
Alias /git/static /usr/share/gitweb/static
Alias /git /home/git

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)