使用智能 http 和 redmine_git_hosting 的 redmine 不允许推送到存储库

redmine with smart http and redmine_git_hosting does not allow pushing to repository

红矿版本:3.4.4.stable redmine_git_hosting插件版本:1.2.3 gitolite v.3

仅 HTTPS 访问存储库。 我可以克隆 OK 但在推送时出现以下错误:

fatal: Authentication failed for '<repo URL>'

在 git_hosting.log 的服务器端,我收到以下错误:

SmartHttp : your are trying to push data without SSL!, exiting !

我对问题的真正原因感到困惑

我的虚拟主机redmine配置文件是:

`<VirtualHost *:443>
    ServerName .....
    ServerAlias ......
    ServerAdmin ....
    DocumentRoot  /opt/redmine/public
    PassengerRuby ......
    PassengerFriendlyErrorPages on

    ErrorLog /var/log/httpd/redmine-error_log
    CustomLog /var/log/httpd/redmine-access_log common

    <Directory "/opt/redmine">
      Require all granted
      # MultiViews must be turned off
      Options -MultiViews
    </Directory>

    PerlLoadModule Apache::Authn::Redmine

    <Location />
     Order allow,deny
     Allow from all

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler

    RedmineDSN "DBI:Pg:database=redmine;host=127.0.0.1"
    RedmineDbUser "redmine"
    RedmineDbPass "xxxxx"

    RedmineGitSmartHttp yes
  </Location>
</VirtualHost>`

提前感谢您的帮助!

好的,我已经弄明白了(不感谢模糊的错误消息)。我一定是唯一一个使用 https 的人! 基本上我的虚拟主机配置缺少 3 个条目 re SSL:

SSLEngine on SSLCertificateFile SSLCertificateKeyFile

当您通过 HTTP/HTTPS 与 Git 通话时,这是 SSL 终止的问题。

如果您在 NGINX 反向代理后面使用 Redmine,您应该添加额外的 header 以保留有关原始请求方案的信息:

proxy_set_header   X-Forwarded-Proto $scheme;

对于执行 SSL 终止的 Apache,值应该是:

RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}

在您的情况下,您正在监听 *:443 并且没有为您的虚拟主机指定 SSL 证书设置。另一种选择是在 Redmine 设置下为 SmartHTTP 设置 "HTTP Only"。