Puštanje git posrednika u rad na prijenosnom poslužitelju
Stanje
Prihvaćeno. Opisano stanje jest ono koje radi.
Okolnosti
Paket radi na prijenosnom poslužitelju: Apache s PHP-om kao modulom, ne IIS i ne FastCGI. Git posrednik jedini je dio paketa koji ne radi preko doku.php, nego preko vlastite krajnje točke, s PATH_INFO iza imena datoteke. Upravo su ta dva svojstva – zasebna krajnja točka i prijenosni poslužitelj – pri puštanju u rad sudarila na dva mjesta.
Dodatak donosi datoteku web.config. Ona je isključivo za IIS i na ovom poslužitelju nema učinka; njezina su tri zahtjeva morala biti pojedinačno dokazana ili nadomještena.
Mehanizam
AcceptPathInfo po datoteci umjesto za cijeli poslužitelj. Prijenosni Apache u datoteci server/conf/httpd.conf postavlja AcceptPathInfo off za cijeli poslužitelj. Na svaki zahtjev oblika …/git.php/code/{projekt}/{repozitorij}/info/refs zato odgovara pogreškom 404 prije nego što se PHP pokrene – posrednik zahtjev nikad ne vidi. Datoteka .htaccess u mapi dodatka uključuje tu mogućnost samo za git.php:
<Files "git.php"> AcceptPathInfo On </Files>
Postavka za cijeli poslužitelj ostaje netaknuta jer je za ostatak wikija ispravna.
Preostala dva zahtjeva iz datoteke web.config već su bila ispunjena i bila su dokazana, a ne ponovno izgrađena: modul mod_deflate nije učitan, pa nema sažimanja gzip koje bi pokvarilo packfile, a LimitRequestBody nije postavljen. Budući da PHP radi kao modul, i zaglavlje Authorization dolazi do PHP-a bez dodatnih postavki – uz FastCGI za to bi trebalo vlastito pravilo.
Proširenje curl instalirano je naknadno. Prijenos do Azure DevOpsa i cijeli put REST idu preko njega; bez njega se konektor javlja kao neaktivan, preglednik repozitorija se ne učitava, a posrednik prekida rad. Prijenosni poslužitelj ga nije donio. Dodani su datoteka ext/php_curl.dll te ovisnosti libssh2.dll i nghttp2.dll iz službenog paketa php-8.2.13-Win32-vs16-x64.zip; redak extension=curl stoji u datoteci server/php/php.ini.
Putovi provjereni nakon puštanja u rad. Popis je dokaz, a ne obećanje rada:
| Put | Stanje |
|---|---|
git clone, fetch i push preko posrednika | radi; protuprovjera izravno prema Azure DevOpsu potvrđuje gurnutu granu |
| provjera prava po identitetu | prijavljen korisnik bez administratorskih prava na razini readonly: čitanje 200, pisanje 403 |
| preglednik repozitorija s dohvaćanjem mapa | radi |
{{source>ado:…}} izravno na stranici projekta | radi |
{{source>ado:…}} u ladici, pri odabiru datoteke | radi |
| uređivanje pojedinog odjeljka stranice s prikazanim sadržajem Markdown | radi; svako uređivanje pogađa samo svoj odjeljak |
Posljedice
- Datoteku
.htaccessiz mape dodatka nemojte uklanjati. Izgleda suvišno jer uz nju stojiweb.config; bez nje posrednik na ovom poslužitelju odgovara pogreškom 404, a kvar ne izgleda kao problem s postavkama poslužitelja. - Mogućnost
AcceptPathInfonemojte uključivati za cijeli poslužitelj da biste postigli isto. Postavka po datoteci uže je rješenje. - Pri nadogradnji PHP-a curl mora ići zajedno. Proširenje se mora poklapati s točnom izvedbom poslužitelja: ista podverzija, ista sigurnost niti i isti prevoditelj. Pouzdana je provjera usporedba kontrolnog zbroja datoteke
php8ts.dlliz paketa i one na poslužitelju. - Pri prelasku na FastCGI treba iznova provjeriti zaglavlje
Authorization; današnja pretpostavka vrijedi samo za PHP kao modul. max_execution_timeiznosi 30 sekundi. Za provjerene veličine repozitorija bezopasno, kod vrlo velikih sljedeća granica.
Povezane teme
- Tehnička referenca – radnje i ulazne točke
- Koncepti – montiranja, razina vidljivosti i granice
- Kako klonirati montirani repozitorij – git posrednik iz korisnikova kuta
- Dijagnostika: git clone vraća pogrešku 404 – simptom koji ovaj zapis objašnjava