Фон

Я хочу настроить cgit, используя apache 2.4 на моем Ubuntu 18.04 VPS. У меня уже есть сервер git, работающий с ssh-доступом для себя. Но я также хочу иметь веб-просмотрщик для моих репозиториев.

Процесс отладки

Когда я посещаю свой поддомен (git.example.com), я получаю ошибку not found. Журнал ошибок apache не показывает ошибок. Журнал доступа apache показывает статус 404. Это заставляет меня думать, что apache не может видеть файлы. Однако файлы существуют и, по-видимому, позволяют пользователю www-данных apache выполнять чтение и запись (при необходимости выполнять).

Вопрос

Я не уверен, как продолжить отладку этой проблемы.

права доступа

user@vps ~$ sudo -u www-data ls -l /home/www-data/cgit
total 1148
-rwxrwsr-x 1 www-data gitusers 1140464 Jul 26 03:08 cgit.cgi
-rw-rwSr-- 1 www-data gitusers   14237 Jul 26 03:08 cgit.css
-rw-rwSr-- 1 www-data gitusers    1278 Jul 26 03:08 cgit.png
-rw-rwSr-- 1 www-data gitusers    1078 Jul 26 03:08 favicon.ico
drwxrwsr-x 3 www-data gitusers    4096 Jul 26 03:08 filters
-rw-rwSr-- 1 www-data gitusers      47 Jul 26 03:08 robots.txt

Журнал ошибок

No error

Журнал доступа

[ip address] - - [utc timestamp] "GET / HTTP/1.1" 404 3950 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"

Браузер отображает

Not Found

The requested URL / was not found on this server.
Apache/2.4.29 (Ubuntu) Server at git.example.com Port 443

Файл VirtualHost

<VirtualHost *:443>
    #======================================================================#
    # Basic admin setings                                                  #
    #======================================================================#

    ServerAdmin admin@example.com
    ServerName git.example.com
    ServerAlias www.git.example.com
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ErrorLog ${APACHE_LOG_DIR}/error.log

    #======================================================================#
    # cgit settings                                                        #
    #======================================================================#

    DocumentRoot /home/www-data/cgit
    SetEnv CGIT_CONFIG  /home/www-data/cgit/cgitrc
    Alias /cgit.css     /home/www-data/cgit/cgit.css
    Alias /cgit.png     /home/www-data/cgit/cgit.png
    Alias /favicon.ico  /home/www-data/cgit/favicon.ico
    Alias /robots.txt   /home/www-data/cgit/robots.txt
    Alias /             /home/www-data/cgit/cgit.cgi/

    <Directory /home/www-data/cgit>
      Options Indexes FollowSymLinks ExecCGI
      AllowOverride None
      Require all granted
      AddHandler cgi-script .cgi
      DirectoryIndex cgit.cgi
    </Directory>

    RewriteEngine on
    RewriteRule ^/(.*\.git(|(/(?!(HEAD|info|objects|refs|git-(upload|receive)-pack)).*)))?$ /home/www-data/cgit/cgit.cgi/$1
    Alias /cgit-css /home/www-data/cgit/

    #======================================================================#
    # Use Git's Smart HTTP Protocol                                        #
    #======================================================================#

    # Allow exporting of all repos. To choose which repos to allow exporting of,
    # comment this out and use touch /path/to/repo.git/git-daemon-export-ok
    # for each exportable repo.
    SetEnv GIT_HTTP_EXPORT_ALL

    # Set location of git repos.
    SetEnv GIT_PROJECT_ROOT /home/git

    # Make writes require authentication via apache gitusers password file.
    <Files "git-http-backend">
        AuthType Basic
        AuthName "git.example.com Git Repo Push Access"
        AuthUserFile /home/git/gitusers
        Require valid-user
    </Files>
    #Alternatives to the require expr above
    ScriptAliasMatch "^/(.*\.git/(HEAD|info/refs))$" /usr/lib/git-core/git-http-backend/$1
    ScriptAliasMatch "^/(.*\.git/git-(upload|receive)-pack)$" /usr/lib/git-core/git-http-backend/$1

    #======================================================================#
    # SSL configuration                                                    #
    #======================================================================#

    SSLEngine on
    SSLProtocol -ALL -SSLv2 -SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
    SSLHonorCipherOrder on
    SSLCipherSuite TLSv1.2:RC4:HIGH:!aNULL:!eNULL:!MD5
    SSLCompression off
    TraceEnable Off
    SSLCertificateFile "/etc/letsencrypt/live/example.com/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/example.com/privkey.pem"
</VirtualHost>

1 ответ1

0

Наконец-то все заработало. Похоже, главной проблемой было наличие директивы DirectoryIndex . В противном случае я просто переместил некоторые директивы. Ниже исправлен раздел cgit.

#======================================================================#
# cgit settings                                                        #
#======================================================================#

# Set the root location of cgit files.
# With the aliases used as below, cgit expects the left alias path in its
# cgitrc file.
DocumentRoot /home/www-data/cgit/

# Set the location of the cgit config file.
SetEnv CGIT_CONFIG  /home/www-data/cgit/cgitrc

# Set aliases for cleaner urls.
Alias /cgit.css     /home/www-data/cgit/cgit.css
Alias /cgit.png     /home/www-data/cgit/cgit.png
Alias /favicon.ico  /home/www-data/cgit/favicon.ico
Alias /robots.txt   /home/www-data/cgit/robots.txt
Alias /cgit-css     /home/www-data/cgit
ScriptAlias /       /home/www-data/cgit/cgit.cgi/

# Set directory options for the directory holding cgit files.
<Directory /home/www-data/cgit>
    Options Indexes FollowSymLinks ExecCGI
    AllowOverride None
    Require all granted
    AddHandler cgi-script .cgi
</Directory>

RewriteEngine on
RewriteRule ^/(.*\.git(|(/(?!(HEAD|info|objects|refs|git-upload-pack)).*)))?$ /home/www-data/cgit/cgit.cgi/$1

Обратите внимание, что я также удалил опцию получения пакета, так как я хочу разрешить только push через ssh, но клонирование через https и ssh в порядке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .