<VirtualHost *:8080>
  # The ServerName directive sets the request scheme, hostname and port that
  # the server uses to identify itself. This is used when creating
  # redirection URLs. In the context of virtual hosts, the ServerName
  # specifies what hostname must appear in the request's Host: header to
  # match this virtual host. For the default virtual host (this file) this
  # value is not decisive as it is used as a last resort host regardless.
  # However, you must set it for any further virtual host explicitly.
  ServerName localhost
  ServerAdmin webmaster@localhost

  UseCanonicalName On

  AllowEncodedSlashes On

  SetEnv GIT_PROJECT_ROOT /var/gerrit/git
  SetEnv GIT_HTTP_EXPORT_ALL
  ScriptAliasMatch "(?i)^/a/projects/(.*)" "/var/cgi/project_admin.sh"
  ScriptAlias / /usr/libexec/git-core/git-http-backend/
  ScriptLog logs/cgi.log

  # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
  # error, crit, alert, emerg.
  # It is also possible to configure the loglevel for particular
  # modules, e.g.
  LogLevel debug authz_core:warn

  # Don't log probe requests performed by kubernetes
  SetEnvIFNoCase User-Agent "^kube-probe" dontlog

  ErrorLog /dev/stdout
  CustomLog /dev/stdout combined env=!dontlog

  # For most configuration files from conf-available/, which are
  # enabled or disabled at a global level, it is possible to
  # include a line for only one particular virtual host. For example the
  # following line enables the CGI configuration for this host only
  # after it has been globally disabled with "a2disconf".
  #Include conf-available/serve-cgi-bin.conf
  <Files "git-http-backend">
    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /var/apache/credentials/.htpasswd
    Require valid-user
  </Files>
  <Files "create_repo.sh">
    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /var/apache/credentials/.htpasswd
    Require valid-user
  </Files>
  <Files "project_admin.sh">
    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /var/apache/credentials/.htpasswd
    Require valid-user
  </Files>
</VirtualHost>
