0

I have a CentOS 6.9 server that is running a DokuWiki under Apache/HTTPD 2.2. This wiki is installed in /var/www/html/dokuwiki. Therefore, when you type myserver.com/dokuwiki, it enters the wiki. If you type myserver.com, a simple index.html file (/var/www/html/index.html) is shown with links to the Wiki and GitLab.

Now I have installed GitLab and configured it to also use HTTPD (by default it comes with NGINX integrated). Both GitLab and DokuWiki are working correctly if I launch them by themselves, but I cannot find the way to make them visible at the same time.

What I would like is: if the user types myserver.com, show the index.html with two links: one to the wiki (myserver.com/dokuwiki) and the other link to the GitLab server (myserver.com/gitlab). By clicking on each, the user can access the desired service.

What happens is that if put the configuration of gitlab with precedence over the other (by changing the name to 00-gitlab.conf, for example), the configuration of the wiki doesn't work and when you type either myserver.com or myserver.com/dokuwiki, it doesn't find anything ( Not found "/" is shown) because it uses the other rules and there is no match (due to the Location directive of GitLab, I guess). GitLab works OK in this case.

If I put the configuration of the Wiki with precedence, I get a 404 error when I try to access myserver.com/gitlab because this rule is more general and therefore it ignores the other with the Location directive. The Index and the Wiki work OK in this case.

Here are the Virtual Hosts configurations for both, stored in /etc/httpd/conf.d. Everything is SSL and it is working OK. The configuration for HTTP (port 80) is virtually the same but I did not include it here. I also have NameVirtualHost *:443 in httpd.conf.

Wiki/Root:

<VirtualHost *:443>
    ServerName myserver.com
    DocumentRoot /var/www/html
    SSLEngine on
    SSLCertificateFile /etc/httpd/ssl/myserver.com.crt
    SSLCertificateKeyFile /etc/httpd/ssl/myserver.com.key
</VirtualHost>

GitLab

<VirtualHost *:443>
  ServerName myserver.com
  ServerSignature Off
  ProxyPreserveHost On
  AllowEncodedSlashes NoDecode

  SSLEngine on
  SSLCertificateFile /etc/httpd/ssl/myserver.com.crt
  SSLCertificateKeyFile /etc/httpd/ssl/myserver.com.key

  SSLProtocol all -SSLv2
  SSLHonorCipherOrder on
  SSLCipherSuite "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS"
  Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"

  <Location /gitlab>
    Order deny,allow
    Allow from all

    ProxyPassReverse http://127.0.0.1:8181
    ProxyPassReverse http://myserver.com/gitlab
  </Location>
  RewriteEngine on

  #Forward all requests to gitlab-workhorse except existing files like error documents
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]
  # needed for downloading attachments
  DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public/

  #Set up apache error documents, if back end goes down (i.e. 503 error) then a maintenance/deploy page is thrown up.
  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 502 /502.html
  ErrorDocument 503 /503.html

  # It is assumed that the log directory is in /var/log/httpd.
  # For Debian distributions you might want to change this to
  # /var/log/apache2.
  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
  ErrorLog /var/log/httpd/logs/myserver_error.log
  CustomLog /var/log/httpd/logs/myserver_forwarded.log common_forwarded
  CustomLog /var/log/httpd/logs/myserver_access.log combined env=!dontlog
  CustomLog /var/log/httpd/logs/myserver.log combined
</VirtualHost>

Thanks.

fern17
  • 103
  • 3

2 Answers2

1

You are missing the ProxyPass directive and you have ProxyPassReverse twice, with different values. only one of them will be used.

Correct should be:

ProxyPass http://127.0.0.1:8181
ProxyPassReverse http://127.0.0.1:8181

And you should have only one single virtualhost:

<VirtualHost *:443>
    ServerName myserver.com
    DocumentRoot /var/www/html
    SSLEngine on
    SSLCertificateFile /etc/httpd/ssl/myserver.com.crt
    SSLCertificateKeyFile /etc/httpd/ssl/myserver.com.key

    <Location /gitlab>
      Order deny,allow
      Allow from all

      ProxyPassReverse http://127.0.0.1:8181
      ProxyPassReverse http://myserver.com/gitlab
    </Location>    
</VirtualHost>

Additionally, you will have to configure the correct base URL in gitlab itself.

Gerald Schneider
  • 23,274
  • 8
  • 57
  • 89
0

Thanks to Gerald, I found the solution. In fact the problem was that I had two virtualhosts when I only need one. Then, I just need to configure the subdirectory with the specifics for GitLab. Here is my working configuration:

<VirtualHost *:443>
ServerName myserver.com
DocumentRoot /var/www/html
SSLEngine on

SSLProtocol all -SSLv2
SSLHonorCipherOrder on
SSLCipherSuite "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS"
Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"
ServerSignature Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode

SSLCertificateFile /etc/httpd/ssl/myserver.com.crt
SSLCertificateKeyFile /etc/httpd/ssl/myserver.com.key

Alias /gitlab  /opt/gitlab/embedded/service/gitlab-rails/public
<Location /gitlab>
    Order deny,allow
    Allow from all

    ProxyPass http://127.0.0.1:8181
    ProxyPassReverse http://127.0.0.1:8181
    ProxyPassReverse http://myserver.com/gitlab
    RewriteEngine on

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_URI} ^/uploads/.*
    RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]
    ErrorDocument 404 /404.html
    ErrorDocument 422 /422.html
    ErrorDocument 500 /500.html
    ErrorDocument 502 /502.html
    ErrorDocument 503 /503.html
  </Location>
  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
  ErrorLog /var/log/httpd/logs/myserver_error.log
  CustomLog /var/log/httpd/logs/myserver_forwarded.log common_forwarded
  CustomLog /var/log/httpd/logs/myserver_access.log combined env=!dontlog
  CustomLog /var/log/httpd/logs/myserver.log combined

</VirtualHost>
fern17
  • 103
  • 3