Git 使用 Apache - 请求的 URL 返回 500

问题描述 投票:0回答:1

我有一个运行 Apache 和 git 的 Ubuntu 服务器,我可以在服务器上本地克隆/推送存储库,但在尝试远程克隆/推送时收到 500 内部服务器错误。

例如 -

git clone https://<domain>/testrepo.git

如果使用 ssh,我还可以执行 git 操作 - 例如

git clone ssh://jason@<domain>:/home/jason/domains/<domain>/public_html/testrepo.git

我已经确认安装并启用了 apache mods,如

alias
cgi
,并测试了 cgi 以确认其有效。

已确认的开放端口(如 80 和 443)已在 Ubuntu 防火墙上开放。

默认的 apache 错误日志中没有错误 - 甚至还提高了日志级别进行调试,nada。

[更新]

在此处检查错误日志时:

/var/log/<domain>_error.log
我看到以下错误 -

Thu Aug 01 21:15:55.438216 2024] [cgi:error] [pid 7583] [client <ip>] AH01215: fatal: detected dubious ownership in repository at '/home/jason/domains/<domain>/public_html/testrepo.git': /usr/lib/git-core/git-http-backend
[Thu Aug 01 21:15:55.438441 2024] [cgi:error] [pid 7583] [client <ip>] AH01215: To add an exception for this directory, call:: /usr/lib/git-core/git-http-backend
[Thu Aug 01 21:15:55.438539 2024] [cgi:error] [pid 7583] [client <ip>] AH01215: : /usr/lib/git-core/git-http-backend
[Thu Aug 01 21:15:55.438690 2024] [cgi:error] [pid 7583] [client <ip>] AH01215: \tgit config --global --add safe.directory /home/jason/domains/<domain>/public_html/testrepo.git: /usr/lib/git-core/git-http-backend

我继续使用

git config --global --add safe.directory /home/jason/domains/<domain>/public_html/testrepo.git

将 repo 目录添加为安全目录

出于测试目的,我将 repo 文件夹的所有者更改为

www:data:www-data
,它工作得很好,这很好,但在我的情况下并不理想。我使用自己的用户名来管理服务器,当然具有 sudo 权限,并且该用户是
www-data
组的成员。所以理论上(对我来说)它应该有效。

但是可惜,还是没有运气。

GIT需要使用默认的Apache用户来运行吗?

服务器配置-

  • Ubuntu服务器20.04
  • Git 版本 2.25.1
  • Apache2 版本 2.4.41 (Ubuntu)

我当前的 apache 配置 -

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/jason/domains/<domain>/public_html
    ServerName <domain>
    ServerAlias <domain>

    ErrorLog ${APACHE_LOG_DIR}/<domain>_error.log
    CustomLog ${APACHE_LOG_DIR}/<domain>_access.log combined

    # Directory settings for public_html
    <Directory /home/jason/domains/<domain>/public_html>
        Options +ExecCGI +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    # Git HTTP backend configuration
    ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

    SetEnv GIT_PROJECT_ROOT /home/jason/domains/<domain>/public_html
    SetEnv GIT_HTTP_EXPORT_ALL

    <Directory /usr/lib/git-core>
        Options +ExecCGI +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/<domain>/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/<domain>/privkey.pem
</VirtualHost>
</IfModule>

我在这里缺少什么?

git apache ubuntu-20.04
1个回答
0
投票

经过进一步的审查和调试,很明显,在存储库目录上设置权限以使用默认的 apache 用户

www-data
似乎是不更改运行 Apache 的用户的唯一解决方案。

正如我原始线程中的评论所述,考虑到我使用自己的用户 ID 作为我在 Apache 中执行的其他所有操作(如 php、python 或 NodeJS)的所有者/权限,我觉得这很奇怪。这是有效的,因为我的用户 ID 是

www-data
组的成员。所以我自然也不认为这对 git 来说是一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.