Перенаправить Apache в другую службу в вложенная папка

У меня есть сервер CentOS 6.9, на котором запущена «ДокуВики» под 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, и «ДокуВики» работают правильно, если я запускаю их отдельно , но я не могу найти способ сделать их видимыми одновременно.

Я бы хотел : если пользователь типы myserver.com , покажите index.html с двумя ссылками: одна на вики ( myserver.com/dokuwiki ), а другая - на GitLab сервер ( myserver.com/gitlab ). Нажав на каждую из них, пользователь может получить доступ к нужной службе.

Что произойдет, если установить приоритет конфигурации gitlab над другой (изменив имя на 00-gitlab.conf , для пример), конфигурация вики не работает, и когда вы вводите myserver.com или myserver.com/dokuwiki , он ничего не находит ( Не найдено "/" показано), потому что он использует другие правила и совпадений нет (из-за директивы Location GitLab, я думаю). В этом случае GitLab работает нормально.

Если я поставлю конфигурацию Wiki с приоритетом, я получу ошибку 404 при попытке доступа к myserver.com/gitlab , потому что это правило является более общим и, следовательно, другой игнорируется директивой Location . Индекс и Wiki в этом случае работают нормально.

Вот конфигурации виртуальных хостов для обоих, хранящиеся в /etc/httpd/conf.d . Все SSL и работает нормально. Конфигурация для HTTP (порт 80) практически такая же, но я не включил ее здесь. У меня также есть NameVirtualHost *: 443 в 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>

Спасибо.

0
задан 2 March 2020 в 12:15
2 ответа

Вам не хватает директивы 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.

1
ответ дан 30 March 2020 в 01:22

Благодаря Джеральду я нашел решение. На самом деле проблема заключалась в том, что у меня было два виртуальных хоста, а мне нужен был только один. Затем мне просто нужно настроить подкаталог со спецификой 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>
0
ответ дан 30 March 2020 в 01:22

Теги

Похожие вопросы