Centos

GitLab 與 Apache(CentOS Web 伺服器)上的相對 URL

  • April 7, 2019

我有一個 CentOS 7 伺服器,其中包含一個由 Apache 託管的現有網站(比如 mywebsite.com)。我希望 GitLab 由 Apache 而不是 nginx 管理,並且具有相對於我的網站(例如 mywebsite.com/gitlab)的真實 URL。這對 GitLab 綜合包是否可行?

編輯: 關於我的配置的一些附加資訊。這是我的 apache 主配置文件,其中應包含解決與任何虛擬主機不匹配的任何請求的資訊;就 GitLab 安裝而言,我沒有觸及這個文件。

/etc/httpd/conf/httpd.conf

粘貼bin連結

以下是我添加的配置文件,以使 apache 使用 GitLab 解析虛擬主機(仍在嘗試了解是否可以使用相對 url 虛擬主機);我遵循了 Apache 2.4 和 GitLab Omnibus 的本指南(預設配方是這個)。

/etc/httpd/conf.d/gitlab.conf

<VirtualHost *:80>
   ServerName mywebsite.com/gitlab
   ServerSignature Off

   ProxyPreserveHost On
   AllowEncodedSlashes NoDecode

   <Location />
       Require all granted
       ProxyPassReverse http://127.0.0.1:8181
       ProxyPassReverse http://mywebsite.com/gitlab
   </Location>

   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]

   DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

   ErrorDocument 404 /404.html
   ErrorDocument 422 /422.html
   ErrorDocument 500 /500.html
   ErrorDocument 502 /502.html
   ErrorDocument 503 /503.html

   LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
   ErrorLog /var/log/httpd/mywebsite_error.log
   CustomLog /var/log/httpd/mywebsite_forwarded.log common_forwarded
   CustomLog /var/log/httpd/mywebsite_access.log combined env=!dontlog
   CustomLog /var/log/httpd/mywebsite.log combined
</VirtualHost>

最後,這是 GitLab Omnibus 包的配置;我更改了 gitlab 主力埠,禁用了 nginx 並將 apache 設置為 Web 伺服器的外部使用者。就外部使用者而言,我沒有使用 www-data,因為我的機器上不存在這樣的使用者(如果我嘗試使用 www-data,gitlab-ctl reconfigure 也會出錯)。由於 httpd.conf 中的“User apache”指令,我認為 apache 是正確的,但我對此並不確定。

/etc/gitlab/gitlab.rb

external_url 'http://mywebsite.com/gitlab'

gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:8181"

web_server['external_users'] = ['apache']
nginx['enable'] = false

使用這樣的配置,我的網站無法正常工作:每個頁面都顯示 503 GitLab 錯誤“哎呀,GitLab 目前不可用。嘗試刷新頁面,或返回並再次嘗試該操作。”;這可能是什麼原因?請注意,如果我刪除 gitlab.conf 文件並重新載入 httpd,正常的網站可以正常工作。此外,如果我禁用 apache 並僅在相對 url 上使用預設配置執行 GitLab(使用 nginx),一切正常;我只是不能把這兩件事放在一起,相對 url 和 apache 而不是 nginx。

該解決方案正在使用通過 GitLab Omnibus 軟體包安裝的 Apache 2.4.6 和 GitLab 11.9.4 的 CentOS 7 Web 伺服器上執行。伺服器在 http 上執行,但它應該很容易轉移到 https。

我想從全新安裝的 Apache 開始,它只管理域mywebsite.com上的一個主機(無虛擬主機)。還應該干淨安裝 GitLab Omnibus 包(官方指南)。為了完整起見,這裡是httpd.conf文件,Apache的主要配置文件。它包含監聽 80 埠的指令,並將所有對主域mywebsite.com的請求定向到指令指定的目錄DocumentRoot,即/var/www/html; 在我的例子中,這樣的目錄包含一個 WordPress 實例。

/etc/httpd/conf/httpd.conf

httpd.conf 在 Pastebin

現在,在編輯 GitLab 配置之前,請務必使用sudo gitlab-ctl stop. 為了使 GitLab 能夠在相對 URL 上工作,作為主域mywebsite.com的子目錄,首先要在相對 URL 上安裝 GitLab;特別是,您必須修改gitlab.rb設置為參數的external_url指令。然後,必須禁用 nginx,它是 GitLab Omnibus 中捆綁的預設 Web 伺服器;Web 伺服器的外部使用者必須設置為(Apache 的外部使用者在大多數發行版中,但是'http://mywebsite.com/gitlab'``apache``www-data``apache對於 CentOS 7); GitLab 主力必須設置為監聽 tcp,因為 Apache 只能使用 http 套接字;下面假設 GitLab 主力監聽埠 8181,該埠也是要設置的。為了保持 GitLab 安裝簡單,我還禁用了管道的 CI/CD 功能(使用gitlab_rails指令),但這取決於您的需求。

請參閱官方 GitLab Omnibus 文件以了解有關配置相對 URL使用非捆綁 Web 伺服器的更多資訊。生成的 GitLab 配置文件應如下所示。

/etc/gitlab/gitlab.rb

external_url 'http://mywebsite.com/gitlab'

gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:8181"

web_server['external_users'] = ['apache']
nginx['enable'] = false

gitlab_rails['gitlab_default_projects_features_builds'] = false

現在執行一個sudo gitlab-ctl reconfigure. 讓我們回到 Apache 配置:現在 GitLab 已設置,但我們必須將所有對http://mywebsite.com/gitlab的請求重定向到實際的 GitLab 伺服器。我發現的大多數解決方案都建議將子文件夾與虛擬主機一起使用,但這似乎不適用於 GitLab。解決方案是使用Location指令;您可以在主 apache 配置文件httpd.conf中附加此類配置,也可以創建一個新的 .conf 文件並將其放在**/etc/httpd/conf.d/中,以便自動包含它(但請確保您的httpd .conf**包含指令IncludeOptional conf.d/*.conf)。配置如下。

/etc/httpd/conf.d/gitlab.conf

Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"

<Location /gitlab>
 Require all granted

 #Allow forwarding to gitlab-workhorse
 ProxyPassReverse http://127.0.0.1:8181
 ProxyPassReverse http://mywebsite.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>
</VirtualHost>

請務必<Location /gitlab>根據您希望 GitLab 可訪問的相對 URL 修改參數。

配置現已完成,執行systemctl reload httpd以重新配置 Apache 並使用sudo gitlab-ctl restart. 還有一件事:一定要允許 Apache 使用 http 套接字:sudo setsebool -P httpd_can_network_connect=1.

引用自:https://unix.stackexchange.com/questions/510063