2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
[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.
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.
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:
korkea suorituskykyWebSovellus: Sovelluksille, joiden on käsiteltävä useita samanaikaisia pyyntöjä,SCGIVoi tarjota parempaa kuin perinteinenCGIParempi suorituskyky.
Pitkäkestoiset prosessit: Tietyt sovellukset, joiden on säilytettävä tila tai jotka ovat pitkään käynnissä, voivatSCGIjaWebPalvelin ylläpitää jatkuvaa yhteyttä.
Kielikohtaiset optimoinnit: Tietyt ohjelmointikielet tai -kehykset saattavat olla käytössäSCGInäyttää parempaa suorituskykyä tai yksinkertaisempaa toteutusta.
sisäänNginxkäytettyscgi_pass
komento, 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.
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.
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ä.
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.
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.
Tietueen tyyppi:FastCGITietuetyyppejä on useita (esim.STDIN、STDOUT、STDERRjne.), mikä mahdollistaa tarkemman hallinnan.SCGIKäytetään yksinkertaisempaa lähestymistapaa, jossa keskitytään pääasiassa pyyntöjen ja vastausten välittämiseen.
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.
Suorituskyky: Useimmissa tapauksissaSCGIjaFastCGI Suorituskykyero ei ole merkittävä. Käytettävän protokollan valinta riippuu usein erityisistä sovellustarpeista, kehityskielituesta ja henkilökohtaisista mieltymyksistä.
olla olemassaNginxKonfiguroidaan,scgi_pass
Direktiiviä käytetään pyynnön välittämiseenSCGI Keskeiset ohjeet palvelimelle.se määritteleeNginxjolle pyyntö tulee lähettääSCGIPalvelin tai palvelinryhmä.
scgi_pass
Komennon perussyntaksi on seuraava:
scgi_pass address;
sisään,address
Se voi olla seuraavissa muodoissa:
Esimerkiksi:scgi_pass localhost:9000;
tässä tapauksessa,NginxPyyntö välitetään palvelimelle, joka toimii paikallisessa isännässä ja kuuntelee porttia 9000.SCGIpalvelin.
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ä.
Esimerkiksi:scgi_pass scgi_backend;
Tässä käytössäscgi_backend
on 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_pass
Ohjeet ovat yleensä mukanalocation
käytetään lohkoissa käsittelemään tiettyjäURL-osoite-osoite polku. Esimerkiksi:
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
}
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_pass
Direktiivejä voidaan yhdistää muihinNginx Direktiivejä käytetään yhdessä monimutkaisempien kokoonpanojen aikaansaamiseksi.Voit esimerkiksi käyttääif
Ehdolliset lausunnot eri vaihtoehtojen valitsemiseksi eri ehtojen perusteellaSCGIpalvelin:
location / {
if ($request_method = POST) {
scgi_pass localhost:9001;
}
scgi_pass localhost:9000;
include scgi_params;
}
Tässä esimerkissäLÄHETTÄÄPyynnöt välitetään porttiin 9001 ja kaikki muut pyynnöt porttiin 9000.
scgi_pass
japroxy_pass
Ne ovat kaikki yleisesti käytettyjä käänteisiä välityspalvelinohjeita, ja ne kaikki välittävät pyynnöt taustapalvelimelle.
sisään,scgi_pass
Suunniteltu käytettäväksi tuen kanssaSCGIProtokolla taustapalvelinviestintään.SCGIon yksinkertaistettuCGIprotokolla, suunniteltuWeb Tehokas tiedonsiirto palvelimien ja sovellusten välillä. Verrattuna,proxy_pass
on yleisempi direktiivi, jota voidaan käyttää välityspalvelimena useille protokollille, mukaan lukienHTTP、HTTPS、FastCGIodota.
Käytössäscgi_pass
tunnin,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_pass
Sitä 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_pass
Yleensä tarvitaan yhteistyötäscgi_param
asetukseen 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;
}
Tässä esimerkissäinclude scgi_params
esitelty ennaltaSCGIparametrit, kunscgi_param
Direktiivejä käytetään lisäparametrien asettamiseen.
Verrattuna,proxy_pass
Kokoonpano on yleensä yksinkertaisempi ja selkeämpi:
location /api/ {
proxy_pass http://backend_server;
}
Mitä tulee suorituskykyyn,scgi_pass
japroxy_pass
Jokaisella on omat etunsa.Erityisesti suunniteltu käytettäväksiSCGIprotokollasovellus,scgi_pass
voi tarjota paremman suorituskyvyn, koska se välttääHTTP protokollan yläpuolella. Kuitenkin,proxy_pass
Sen monipuolisuus tekee siitä joustavamman ja voi mukautua erilaisiin taustapalvelimiin ja protokolliin.
Turvallisuus on myös huomioitava näkökohta.koskascgi_pass
omistettuSCGI protokollaa, joka saattaa joissain tapauksissa tarjota paremman suojan, koska se rajoittaa sen kommunikointia taustapalvelimen kanssa.japroxy_pass
Sen monipuolisuuden vuoksi voidaan tarvita lisämäärityksiä turvallisuuden takaamiseksi, erityisesti käsiteltäessä arkaluonteisia tietoja.
Käytännön sovelluksissa valitse käyttöscgi_pass
edelleenproxy_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_pass
saattaa olla sopivampi.
scgi_pass
Ohje 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_pass
ohjeen 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_param
Komennon 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,
Tässä esimerkissä "70" edustaa otsikon kokonaispituutta, jota seuraa kolme avainarvoparia:CONTENT_LENGTH
、SCGI
jaREQUEST_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 kauttaNginx。SCGIVastauksen 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ä.
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.conf
tai/usr/local/nginx/conf/nginx.conf
.Tässä tiedostossa meidän onhttp
Lisää tai muokkaa lohkon sisälläserver
pala.
olla olemassaserver
lohko, lisäämme alocation
direktiiviä 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;
}
}
}
Tässä kokoonpanossalisten 80
ohjeet kertovatNginxKuuntele portista 80 (vakioHTTPportti).server_name
Direktiivi 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_pass
komennolla 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_params
tai/usr/local/nginx/conf/scgi_params
。
Jos sinunSCGIPalvelin vaatii lisäparametreja, joita voidaan käyttääscgi_param
asetettava komento.Esimerkiksi jos sinun on asetettavaSCRIPT_FILENAME
Parametrit voidaan määrittää seuraavasti:
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
scgi_param SCRIPT_FILENAME /path/to/your/scripts$fastcgi_script_name;
}
tässä,SCRIPT_FILENAME
Parametriksi asetetaan komentosarjan todellinen polku.$fastcgi_script_name
OnNginxMuuttuja, 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;
}
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
tai
sudo systemctl restart nginx
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.
olla olemassaNginx , ylävirran moduulin avulla voimme määrittää joukon palvelimia, joita voidaan käyttää kuormituksen tasapainottamiseen ja vikasietotilaan.Milloin kanssascgi_pass
Ylä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;
# 更多服务器...
}
Tässä kokoonpanossabackend_name
on tälle palvelinryhmälle määrittämäsi nimi, jota voidaan käyttää myöhemminscgi_pass
mainittu direktiivissä.jokainenserver
Direktiivi määrittelee taustapalvelimen osoitteen, joka voi ollaIPOsoite ja portin numero, joka voi myös ollaUnixVerkkotunnuksen pistorasian polku.
Voimme esimerkiksi määrittää tiedoston nimeltäscgi_servers
ylävirran ryhmä:
upstream scgi_servers {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server unix:/tmp/scgi.socket;
}
Kun olemme määrittäneet ylävirran, voimmescgi_pass
Käytä sitä direktiivissä:
location /app/ {
scgi_pass scgi_servers;
include scgi_params;
}
niin,NginxPyyntö jaetaan osoitteeseenscgi_servers
ryhmän palvelimia.
Ylävirran moduuli tarjoaa erilaisia kuormituksen tasapainotusalgoritmeja, jotka voidaan konfiguroida lisäämällä parametreja palvelinkäskyn jälkeen:
Round-robin (oletus): Jaa pyynnöt kullekin palvelimelle peräkkäin.
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;
}
least_conn
ohje:upstream scgi_servers {
least_conn;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
ip_hash
ohje:upstream scgi_servers {
ip_hash;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
Ylävirran moduuli tarjoaa myös palvelimen kunnontarkistus- ja vikasietotoiminnot.Voimme käyttää esimerkiksimax_fails
jafail_timeout
Viantunnistuksen 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;
}
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ääbackup
Parametrit, 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;
}
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.
KonfiguraatiossaNginx/scgi_pass
direktiivissä, 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;
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;
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:
Suorituskykyvaatimukset: Jos tavoittelet parasta suorituskykyä jaNginxjaSCGIPalvelin on samalla koneella ja se tulee valitaUnixverkkotunnuksen pistorasia.
Käyttöönottoarkkitehtuuri: josNginxjaSCGIJos palvelimen on toimittava eri koneilla tai sen on saavutettava kuormituksen tasapainotus, sinun on käytettäväTCPpistorasia.
Turvallisuusvaatimukset: Jos turvallisuus on ensisijainen huolenaihe eikä laitteiden välistä viestintää vaadita,UnixVerkkotunnuksen pistokkeet voivat olla parempi valinta.
Skaalautuvuus: Jos on odotettavissa, että saatat tarvitaSCGIJos haluat skaalata palvelimen useisiin koneisiin, käytäTCPPistorasiat on helpompi virittää skeemaksi.
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.
Tässä luvussa käsitellään yksityiskohtaisestiscgi_pass
Kolme keskeistä edistynyttä konfigurointinäkökohtaa: aikakatkaisuasetukset, puskurin määritys ja yhteysvarannon hallinta.
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_pass
Aiheeseen 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;
Tämä kokoonpano asettaa yhteyden aikakatkaisun 60 sekuntiin.
Toiseksi,scgi_read_timeout
nimettyNginxalkaenSCGI Palvelimen aikakatkaisu vastausten lukemiseen.josSCGI Palvelin ei ole lähettänyt tietoja tänä aikana ja yhteys suljetaan. Esimerkiksi:
scgi_read_timeout 60s;
viimeinkin,scgi_send_timeout
jo 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;
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.
Puskurin konfigurointi optimointia vartenNginxjaSCGI Tiedonsiirto palvelimien välillä on kriittistä. Kohtuulliset puskuriasetukset voivat parantaa vastenopeutta ja vähentää resurssien kulutusta.
scgi_buffer_size
Ohjeet lukemisen asettamiseenSCGI Palvelimen vastauksen ensimmäisen osan puskurin koko. Tämä sisältää yleensä pienen vastauksen otsikon. Esimerkiksi:
scgi_buffer_size 4k;
scgi_buffers
Ohjeet on määritelty lukemista vartenSCGI Palvelimen vastausten puskurien määrä ja koko. Esimerkiksi:
scgi_buffers 8 4k;
Tämä kokoonpano luo 8 puskuria, joiden koko on 4k.
Jos vastaus ei mahdu kokonaan muistiin, voit käyttääscgi_max_temp_file_size
Direktiivi tilapäisten tiedostojen enimmäiskoon rajoittamisesta:
scgi_max_temp_file_size 1024m;
Tämä rajoittaa väliaikaisten tiedostojen enimmäiskoon 1024 megatavuun.
Voit käyttää suuria vastauksia vartenscgi_busy_buffers_size
Direktiivi varattu-tilassa käytettävissä olevan puskurin koon rajoittamisesta:
scgi_busy_buffers_size 8k;
Nämä puskuriasetukset tulee säätää sovelluksesi ominaisuuksien ja palvelinresurssien mukaan optimaalisen suorituskyvyn saavuttamiseksi.
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_keepalive
Direktiivi ylävirran konfiguroimiseksiSCGI Käyttämättömien yhteyksien enimmäismäärä, jonka palvelin voi pitää hengissä. Esimerkiksi:
scgi_keepalive 10;
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_version
komennolla määritettäväksiNginxkanssa käytettySCGIpalvelinviestintäHTTPProtokollaversio:
scgi_http_version 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_upstream
Ohjeet sen hallitsemiseksi, missä olosuhteissa pyynnöt tulee välittää seuraavalle palvelimelle:
scgi_next_upstream error timeout invalid_header http_500;
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.
kirjoitettavaksi
Tässä artikkelissa käsitellään yksityiskohtaisestiNginxkeskelläscgi_pass
ohjeiden 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.