<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 /a/ /usr/libexec/git-core/git-http-backend/
  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>
