У меня есть сервер CentOS 6.9, на котором запущена DokuWiki под Apache / HTTPD 2.2. Эта вики установлена в /var/www/html/dokuwiki
. Поэтому, когда вы набираете myserver.com/dokuwiki
, он попадает в вики. Если вы напечатаете myserver.com
, простой index.html
файл (/var/www/html/index.html
) показан со ссылками на Wiki и GitLab.
Теперь я установил GitLab и настроил его также на использование HTTPD (по умолчанию он поставляется со встроенным NGINX). И GitLab, и DokuWiki работают правильно, если я запускаю их самостоятельно, но я не могу найти способ сделать их видимыми одновременно.
Я бы хотел: если пользователь вводит myserver.com
, показать index.html
с двумя ссылками: одна на вики (myserver.com/dokuwiki
) и другая ссылка на сервер GitLab (myserver.com/gitlab
). Нажав на каждую, пользователь может получить доступ к желаемой услуге.
Что происходит, так это то, что если поставить конфигурацию gitlab с приоритетом над другой (изменив имя на 00-gitlab.conf
, например), конфигурация вики не работает, и когда вы вводите myserver.com
или myserver.com/dokuwiki
, ничего не находит ( Not found "/"
отображается), потому что он использует другие правила и совпадений нет (из-за Location
директива GitLab, я думаю). В этом случае GitLab работает нормально.
Если я поставлю конфигурацию Wiki с приоритетом, я получаю ошибку 404 при попытке доступа myserver.com/gitlab
потому что это правило является более общим и поэтому игнорирует другое с Location
директива. В этом случае индекс и вики работают нормально.
Вот конфигурации виртуальных хостов для обоих, хранящиеся в /etc/httpd/conf.d
. Все SSL и работает нормально. Конфигурация для HTTP (порт 80) практически такая же, но я не включил ее здесь. у меня тоже есть NameVirtualHost *:443
в httpd.conf
.
Вики / корень:
<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>
Спасибо.
Вам не хватает ProxyPass
директива и у вас есть ProxyPassReverse
дважды, с разными значениями. будет использоваться только один из них.
Правильно должно быть:
ProxyPass http://127.0.0.1:8181
ProxyPassReverse http://127.0.0.1:8181
И у вас должен быть только один виртуальный хост:
<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>
Кроме того, вам нужно будет настроить правильный базовый URL-адрес в самом gitlab.
Благодаря Джеральду я нашел решение. На самом деле проблема заключалась в том, что у меня было два виртуальных хоста, а мне нужен был только один. Затем мне просто нужно настроить подкаталог со спецификой GitLab. Вот моя рабочая конфигурация:
<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>