gitlab-ce將https修改為http

myskies發表於2022-12-27

由於一些未知的原因(猜想應該是gitlab的證書自動renew),近期自部署的gitlab-ce出現了證書問題。

索性我們禁用gitlab的https功能,將期恢復為http。後期我們再在部署一個nginx進行資料轉發,然後在nginx上起用https並設定證書。這樣應該就規避了gitlab的證書錯誤問題。

配置

gitlab-ce的配置檔案位於:/etc/gitlab/gitlab.rb中。而將https變更為http的方法很簡單,只需要配置external_url為 http 打頭即可。

- external_url 'https://gitlab.yourdomain.com:8888'
+ external_url 'http://gitlab.yourdomain.com:8888'

然後使用執行命令:sudo gitlab-ctl reconfigure使其生效。

配置雖然簡單,但測試的時候卻屢屢發生問題,導致開始懷疑人生。

測試

使用chrome開啟地址:http://gitlab.yourdomain.com:8888,卻發現產生了307,轉向的地址為:https://gitlab.yourdomain.com:8888,這會使得我們開始懷疑前面的配置是否生效了。

即使開啟了chrome或firefox的禁用快取功能,訪問原地址仍然是307。這是由於禁用快取功能並沒有禁用瀏覽器的redirects,所以如果在瀏覽器上直接進行測試,則需要先清空瀏覽器的快取。

比如我們將地址輸入位址列後,然後開啟控制檯,接著左鍵點住重新整理按鈕:

image.png

選擇清空快取並且硬載入(Empty cache and hard reload),此時便可以禁用chrome的redirects的快取後完成載入了。

其實除了使用瀏覽器直接測試外,更靠譜的方法是使用一些指令碼,比如curlcurl支援使用-I引數來顯示返回的狀態碼及響應頭。

相同的地址,如果curl並沒有返回307而瀏覽器卻是307則可以確認是瀏覽器的快取問題而不是gitlab的配置問題了。

panjie@panjies-Mac-Pro ~ % curl -I http://gitlab.yourdomain.com:8888
HTTP/1.1 302 Found
Server: nginx
Date: Tue, 27 Dec 2022 04:33:50 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: no-cache
Location: http://gitlab.yourdomain.com:8888/users/sign_in
Pragma: no-cache
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-Request-Id: 01GN8XQC4NVMGZ7VA4S5QRRX2E
X-Runtime: 0.029655
X-Ua-Compatible: IE=edge
X-Xss-Protection: 1; mode=block
Strict-Transport-Security: max-age=63072000
Referrer-Policy: strict-origin-when-cross-origin

此時首頁返回302,回跳地址為:http://gitlab.yourdomain.com:8888/users/sign_in,繼續請求該地址:

panjie@panjies-Mac-Pro ~ % curl -I http://gitlab.yourdomain.com:8888/users/sign_in
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 27 Dec 2022 04:35:02 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: max-age=0, private, must-revalidate
Content-Security-Policy: 
Etag: W/"7aefc583df813a9b66e476d0c11736b1"
Link: </assets/application_utilities-f86a7caa76c1a2f00550828a9303a66e38d2f043e5f21c2bade17a6ddafe50ab.css>; rel=preload; as=style; type=text/css,</assets/application-f8ba2470fbf1e30f2ce64d34705b8e6615ac964ea84163c8a6adaaf8a91f9eac.css>; rel=preload; as=style; type=text/css,</assets/highlight/themes/white-14ba9f209d5cc375d065606896b08ef3d4dc7be19e5b5800958b390d7ab2bd40.css>; rel=preload; as=style; type=text/css
Permissions-Policy: interest-cohort=()
Pragma: no-cache
Set-Cookie: _gitlab_session=e3d88869c1f709d08bb1887a9da8fb9f; path=/; expires=Tue, 27 Dec 2022 06:35:02 GMT; HttpOnly
Vary: Accept
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-Request-Id: 01GN8XSJQC57ANRBDYY8J9P8HF
X-Runtime: 0.068342
X-Ua-Compatible: IE=edge
X-Xss-Protection: 1; mode=block
Strict-Transport-Security: max-age=63072000
Referrer-Policy: strict-origin-when-cross-origin

可見狀態碼為200,非307。此時便可以請放心的去研究瀏覽器的快取問題了。

總結

一直以為瀏覽器的禁用快取用禁用所有快取,沒想到redirects卻是一直走的快取。這導致本來一個非常簡單,早早就已經解決的問題最終卻花費了大概一天的時間。有時候就是這樣,一旦陷入了某個知識陷阱,憑著本能爬出來便會顯示十分不容易。而我們一旦爬出來,以後再有此類問題時,大腦便會發生積極的訊號來告訴你歷史上我們曾經陷入過。

所以在教學過程中,依據自己的經驗來設定更好的設定陷阱也是最佳化教學的一個方向。

相關文章