Teknologian jakaminen

Nginx-seitsemän kerroksen (sovelluskerros) käänteinen välityspalvelin: SCGI-välityspalvelin scgi_pass

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Nginx-seitsemän kerroksen (sovelluskerros) käänteinen välityspalvelin
SCGI-agentti scgi_pass

- Artikkelin tiedot -
Tekijä: Li Juncai (jcLee95)
Vieraile CSDN:ssä: https://jclee95.blog.csdn.net
Minun nettisivunihttp://thispage.tech/
Sähköposti: [email protected].
Shenzhen Kiina
Tämän artikkelin osoite:https://blog.csdn.net/qq_28550263/article/details/140253307
HuaWei:https://bbs.huaweicloud.com/blogs/XXXXXXXXXX

[Esittely]: Nginx tarjoaa erilaisia ​​sovelluskerroksen käänteisiä välityspalvelintukea, mukaan lukien proxy_pass, uwsgi_pass, fastcgi_pass ja scgi_pass jne. Niistä proxy_pass-käsky voi hyväksyä URL-parametrin käänteisen välityspalvelimen toteuttamiseksi uWSGI-sovelluspalvelimelle ja scgi_pass-välityspalvelinta SCGI (Simple Common Gateway Interface) -sovellukseen. Nämä direktiivit antavat Nginxille mahdollisuuden käsitellä joustavasti erilaisia ​​taustapalveluita ja -sovelluksia. Tämän artikkelin painopiste on scgi_pass.


Aiheeseen liittyvät artikkelit:
Nginx seitsemän kerroksen käänteinen välityspalvelin: HTTP käänteinen välityspalvelin proxy_pass

Nginx seitsemän kerroksen käänteinen välityspalvelin: UWSGI-välityspalvelin uwsgi_pass
Nginx-seitsemän kerroksen käänteinen välityspalvelin: SCGI-välityspalvelin scgi_pass
Nginx-seitsemän kerroksen käänteinen välityspalvelin: FastCGI-välityspalvelin fastcgi_pass

Lisää kuvan kuvaus tähän


1 Yleiskatsaus

1.1 Mikä on SCGI

SCGI(Simple Common Gateway Interface) -välityspalvelin onNginx Yksi tärkeimmistä tuetuista käänteisistä välityspalvelinmenetelmistä. sisään,SCGIon yksinkertaistettu versioCGI(Common Gateway Interface) -protokolla, joka on suunniteltu tarjoamaan tehokkaampi tapa muodostaa yhteysWeb Palvelimet ja sovellukset.perinteisen kanssaCGIverrattuna,SCGIPysyviä yhteyksiä ja yksinkertaistettua protokollamuotoa käyttämällä pyyntökohtaiset lisäkustannukset vähenevät merkittävästi.

SCGIProtokolla määrittelee standardoidun tavanWeb Välitä pyyntötiedot ja vastaanota vastauksia palvelimen ja sovelluksen välillä. Se käyttää yksinkertaista tekstimuotoa lähettääkseen pyynnön otsikkotiedot, jota seuraa pyynnön runko (jos sellainen on).Tämä muotoilu tekeeSCGISe on sekä helppo toteuttaa että tarjoaa hyvän suorituskyvyn.

1.2 SCGI:n sovellusskenaariot

olla olemassaWebSovellusarkkitehtuurissaSCGIToiminut kutenWebpalvelin (esimNginx ) ja taustasovellukset.kunNginxsaatu asiakkaaltaHTTPPyydettäessä se voi muuntaa nämä pyynnöt muotoiksiSCGImuotoilla ja sitten läpäistäSCGIProtokolla lähetetään taustasovelluspalvelimelle.

Tämä lähestymistapa sopii erityisen hyvin niille, jotka tukevat natiiviaSCGIProtokollaohjelmointikielet ja -kehykset, kutenPythonjotkutWebkehyksiä (esim.Flup)taiRubiiniJotkut sovelluspalvelimet (esimYksisarvinen ).käyttämälläSCGI, nämä sovellukset voivat välttääHTTPJäsentämisen yleiskustannukset, suoraan käsittelystäWebpyyntöjä palvelimelle, mikä parantaa yleistä suorituskykyä.

Käytännön sovelluksissa,SCGIKäyttöskenaarioita ovat muun muassa:

  1. korkea suorituskykyWebSovellus: Sovelluksille, joiden on käsiteltävä useita samanaikaisia ​​pyyntöjä,SCGIVoi tarjota parempaa kuin perinteinenCGIParempi suorituskyky.

  2. Pitkäkestoiset prosessit: Tietyt sovellukset, joiden on säilytettävä tila tai jotka ovat pitkään käynnissä, voivatSCGIjaWebPalvelin ylläpitää jatkuvaa yhteyttä.

  3. Kielikohtaiset optimoinnit: Tietyt ohjelmointikielet tai -kehykset saattavat olla käytössäSCGInäyttää parempaa suorituskykyä tai yksinkertaisempaa toteutusta.

sisäänNginxkäytettyscgi_passkomento, järjestelmänvalvojat voivat helposti sijoittaaHTTPLähetä tukipyyntö eteenpäinSCGI taustasovelluspalvelin.Tämä ei ainoastaan ​​yksinkertaista konfigurointiprosessia, vaan tarjoaa myös mahdollisuuksia optimointiinWebSovelluksen suorituskyky tarjoaa joustavuutta.

2. SCGI-protokollan esittely

2.1 SCGI-protokollan ominaisuudet

SCGI(Simple Common Gateway Interface) -protokolla on yksinkertaistettuCGIprotokolla, joka on erityisesti suunniteltuWeb Tietoliikenne palvelimen ja sovelluksen välillä. Siinä on seuraavat tärkeimmät ominaisuudet:

Yksinkertaisuus:SCGI Protokolla käyttää yksinkertaista tekstimuotoa pyynnön otsikkotietojen välittämiseen, mikä tekee protokollan toteuttamisesta ja virheenkorjauksesta suhteellisen helppoa. Protokollan suunnittelufilosofia on pitää se yksinkertaisena ja samalla tarjota riittävästi toimintoja.

Pysyvät yhteydet: verrattuna perinteiseenCGIeri,SCGI Tukee pysyviä yhteyksiä.tämä tarkoittaa aSCGI Palvelin voi käsitellä useita pyyntöjä luomatta uutta prosessia tai säiettä jokaiselle pyynnölle. Tämä vähentää huomattavasti järjestelmän resursseja ja parantaa yleistä suorituskykyä.

Matala yleiskustannukset: johtuuSCGI Protokollan suunnittelu on yksinkertainen ja se luo vain vähän ylimääräistä lisäkustannuksia pyynnön käsittelyn aikana.Tämä tekeeSCGISoveltuu erityisesti korkean samanaikaisuuden käsittelyynWebSovellusskenaariot.

joustavuus:SCGI Protokolla mahdollistaa mielivaltaisten otsikkotietojen lähettämisen, mikä tarjoaa kehittäjille suurta joustavuutta. Kehittäjät voivat mukauttaa otsikkotietoja tarpeen mukaan vastaamaan tiettyjen sovellusten vaatimuksia.

Kieliriippumattomuus:SCGI Protokollan suunnittelu on ohjelmointikielestä riippumaton.Tämä tarkoittaa, että se voidaan toteuttaa millä tahansa ohjelmointikielellä, jolloin kehittäjät voivat valita kielen, joka parhaiten sopii heidän projektitarpeisiinsa.SCGIpalvelin.

2.2 SCGI vs HTTP-protokolla

Siitä huolimattaSCGIjaHTTPkäytetäänWebViestintäprotokollat, mutta niillä on merkittäviä eroja suunnittelutarkoituksissa ja käyttöskenaarioissa:

Kohdekäyttäjät:HTTPProtokollaa käyttävät pääasiassa asiakkaat (kuten selaimet) jaWebpalvelinten välistä viestintääSCGISopimus keskittyyWebTietoliikenne palvelimen ja taustasovellusten välillä.

Protokollan monimutkaisuus:HTTPProtokolla on suhteellisen monimutkainen ja sisältää suuren määrän otsikkotietoa ja menetelmiä tukemaan erilaisiaWeb interaktiivinen kohtaus. Verrattuna,SCGIProtokolla on yksinkertaisempi ja sisältää vain tarvittavat tiedot pyyntöjen ja vastausten toimittamiseen.

Suorituskykynäkökohdat: sisäänWebKäytetään palvelimen ja sovelluksen välilläSCGIsijastaHTTPProtokollan jäsentämisen yleiskustannuksia voidaan vähentää, koskaSCGI Muoto on yksinkertaisempi ja suorempi. Tämä voi tuoda merkittäviä suorituskyvyn parannuksia korkean samanaikaisuuden skenaarioissa.

Yhteyden hallinta:HTTP/1.1Pysyvien yhteyksien käsite otettiin käyttöön, mutta vuonnaWebKäytetään palvelimen ja sovelluksen välilläHTTPLisäyhteydenhallintaa voidaan silti tarvita.SCGISisäänrakennettu tuki pysyville yhteyksille yksinkertaistaa tätä prosessia.

käytettävät kohtaukset:HTTPSe on Internetin perusprotokolla ja sitä voidaan soveltaa useisiinWebviestintäskenaariota.SCGIkäytetään pääasiassaWebSisäinen viestintä palvelimien ja taustasovellusten välillä, erityisesti tilanteissa, joissa vaaditaan tehokasta käsittelyä.

2.3 SCGI vs FastCGI

SCGIjaFastCGIKaikkiCGIParanneltu versioWeb Sovelluksen suorituskyky. Niissä on joitain yhtäläisyyksiä, mutta myös joitain keskeisiä eroja:

Protokollan monimutkaisuus:SCGIsopimussuhdeFastCGIyksinkertaisempi.SCGIKäyttää yksinkertaista tekstimuotoa otsikkotietojen välittämiseenFastCGI Käytä binaarimuotoa.Tämä tekeeSCGIHelpompi toteuttaa ja korjata, mutta saattaa olla hieman huonompiFastCGIesitys.

  1. Multipleksointi:FastCGITukee useiden pyyntöjen käsittelyä yhdessä yhteydessä (multipleksointi).SCGI Yhtä yhteyttä kohden käsitellään yleensä vain yksi pyyntö. Tämä tarkoittaa, että tietyissä erittäin samanaikaisissa skenaarioissaFastCGISaattaa toimia paremmin.

  2. Tietueen tyyppi:FastCGITietuetyyppejä on useita (esim.STDINSTDOUTSTDERRjne.), mikä mahdollistaa tarkemman hallinnan.SCGIKäytetään yksinkertaisempaa lähestymistapaa, jossa keskitytään pääasiassa pyyntöjen ja vastausten välittämiseen.

  3. Kielituki: johtuuFastCGI Mitä kauemmin se on ollut olemassa, sitä laajempaa sen tuki on todennäköisesti eri ohjelmointikielissä ja -kehyksissä. Kuitenkin,SCGISen yksinkertaisuus tekee sen toteuttamisesta joillakin kielillä mahdollisesti yksinkertaisempaa.

  4. Suorituskyky: Useimmissa tapauksissaSCGIjaFastCGI Suorituskykyero ei ole merkittävä. Käytettävän protokollan valinta riippuu usein erityisistä sovellustarpeista, kehityskielituesta ja henkilökohtaisista mieltymyksistä.

3. scgi_pass-direktiivi Nginxissä

3.1 scgi_pass-käskyn perussyntaksi

olla olemassaNginxKonfiguroidaan,scgi_passDirektiiviä käytetään pyynnön välittämiseenSCGI Keskeiset ohjeet palvelimelle.se määritteleeNginxjolle pyyntö tulee lähettääSCGIPalvelin tai palvelinryhmä.

scgi_passKomennon perussyntaksi on seuraava:

scgi_pass address;
  • 1

sisään,addressSe voi olla seuraavissa muodoissa:

  1. verkkotunnus taiIPOsoite ja portin numero:

Esimerkiksi:scgi_pass localhost:9000;

tässä tapauksessa,NginxPyyntö välitetään palvelimelle, joka toimii paikallisessa isännässä ja kuuntelee porttia 9000.SCGIpalvelin.

  1. UnixVerkkotunnuksen pistorasian polku:

Esimerkiksi:scgi_pass unix:/tmp/scgi.socket;

tässä,Nginxläpäisee määritetynUnixverkkotunnuksen pistokeSCGI Palvelinviestintä.Tätä menetelmää käytetään yleensäSCGIpalvelin kanssaNginxSamalla koneella ajaminen voi parantaa suorituskykyä.

  1. Ylävirran palvelinryhmän nimi:

Esimerkiksi:scgi_pass scgi_backend;

Tässä käytössäscgi_backendon yksi sisäänNginx Ennalta määritetty ylävirran palvelinryhmä määritystiedostossa. Tämän avulla voit ottaa käyttöön edistyneitä ominaisuuksia, kuten kuormituksen tasapainotuksen ja vikasietoisuuden.

scgi_passOhjeet ovat yleensä mukanalocationkäytetään lohkoissa käsittelemään tiettyjäURL-osoite-osoite polku. Esimerkiksi:

location /scgi/ {
    scgi_pass localhost:9000;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

Tässä esimerkissä kaikki/scgi/Alussa olevat pyynnöt välitetään paikalliseen porttiin 9000.SCGIpalvelin.

include scgi_params;lauseke sisältää ennalta määritetyn määritystiedoston, joka asettaa sarjanSCGI parametri.Nämä parametrit määrittelevätNginxmitenHTTPPyyntötiedot muunnetaan muotoonSCGIkysyä.

Se kannattaa huomioidascgi_passDirektiivejä voidaan yhdistää muihinNginx Direktiivejä käytetään yhdessä monimutkaisempien kokoonpanojen aikaansaamiseksi.Voit esimerkiksi käyttääifEhdolliset lausunnot eri vaihtoehtojen valitsemiseksi eri ehtojen perusteellaSCGIpalvelin:

location / {
    if ($request_method = POST) {
        scgi_pass localhost:9001;
    }
    scgi_pass localhost:9000;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Tässä esimerkissäLÄHETTÄÄPyynnöt välitetään porttiin 9001 ja kaikki muut pyynnöt porttiin 9000.

3.2 scgi_pass vs proxy_pass

scgi_passjaproxy_passNe ovat kaikki yleisesti käytettyjä käänteisiä välityspalvelinohjeita, ja ne kaikki välittävät pyynnöt taustapalvelimelle.

sisään,scgi_passSuunniteltu käytettäväksi tuen kanssaSCGIProtokolla taustapalvelinviestintään.SCGIon yksinkertaistettuCGIprotokolla, suunniteltuWeb Tehokas tiedonsiirto palvelimien ja sovellusten välillä. Verrattuna,proxy_passon yleisempi direktiivi, jota voidaan käyttää välityspalvelimena useille protokollille, mukaan lukienHTTPHTTPSFastCGIodota.

Käytössäscgi_passtunnin,NginxvastaanottaaHTTPPyyntö muunnetaan muotoonSCGImuodossa ja lähetetään sitten taustajärjestelmäänSCGI palvelin. Tämän prosessin aikanaNginx Hoitaa protokollan muuntamisen varmistaakseen, että taustapalvelin voi ymmärtää ja käsitellä pyynnön oikein.japroxy_passSitä käytetään yleensä välittämään pyyntö taustapalvelimelle ehjänä ilman protokollan muuntamista.

Toinen tärkeä ero on se, miten se on konfiguroitu.scgi_passYleensä tarvitaan yhteistyötäscgi_paramasetukseen käytettävä ohjeSCGI Protokollan edellyttämät parametrit. Esimerkiksi:

location /app/ {
    scgi_pass localhost:9000;
    include scgi_params;
    scgi_param SCRIPT_FILENAME /path/to/app$fastcgi_script_name;
}
  • 1
  • 2
  • 3
  • 4
  • 5

Tässä esimerkissäinclude scgi_paramsesitelty ennaltaSCGIparametrit, kunscgi_paramDirektiivejä käytetään lisäparametrien asettamiseen.

Verrattuna,proxy_passKokoonpano on yleensä yksinkertaisempi ja selkeämpi:

location /api/ {
    proxy_pass http://backend_server;
}
  • 1
  • 2
  • 3

Mitä tulee suorituskykyyn,scgi_passjaproxy_pass Jokaisella on omat etunsa.Erityisesti suunniteltu käytettäväksiSCGIprotokollasovellus,scgi_passvoi tarjota paremman suorituskyvyn, koska se välttääHTTP protokollan yläpuolella. Kuitenkin,proxy_passSen monipuolisuus tekee siitä joustavamman ja voi mukautua erilaisiin taustapalvelimiin ja protokolliin.

Turvallisuus on myös huomioitava näkökohta.koskascgi_passomistettuSCGI protokollaa, joka saattaa joissain tapauksissa tarjota paremman suojan, koska se rajoittaa sen kommunikointia taustapalvelimen kanssa.japroxy_passSen monipuolisuuden vuoksi voidaan tarvita lisämäärityksiä turvallisuuden takaamiseksi, erityisesti käsiteltäessä arkaluonteisia tietoja.

Käytännön sovelluksissa valitse käyttöscgi_passedelleenproxy_pass Riippuu pääasiassa taustasovelluksen ominaisuuksista ja vaatimuksista.Jos taustasovellus on erityisesti suunniteltu käytettäväksiSCGIsopimus siisscgi_pass Voisi olla parempi valinta.Jos tausta on vakioWebPalvelin tai sovellus, ei tuettu tai pakollinenSCGI,Niinproxy_passsaattaa olla sopivampi.

3.3 Kuinka scgi_pass toimii

scgi_passOhje onNginxkäytetään käsittelyssäSCGI (Simple Common Gateway Interface) ydinohjeet pyydetään. Se toimii useissa vaiheissa asiakkaan pyynnön vastaanottamisesta käsitellyn vastauksen palauttamiseen asiakkaalle.

Ensinnäkin milloinNginxVastaanotettu asiakkaaltaHTTP Kun pyyntö tehdään, se päättää, kuinka pyyntö käsitellään konfiguraatiotiedoston sääntöjen perusteella.Jos pyyntö vastaa, käytäscgi_passohjeen sijaintilohko,NginxalkaaSCGIkäsittelyvirtaa.

olla olemassaSCGIKäsittelyprosessin aikana,NginxEnsin luommeSCGI Palvelinyhteys.Tämä yhteys voi ollaTCPpistorasia taiUnixDomain socket, riippuenscgi_pass Ohjeessa ilmoitettu osoite. Jos käytetään ylävirran palvelinryhmää,NginxTietty palvelin valitaan myös määritetyn kuormituksen tasapainotusalgoritmin perusteella.

Kun yhteys on muodostettu,NginxtahtoaHTTPPyyntö muunnetaan muotoonSCGI Muoto.Tämä prosessi sisältää luomisenSCGIPyynnön otsikko ja pyynnön runko.SCGIPyynnön otsikko sisältää joukon avain-arvo-pareja, jotka tarjoavat pyynnön metatietoja, kuten pyyntömenetelmän, polun, kyselymerkkijonon, asiakkaanIP Osoite jne.Suurin osa näistä tiedoista on peräisin alkuperäisestäHTTPpyyntöotsikot, mutta voivat myös sisältääscgi_paramKomennon asettamat lisäparametrit.

SCGI Pyynnön otsikon muoto on erityinen: se alkaa numerolla, joka ilmaisee koko otsikon pituuden, jota seuraa kaksoispiste, sitten sarja avainarvopareja, jotka päättyvät nollamerkkiin ja lopuksi pilkkuun.Esimerkiksi yksinkertaistettuSCGIPyynnön otsikko voi näyttää tältä:

70:CONTENT_LENGTH27SCGI1REQUEST_METHODGETquery_string,
  • 1

Tässä esimerkissä "70" edustaa otsikon kokonaispituutta, jota seuraa kolme avainarvoparia:CONTENT_LENGTHSCGIjaREQUEST_METHOD

Kun olet lähettänyt pyynnön otsikon,Nginx Pyynnön runko lähetetään (jos sellainen on).vartenSAADAPyynnöillä ei yleensä ole pyyntörunkoa, vaan pyyntöönLÄHETTÄÄtaiLAITTAAPyyntö voi sisältää lomaketietoja tai muun tyyppistä sisältöä.

SCGI Kun palvelin on vastaanottanut pyynnön, se käsittelee pyynnön ja luo vastauksen.Vastaus lähetetään takaisin saman yhteyden kauttaNginxSCGIVastauksen muoto on suhteellisen yksinkertainen Se sisältää vastauksen otsikot ja vastauksen tekstin, jotka on erotettu tyhjällä rivillä.

Nginxotettu vastaanSCGIPalvelimen vastauksen jälkeen se muunnetaan takaisin muotoonHTTP Vastauksen muoto.Tämä prosessi sisältää jäsentämisenSCGIVastausten otsikot, aseta asianmukaisestiHTTPvastausotsikot ja välitä sitten vastauksen runko ehjänä asiakkaalle.

koko prosessissa,Nginx Vastaa myös yhteyden elinkaaren hallinnasta.Tämä sisältää yhteyden aikakatkaisujen käsittelyn, yhteyden yhdistämisen hallinnan (jos käytössäkeepalive ), käsittele verkkovirheitä jne. Jos käsittelyn aikana tapahtuu virhe,NginxAsiakkaalle palautetaan asianmukainen virhevastaus konfiguraation mukaisesti.

lisäksi,scgi_pass Työprosessi on esteetön.Tämä tarkoittaaNginxVoi käsitellä useitaSCGI pyyntöjä luomatta uutta prosessia tai säiettä jokaiselle pyynnölle.Tämä muotoilu tekeeNginxKyky käsitellä tehokkaasti suuria määriä samanaikaisia ​​yhteyksiä.

4. Määritä Nginx käyttämään scgi_passia

4.1 Esimerkki peruskokoonpanosta

olla olemassaNginxKeskikokoinen kokoonpanoscgi_pass Perusesimerkki on suhteellisen yksinkertainen.Tämä kokoonpano salliiNginxVälitä tietyn polun pyynnöt osoitteeseenSCGI palvelin. Tässä on esimerkki peruskokoonpanosta:

Ensin aukiNginxPäämääritystiedosto, joka sijaitsee yleensä osoitteessa/etc/nginx/nginx.conftai/usr/local/nginx/conf/nginx.conf .Tässä tiedostossa meidän onhttpLisää tai muokkaa lohkon sisälläserverpala.

olla olemassaserverlohko, lisäämme alocationdirektiiviä sen määrittelemiseksi, mille pyynnöt on välitettäväSCGI palvelin.Jos esimerkiksi haluamme lisätä kaikki/scgi/Alussa oleva pyyntö välitetään palvelimelle, joka toimii paikallisessa portissa 9000.SCGIPalvelin, voit käyttää seuraavia määrityksiä:

http {
    server {
        listen 80;
        server_name example.com;

        location /scgi/ {
            scgi_pass localhost:9000;
            include scgi_params;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Tässä kokoonpanossalisten 80ohjeet kertovatNginxKuuntele portista 80 (vakioHTTPportti).server_nameDirektiivi määrittelee verkkotunnuksen, johon tämän palvelinlohkon tulee vastata.

location /scgi/lohko määrittää kaiken/scgi/alkuURL-osoite-osoite Kaikki pyynnöt tulee käsitellä.Käytämme tämän lohkon sisälläscgi_passkomennolla määritettäväksiSCGI Palvelimen osoite ja portti. Tässä esimerkissäSCGIPalvelin toimii samalla koneella (localhost) portista 9000.

include scgi_params;lauseke sisältää ennalta määritetyn määritystiedoston, joka asettaa sarjanSCGI parametri.Nämä parametrit määrittelevätNginxmitenHTTPPyyntötiedot muunnetaan muotoonSCGI kysyä.Tyypillisesti tämä tiedosto sijaitsee/etc/nginx/scgi_paramstai/usr/local/nginx/conf/scgi_params

Jos sinunSCGIPalvelin vaatii lisäparametreja, joita voidaan käyttääscgi_param asetettava komento.Esimerkiksi jos sinun on asetettavaSCRIPT_FILENAMEParametrit voidaan määrittää seuraavasti:

location /scgi/ {
    scgi_pass localhost:9000;
    include scgi_params;
    scgi_param SCRIPT_FILENAME /path/to/your/scripts$fastcgi_script_name;
}
  • 1
  • 2
  • 3
  • 4
  • 5

tässä,SCRIPT_FILENAMEParametriksi asetetaan komentosarjan todellinen polku.$fastcgi_script_nameOnNginxMuuttuja, joka edustaa pyydettyä komentosarjan nimeä.

Jos sinunSCGIPalvelimen käyttöUnixverkkotunnuksen pistokeTCPPortti voidaan määrittää seuraavasti:

location /scgi/ {
    scgi_pass unix:/tmp/scgi.socket;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

Tässä esimerkissäNginxsijoitetaan kautta/tmp/scgi.socket/Unixverkkotunnuksen pistokeSCGIPalvelinviestintä.

Kun määritys on valmis, sinun on ladattava tai käynnistettävä uudelleenNginx jotta muutokset tulevat voimaan. Seuraavia komentoja voidaan käyttää:

sudo nginx -s reload
  • 1

tai

sudo systemctl restart nginx
  • 1

Tämä peruskokoonpano on käytettäväscgi_pass Tarjoaa hyvän lähtökohdan. Erityistarpeistasi riippuen saatetaan tarvita lisää säätöjä ja optimointeja. Saatat joutua esimerkiksi määrittämään puskuroinnin, aikakatkaisut tai alkupään palvelinryhmiä kuormituksen tasapainotusta varten. Näitä konfigurointivaihtoehtoja käsitellään yksityiskohtaisesti seuraavissa luvuissa.

4.2 Ylävirran moduulin käyttö

olla olemassaNginx , ylävirran moduulin avulla voimme määrittää joukon palvelimia, joita voidaan käyttää kuormituksen tasapainottamiseen ja vikasietotilaan.Milloin kanssascgi_passYlävirran moduulia voidaan parantaa huomattavasti, kun sitä käytetään yhdessä direktiivien kanssaSCGIAgentin joustavuus ja luotettavuus.

Ylävirran moduulin perussyntaksi on seuraava:

upstream backend_name {
    server address1;
    server address2;
    # 更多服务器...
}
  • 1
  • 2
  • 3
  • 4
  • 5

Tässä kokoonpanossabackend_nameon tälle palvelinryhmälle määrittämäsi nimi, jota voidaan käyttää myöhemminscgi_pass mainittu direktiivissä.jokainenserverDirektiivi määrittelee taustapalvelimen osoitteen, joka voi ollaIPOsoite ja portin numero, joka voi myös ollaUnixVerkkotunnuksen pistorasian polku.

Voimme esimerkiksi määrittää tiedoston nimeltäscgi_serversylävirran ryhmä:

upstream scgi_servers {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server unix:/tmp/scgi.socket;
}
  • 1
  • 2
  • 3
  • 4
  • 5

Kun olemme määrittäneet ylävirran, voimmescgi_passKäytä sitä direktiivissä:

location /app/ {
    scgi_pass scgi_servers;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

niin,NginxPyyntö jaetaan osoitteeseenscgi_serversryhmän palvelimia.

Ylävirran moduuli tarjoaa erilaisia ​​kuormituksen tasapainotusalgoritmeja, jotka voidaan konfiguroida lisäämällä parametreja palvelinkäskyn jälkeen:

  1. Round-robin (oletus): Jaa pyynnöt kullekin palvelimelle peräkkäin.

  2. Painotettu kysely: Voit määrittää painon jokaiselle palvelimelle. Palvelimet, joilla on suurempi painoarvo, saavat enemmän pyyntöjä. Esimerkiksi:

upstream scgi_servers {
    server 127.0.0.1:9000 weight=3;
    server 127.0.0.1:9001 weight=1;
}
  • 1
  • 2
  • 3
  • 4
  1. Vähiten yhteyksiä: Lähetä pyyntö palvelimelle, jolla on vähiten tällä hetkellä aktiivisia yhteyksiä.käyttääleast_connohje:
upstream scgi_servers {
    least_conn;
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  1. IPHash: asiakkaan mukaanIPOsoitteen hajautusarvo palvelimen valitsemiseksi voi varmistaa, että se tulee samastaIP Pyynnöt lähetetään aina samalle palvelimelle (ellei kyseinen palvelin ole käytettävissä).käyttääip_hashohje:
upstream scgi_servers {
    ip_hash;
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
}
  • 1
  • 2
  • 3
  • 4
  • 5

Ylävirran moduuli tarjoaa myös palvelimen kunnontarkistus- ja vikasietotoiminnot.Voimme käyttää esimerkiksimax_failsjafail_timeoutViantunnistuksen konfigurointiparametrit:

upstream scgi_servers {
    server 127.0.0.1:9000 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:9001 max_fails=3 fail_timeout=30s;
}
  • 1
  • 2
  • 3
  • 4

Jos palvelin epäonnistuu tässä kokoonpanossa kolme kertaa peräkkäin 30 sekunnin sisällä,NginxSe merkitään ei saatavilla, eikä sille lähetetä enempää pyyntöjä seuraavien 30 sekunnin aikana.

Lisäksi voimme käyttääbackupParametrit, joilla määritetään varapalvelin, jota käytetään vain, kun kaikki ensisijaiset palvelimet eivät ole käytettävissä:

upstream scgi_servers {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server 127.0.0.1:9002 backup;
}
  • 1
  • 2
  • 3
  • 4
  • 5

Käyttämällä oikein alkupään moduulia voimme rakentaa erittäin saatavilla olevan ja korkean suorituskyvynSCGI Agenttiklusteri. Tämä ei ainoastaan ​​paranna sovelluksen yleistä suorituskykyä, vaan lisää myös järjestelmän luotettavuutta ja vikasietoisuutta. Käytännön sovelluksissa meidän tulisi valita sopivat kuormituksen tasapainotusstrategiat ja vikasietomekanismit erityistarpeiden ja skenaarioiden perusteella parhaan järjestelmän suorituskyvyn saavuttamiseksi.

4.3 Unix socket vs TCP socket

KonfiguraatiossaNginx/scgi_passdirektiivissä, meillä on kaksi päävaihtoehtoa määritettävänäSCGIPalvelimen osoite:Unixverkkotunnuksen pistorasia jaTCP pistorasia. Molemmilla menetelmillä on omat etunsa ja haittansa, ja se, mikä menetelmä valitaan, riippuu sovelluskohtaisista skenaarioista ja tarpeista.

UnixVerkkoaluepistokkeet ovat eräänlainen prosessien välinen viestintä (IPC ) -mekanismi, jonka avulla saman koneen prosessit voivat kommunikoida tehokkaasti.olla olemassaNginxKonfiguroidaan,Unix Verkkoalueen socketin osoite esitetään yleensä tiedostopoluna. Esimerkiksi:

scgi_pass unix:/tmp/scgi.socket;
  • 1

käyttääUnix Verkkoaluepistokkeiden tärkein etu on niiden suorituskyky.Koska viestintä tapahtuu samalla koneella, eikä sen tarvitse käydä verkkoprotokollapinon läpiUnixDomain-socketit ovat yleensä pienempiä kuinTCP Pistorasiat ovat nopeampia.he välttävätTCP/IP Protokollan aiheuttamat ylimääräiset kustannukset, kuten datapakettien kapselointi ja kapseloinnin purkaminen, verkon ruuhkanhallinta jne.Tämä tekeeUnixDomain-pistokkeet soveltuvat erityisestiNginxjaSCGIPalvelin toimii samalla koneella.

Toinen käyttääUnix Domain-sockettien etuna on turvallisuus. Koska viestintä rajoittuu paikalliseen koneeseen, se on luonnollisesti immuuni verkon yli tuleville hyökkäyksille. Lisäksi tiedostojärjestelmän käyttöoikeuksia voidaan käyttää hallitsemaan pääsyä socket-tiedostoihin, mikä tarjoaa lisäsuojaustasoa.

Kuitenkin,Unix Myös verkkotunnuspistokkeilla on rajoituksensa. Ilmeisimmin niitä voidaan käyttää vain prosessien väliseen viestintään samassa koneessa.josNginxjaSCGIPalvelimen on toimittava toisella koneella, joten sitä ei voi käyttääUnixverkkotunnuksen pistorasia.

Verrattuna,TCPPistorasian käyttöIP osoite ja portin numero määrittääksesi palvelimen osoitteen. Esimerkiksi:

scgi_pass 127.0.0.1:9000;
  • 1

TCP Pistorasioiden tärkein etu on joustavuus.ne sallivatNginxjaSCGI Palvelimet toimivat eri koneilla, mikä on välttämätöntä hajautetuissa järjestelmissä tai sovelluksissa, jotka vaativat horisontaalista skaalautuvuutta.käyttääTCPpistorasiat, voimme helposti toteuttaa kuormituksen tasapainotuksen, jakaa pyynnöt useilleSCGIpalvelin.

Toinen etu on seTCP Socketit helpottavat verkkotason valvontaa ja virheenkorjausta. Tavallisten verkkotyökalujen avulla voimme helposti tarkistaa viestintätilan ja diagnosoida ongelmia.

Kuitenkin,TCPPistorasioiden suurin haitta on, että suorituskyky on hieman pienempi kuinUnix verkkotunnuksen pistorasia. Vaikka kommunikoitaisiin samalla koneella, datan on läpäistävä koko verkkoprotokollapino, mikä tuo mukanaan lisäkustannuksia.Lisäksi käytäTCPSocketit voivat vaatia lisätietoturvanäkökohtia, kuten palomuurisääntöjen määrittämistäSSL/TLSSalaus jne.

Valittaessa käyttöäUnixDomain socket edelleenTCPPistorasiaa käytettäessä on otettava huomioon seuraavat tekijät:

  1. Suorituskykyvaatimukset: Jos tavoittelet parasta suorituskykyä jaNginxjaSCGIPalvelin on samalla koneella ja se tulee valitaUnixverkkotunnuksen pistorasia.

  2. Käyttöönottoarkkitehtuuri: josNginxjaSCGIJos palvelimen on toimittava eri koneilla tai sen on saavutettava kuormituksen tasapainotus, sinun on käytettäväTCPpistorasia.

  3. Turvallisuusvaatimukset: Jos turvallisuus on ensisijainen huolenaihe eikä laitteiden välistä viestintää vaadita,UnixVerkkotunnuksen pistokkeet voivat olla parempi valinta.

  4. Skaalautuvuus: Jos on odotettavissa, että saatat tarvitaSCGIJos haluat skaalata palvelimen useisiin koneisiin, käytäTCPPistorasiat on helpompi virittää skeemaksi.

  5. Vianetsintä- ja seurantatarpeet: Jos sinun on käytettävä tavallisia verkkotyökaluja valvontaan ja virheenkorjaukseen,TCPPistorasiat voivat olla sopivampia.

Lyhyesti,Unixverkkotunnuksen pistorasia jaTCP Pistorasiat ovat kaikki kelvollisia vaihtoehtoja. Valintasi tulee perustua erityisiin sovellustarpeisiisi, suorituskykyvaatimuksiisi ja käyttöönottoympäristöösi.Monissa tapauksissa, varsinkin kun pyritään korkeaan suorituskykyyn jaNginxjaSCGIKun palvelimet ovat rinnakkain samassa koneessa,Unix Verkkotunnuksen pistokkeet voivat olla parempi valinta. Mutta jos tarvitaan suurempaa joustavuutta tai hajautettua käyttöönottoa,TCPPistorasiat ovat välttämätön vaihtoehto.

5. Tarkennettu scgi_pass-määritys

Tässä luvussa käsitellään yksityiskohtaisestiscgi_passKolme keskeistä edistynyttä konfigurointinäkökohtaa: aikakatkaisuasetukset, puskurin määritys ja yhteysvarannon hallinta.

5.1 Aikakatkaisuasetus

Aikakatkaisuasetus on varmistettavaNginxjaSCGI Avain palvelimien välisen viestinnän luotettavuuteen. Oikea aikakatkaisumääritys voi estää pyyntöjen keskeytyksen loputtomiin, jos ongelmia ilmenee, ja samalla tarjota riittävästi käsittelyaikaa hitaille yhteyksille.

NginxTarjoaa useitascgi_passAiheeseen liittyvät aikakatkaisuohjeet:

Ensinnäkinscgi_connect_timeout, joka määritteleeNginxjaSCGI Suurin odotusaika palvelimelle yhteyden muodostamiseen. Jos yhteyttä ei voida muodostaa määritetyn ajan kuluessa,Nginx palauttaa virheilmoituksen. Esimerkiksi:

scgi_connect_timeout 60s;
  • 1

Tämä kokoonpano asettaa yhteyden aikakatkaisun 60 sekuntiin.

Toiseksi,scgi_read_timeoutnimettyNginxalkaenSCGI Palvelimen aikakatkaisu vastausten lukemiseen.josSCGI Palvelin ei ole lähettänyt tietoja tänä aikana ja yhteys suljetaan. Esimerkiksi:

scgi_read_timeout 60s;
  • 1

viimeinkin,scgi_send_timeoutjo asetettuNginxKohtiSCGI Palvelimen aikakatkaisujakso lähettää pyyntöjä.Jos määritetyn ajan sisälläSCGI Palvelin ei vastaanottanut tietoja ja yhteys suljetaan. Esimerkiksi:

scgi_send_timeout 60s;
  • 1

Näitä aikakatkaisuasetuksia tulee säätää todellisen sovelluksen tarpeiden mukaan. Useimmille sovelluksille oletusarvot riittävät. Mutta joidenkin pitkäaikaisten pyyntöjen kohdalla voi olla tarpeen suurentaa näitä aikakatkaisuarvoja.

5.2 Puskurin konfigurointi

Puskurin konfigurointi optimointia vartenNginxjaSCGI Tiedonsiirto palvelimien välillä on kriittistä. Kohtuulliset puskuriasetukset voivat parantaa vastenopeutta ja vähentää resurssien kulutusta.

scgi_buffer_sizeOhjeet lukemisen asettamiseenSCGI Palvelimen vastauksen ensimmäisen osan puskurin koko. Tämä sisältää yleensä pienen vastauksen otsikon. Esimerkiksi:

scgi_buffer_size 4k;
  • 1

scgi_buffersOhjeet on määritelty lukemista vartenSCGI Palvelimen vastausten puskurien määrä ja koko. Esimerkiksi:

scgi_buffers 8 4k;
  • 1

Tämä kokoonpano luo 8 puskuria, joiden koko on 4k.

Jos vastaus ei mahdu kokonaan muistiin, voit käyttääscgi_max_temp_file_sizeDirektiivi tilapäisten tiedostojen enimmäiskoon rajoittamisesta:

scgi_max_temp_file_size 1024m;
  • 1

Tämä rajoittaa väliaikaisten tiedostojen enimmäiskoon 1024 megatavuun.

Voit käyttää suuria vastauksia vartenscgi_busy_buffers_sizeDirektiivi varattu-tilassa käytettävissä olevan puskurin koon rajoittamisesta:

scgi_busy_buffers_size 8k;
  • 1

Nämä puskuriasetukset tulee säätää sovelluksesi ominaisuuksien ja palvelinresurssien mukaan optimaalisen suorituskyvyn saavuttamiseksi.

5.3 Yhteyspoolin hallinta

Yhteyspoolin hallinta on optimoituNginxjaSCGI Toinen tärkeä näkökohta palvelimien välisessä viestinnässä. Käyttämällä yhteyksiä uudelleen, uusien yhteyksien muodostamisen yleiskustannuksia voidaan vähentää merkittävästi ja yleistä suorituskykyä parantaa.

scgi_keepaliveDirektiivi ylävirran konfiguroimiseksiSCGI Käyttämättömien yhteyksien enimmäismäärä, jonka palvelin voi pitää hengissä. Esimerkiksi:

scgi_keepalive 10;
  • 1

Tämän kokoonpanon avulla jokainen työntekijäprosessi voi ylläpitää jopa 10 käyttämättömänä olevaa hengissäpitoyhteyttä.

voi käyttääscgi_http_versionkomennolla määritettäväksiNginxkanssa käytettySCGIpalvelinviestintäHTTPProtokollaversio:

scgi_http_version 1.1;
  • 1

käyttääHTTP/1.1Pitkäikäiset yhteydet voidaan ottaa käyttöön, mikä on kriittistä yhteyspoolin tehokkuuden ylläpitämisen kannalta.

Lisäksi voi käyttääscgi_next_upstreamOhjeet sen hallitsemiseksi, missä olosuhteissa pyynnöt tulee välittää seuraavalle palvelimelle:

scgi_next_upstream error timeout invalid_header http_500;
  • 1

Tämä kokoonpano määrittää, mitä tehdä, kun tapahtuu virhe, aikakatkaisu, virheellinen otsikko vastaanotetaan taiHTTP Jos virhe on 500, pyyntö tulee välittää seuraavalle palvelimelle.

6. Python flup web-käyttöönottotapaus

kirjoitettavaksi

6.1 Vaiheen yhteenveto

6.2 Konteissa tapahtuva käyttöönotto

7. Yhteenveto

Tässä artikkelissa käsitellään yksityiskohtaisestiNginxkeskelläscgi_passohjeiden soveltaminen kiinnittäen erityistä huomiotaPython Sovelluksen konfigurointi ja käyttöönotto.Esittelimme ensinSCGIProtokollan ominaisuudet ja edut selitettiin sitten perusteellisesti.scgi_pass Ohjeiden perussyntaksi ja edistyneet konfigurointivaihtoehdot.Käytä käytännön tapauksia, osoita, mitenPython FlupKehyksen kokoonpanoscgi_pass, mukaan lukien perusasetukset, kuormituksen tasapainotus, yhteyden yhdistäminen ja puskurinhallinta.