Apache-2.2
如何正確地為 GitLab 配置 Apaches mod_proxy 在一個 suburl 下結合其他 suburl
我有一台伺服器,我想在其上執行 GitLab 以及其他服務。在Google搜尋了一段時間後,我發現我需要做一些 mod_proxy 技巧來讓 Apache2 將請求轉發到 GitLab。但是現在,當我嘗試訪問伺服器上任何不是 /git 下的 GitLab URL 的 URL 時,我只會得到一個錯誤。我什至無法訪問我顯然應該訪問的 apaches 標準 index.html 頁面。該伺服器在 Ubuntu 14.04 LTS 下執行。gitlab 的配置文件是:
#This configuration has been tested on GitLab 6.0.0 and GitLab 6.0.1 #Note this config assumes unicorn is listening on default port 8080. #Module dependencies # mod_rewrite # mod_proxy # mod_proxy_http <VirtualHost *:80> ServerName lmmweb ServerSignature Off ProxyPreserveHost On # Ensure that encoded slashes are not decoded but left in their encoded state. # http://doc.gitlab.com/ce/api/projects.html#get-single-project AllowEncodedSlashes NoDecode <Location /git> # New authorization commands for apache 2.4 and up # http://httpd.apache.org/docs/2.4/upgrading.html#access Require all granted ProxyPassReverse http://127.0.0.1:8080 </Location> #apache equivalent of nginx try files # http://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files # http://stackoverflow.com/questions/10954516/apache2-proxypass-for-rails-app-gitlab RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/git/%{REQUEST_FILENAME} !-f RewriteRule /git/.* http: // 127.0.0.1 :8080%{REQUEST_URI} [P,QSA] # needed for downloading attachments DocumentRoot /home/git/gitlab/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 503 /deploy.html LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded ErrorLog /var/log/apache2/gitlab/error.log </VirtualHost>
我很確定 RewriteRules 內部一定有故障,但找不到。我在 http:// 的 RewriteRule 中包含了雙空格……因為由於缺乏聲譽,我遇到了一些錯誤。
最好的問候和感謝您的幫助。
我找到了解決方案:
問題是覆蓋了所有其他定義的虛擬主機。我的設置有必要讓這個 gitlab 實例在不同的埠下執行,然後從主配置代理到這個。
所以我的虛擬主機現在
<VirtualHost:8081>
和之前都是Listen 8081
. 在我想要配置子網址的配置文件中,我添加了:<Location /git> ProxyPass http://mydomain:8081/git ProxyPassReverse http://mydomain:8081/git </Location>
巧合的是,我在看到您的答案前幾分鐘就解決了這個問題,但這並不是故事的結局。碰巧在創建新項目時(也可能在其他地方)Gitlab 仍然報告生成的 URL
http
而不是https
協議。例如,一個人希望僅作為反向代理傳遞中的 localhost 訪問 gitlab nginx 伺服器(使用 Omnibus 安裝時,這裡似乎就是這種情況)。為此,您需要以下 Apache 配置:ProxyPreserveHost On <Location /gitlab> ProxyPass http://localhost:8929/gitlab ProxyPassReverse http://localhost:8929/gitlab # Necessary so Gitlab can return https addresses on some generated URLs RequestHeader set X-FORWARDED-PROTOCOL https RequestHeader set X-Forwarded-Ssl on </Location>
然後必須將以下變數注入到 Gitlab 環境中,或者寫入到 中
gitlab.rb
,因此該服務只能作為 localhost 訪問:external_url 'http://localhost:8929/gitlab' # nginx['listen_port'] = 80 # I use this when mapping host 8929 to 80 in docker container nginx['listen_https'] = false gitlab_rails['gitlab_shell_ssh_port'] = 2222 # Following is necessary otherwise Gitlab will generate git URLs pointing to localhost gitlab_rails['gitlab_ssh_host'] = 'git.myexeternaldomain.com'