7

我正在尝试使用 http baisc 身份验证配置 gerrit,我的 httpd 配置是

<VirtualHost *:8081>
    ServerName localhost

    ProxyRequests Off
    ProxyVia Off
    ProxyPreserveHost On

    <Proxy *>
          Order deny,allow
          Allow from all
    </Proxy>

<Location "/login/">
AuthType Basic
AuthName "Gerrit Code Review"
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
</Location>
ProxyPass / http://localhost:8081/
</VirtualHost>

我的 gerrit.config 是

[gerrit]
        basePath = git
        canonicalWebUrl = http://localhost:8081/
[database]
        type = mysql
        hostname = localhost
        database = reviewdb
        username = gerrit
[auth]
        type = HTTP
[sendemail]
        smtpServer = localhost
        smtpUser = gerrit
[container]
        user = gerrit
        javaHome = /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
[sshd]
        listenAddress = *:29418
[httpd]
        listenUrl = proxy-http://*:8081/
[cache]
        directory = cache

我不确定我哪里出错了,但访问http://xxxx:8081

The HTTP server did not provide the username in the Authorization header when it forwarded the request to Gerrit Code Review.

If the HTTP server is Apache HTTPd, check the proxy configuration includes an authorization directive with the proper location, ensuring it ends with '/': 

我的 gerrit 在内置码头计数器上运行,我的操作系统是 centos 6.4

我哪里错了。?

4

3 回答 3

5

好的。实际上,我在端口上创建了一个虚拟主机,8081而我的 Jetty(与 gerrit 一起提供)也在监听同一个端口,我的配置几乎保持不变,但这些是额外的步骤:-

  • 向您的 selinux 添加一个新端口(最初定义了一些基本端口),或者如果安全不是问题,您可以禁用它。
  • 告诉 httpd 监听这个端口(在我的情况下我添加了8082),所以listen <port-no>在你的http conf文件中添加该行
  • 现在您的虚拟主机设置在端口 8082 上,将虚拟主机更改为您的端口号

    <VirtualHost *:8082>
        ServerName localhost
    
        ProxyRequests Off
        ProxyVia Off
        ProxyPreserveHost On
    
        <Proxy *>
              Order deny,allow
              Allow from all
        </Proxy>
        <Location "/login/">
              AuthType Basic
              AuthName "Gerrit Code Review"
              AuthBasicProvider file
              AuthUserFile /usr/local/apache/passwd/passwords
              Require valid-user
        </Location>
    
        ProxyPass / http://localhost:8081/
    </VirtualHost>
    
  • 将规范 url 更改为端口8082(以便将其重定向到同一端口)

  • 最后重新启动 apache 和 Gerrit(访问 your-host:8082)。
于 2013-08-13T07:07:44.743 回答
3

Gerrit 它期望提供身份验证。当您使用 HTTP 身份验证时,它不允许匿名访问。

为此,您需要在根目录进行身份验证,并且您的 Location 块应如下所示:

<Location "/">
  AuthType Basic
  AuthName "Gerrit Code Review"
  AuthBasicProvider file
  AuthUserFile /usr/local/apache/passwd/passwords
  Require valid-user
</Location>
于 2013-08-12T14:28:39.607 回答
2

你的配置有几个问题:

  1. Apache 并尝试在同一个端口 8081 上侦听,这是不可能的
  2. 您的 ProxyPass 不是最好的,它会产生一些小问题。这些问题是:
    1. 无法创建带有斜杠的项目名称,例如:main/sub
    2. 审阅文件时,复选标记不会出现在文件旁边以显示已审阅,这再次与未正确处理正斜杠有关
  3. 最常见的是使用子文件夹而不是根目录,我想这与反向代理一起使用效果更好

这是我为您推荐的配置:

    <VirtualHost *:80>
        ServerName localhost

        ProxyRequests Off
        ProxyVia Off
        ProxyPreserveHost On

        <Proxy *>
              Order deny,allow
              Allow from all
        </Proxy>

        <Location "/">
            AuthType Basic
            AuthName "Gerrit Code Review"
            AuthBasicProvider file
            AuthUserFile /usr/local/apache/passwd/passwords
            Require valid-user
        </Location>

        AllowEncodedSlashes On
        ProxyPass /r http://localhost:8081/r nocanon
    </VirtualHost>

当然不要忘记修改gerrit.config,canonicalWebUrl 是你在地址栏中输入的,而不是apache 用来查找gerrit 的。

[gerrit]
    basePath = git
    canonicalWebUrl = http://localhost:8082/r

为了防止 apache 默认页面显示在您的根文件夹中添加一个 index.php,它将您的浏览器重定向到子路径:

<?php
    header('Location: http://localhost:8082/r/');
?>
于 2013-08-14T01:16:39.413 回答