le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
[Introduzione]: Nginx fornisce una varietà di supporto proxy inverso a livello di applicazione, inclusi proxy_pass, uwsgi_pass, fastcgi_pass e scgi_pass, ecc. Tra questi, la direttiva proxy_pass può accettare un parametro URL per implementare un proxy inverso per il protocollo HTTP/HTTPS; uwsgi_pass viene utilizzato per eseguire il proxy sul server delle applicazioni uWSGI; fastcgi_pass viene utilizzato per eseguire il proxy sul server FastCGI; all'applicazione SCGI (Simple Common Gateway Interface). Queste direttive consentono a Nginx di gestire in modo flessibile diversi tipi di servizi e applicazioni backend. Il focus di questo articolo è scgi_pass.
SCGI(Simple Common Gateway Interface) è il proxyNginx Uno degli importanti metodi di proxy inverso supportati. In,SCGIè una versione semplificataGrafica computerizzata(Common Gateway Interface), progettato per fornire un modo più efficiente di connettersiragnatela Server e applicazioni.con tradizionaleGrafica computerizzatarispetto a,SCGIUtilizzando connessioni persistenti e un formato di protocollo semplificato, il sovraccarico per richiesta viene notevolmente ridotto.
SCGIIl protocollo definisce un modo standardizzato perragnatela Passa le informazioni sulla richiesta e ricevi risposte tra il server e l'applicazione. Utilizza un formato di testo semplice per trasmettere le informazioni sull'intestazione della richiesta, seguita dal corpo della richiesta (se presente).Questo design faSCGIÈ facile da implementare e offre buone prestazioni.
esistereragnatelaNell'architettura dell'applicazione,SCGIHa agito comeragnatelaserver (come ad esempioNginx ) e applicazioni back-end.QuandoNginxricevuto dal clienteHTTPQuando richiesto, può convertire queste richieste in fileSCGIformattare e poi passareSCGIIl protocollo viene inviato al server delle applicazioni backend.
Questo approccio è particolarmente indicato per chi supporta nativamenteSCGILinguaggi e framework di programmazione del protocollo comePitonealcuniragnatelacornici (ad es.Sbagliato)ORubinoAlcuni server delle applicazioni (comeUnicorno ).usandoSCGI, queste applicazioni possono evitareHTTPIl sovraccarico dell'analisi, elaborazione diretta daragnatelarichieste al server, migliorando così le prestazioni generali.
Nelle applicazioni pratiche,SCGIGli scenari di utilizzo includono ma non sono limitati a:
alte prestazioniragnatelaApplicazione: per le applicazioni che devono gestire un numero elevato di richieste simultanee,SCGIPuò fornire meglio del tradizionaleGrafica computerizzataPrestazioni migliori.
Processi a lunga esecuzione: alcune applicazioni che necessitano di mantenere lo stato o che sono a lunga esecuzione possono farloSCGIEragnatelaIl server mantiene una connessione persistente.
Ottimizzazioni specifiche del linguaggio: potrebbero essere utilizzati alcuni linguaggi di programmazione o frameworkSCGImostrare prestazioni migliori o un'implementazione più semplice.
entroNginxusato inscgi_pass
comando, gli amministratori possono facilmente inserirloHTTPInoltra la richiesta al supportoSCGI server delle applicazioni back-end.Ciò non solo semplifica il processo di configurazione ma offre anche opportunità di ottimizzazioneragnatelaLe prestazioni delle applicazioni garantiscono flessibilità.
SCGI(Simple Common Gateway Interface) è un protocollo semplificatoGrafica computerizzataprotocollo, appositamente progettato perragnatela Comunicazione tra server e applicazione. Presenta le seguenti caratteristiche salienti:
Semplicità:SCGI Il protocollo utilizza un formato di testo semplice per trasmettere le informazioni sull'intestazione della richiesta, il che rende l'implementazione e il debug del protocollo relativamente semplici. La filosofia di progettazione del protocollo è mantenerlo semplice fornendo allo stesso tempo funzionalità sufficienti.
Connessioni persistenti: contro tradizionaliGrafica computerizzatadiverso,SCGI Supporta connessioni persistenti.questo significa aSCGI Il server può gestire più richieste senza creare un nuovo processo o thread per ciascuna richiesta. Ciò riduce notevolmente il sovraccarico delle risorse di sistema e migliora le prestazioni generali.
Basso sovraccarico: a causa diSCGI La progettazione del protocollo è semplice e crea poco sovraccarico aggiuntivo durante l'elaborazione della richiesta.Questo faSCGIParticolarmente adatto per gestire un'elevata concorrenzaragnatelaScenari applicativi.
flessibilità:SCGI Il protocollo consente la trasmissione di informazioni di intestazione arbitrarie, il che offre agli sviluppatori una grande flessibilità. Gli sviluppatori possono personalizzare le informazioni dell'intestazione secondo necessità per soddisfare i requisiti di applicazioni specifiche.
Indipendenza dalla lingua:SCGI Il design del protocollo è indipendente dal linguaggio di programmazione.Ciò significa che può essere implementato in qualsiasi linguaggio di programmazione, consentendo agli sviluppatori di scegliere il linguaggio che meglio si adatta alle esigenze del loro progetto.SCGIserver.
SebbeneSCGIEHTTPsono usati perragnatelaProtocolli di comunicazione, ma presentano differenze significative negli scopi di progettazione e negli scenari di utilizzo:
Utenti target:HTTPIl protocollo viene utilizzato principalmente dai client (come i browser) eragnatelacomunicazione tra server, mentreSCGIL'accordo si concentra suragnatelaComunicazione tra server e applicazioni backend.
Complessità del protocollo:HTTPIl protocollo è relativamente complesso e contiene una grande quantità di informazioni di intestazione e metodi per supportare variragnatela scena interattiva. In contrasto,SCGIIl protocollo è più semplice e contiene solo le informazioni necessarie per fornire richieste e risposte.
Considerazioni sulle prestazioni: inragnatelaUtilizzato tra server e applicazioneSCGIinvece diHTTPIl sovraccarico dell'analisi del protocollo può essere ridotto perchéSCGI Il formato è più semplice e diretto. Ciò può apportare miglioramenti significativi delle prestazioni in scenari ad alta concorrenza.
Gestione della connessione:HTTP/1.1È stato introdotto il concetto di connessioni persistenti, ma inragnatelaUtilizzato tra server e applicazioneHTTPPotrebbe essere ancora necessaria una gestione aggiuntiva della connessione.SCGIIl supporto integrato per le connessioni persistenti semplifica questo processo.
scene da utilizzare:HTTPÈ il protocollo di base di Internet ed è applicabile a variragnatelascenario comunicativo.SCGIviene utilizzato principalmente perragnatelaComunicazione interna tra server e applicazioni back-end, soprattutto in scenari in cui è richiesta un'elaborazione ad alte prestazioni.
SCGIECGI veloceTuttoGrafica computerizzataUna versione migliorata diragnatela Prestazioni dell'applicazione. Hanno alcune somiglianze, ma anche alcune differenze fondamentali:
Complessità del protocollo:SCGIrapporto di accordoCGI velocepiù semplice.SCGIUtilizza un formato di testo semplice per trasmettere informazioni di intestazione, mentreCGI veloce Utilizza il formato binario.Questo faSCGIPiù facile da implementare ed eseguire il debug, ma potrebbe essere leggermente inferiore aCGI veloceprestazione.
Multiplexing:CGI veloceSupporta la gestione di più richieste su una singola connessione (multiplexing), mentreSCGI In genere viene elaborata una sola richiesta per connessione. Ciò significa che in alcuni scenari ad alta concorrenza,CGI velocePotrebbe funzionare meglio.
Tipo di registrazione:CGI veloceSono definiti diversi tipi di record (ad es.STDIN、Uscita standard、STDERRecc.), consentendo un controllo più preciso.SCGIViene adottato un approccio più semplice, focalizzato principalmente sulla trasmissione di richieste e risposte.
Supporto linguistico: dovuto aCGI veloce Più a lungo esiste, più diffuso sarà probabilmente il suo supporto in vari linguaggi e framework di programmazione. Tuttavia,SCGILa sua semplicità rende la sua implementazione in alcuni linguaggi potenzialmente più semplice.
Prestazioni: nella maggior parte dei casi,SCGIECGI veloce La differenza di prestazioni non è significativa. La scelta del protocollo da utilizzare spesso dipende dalle esigenze applicative specifiche, dal supporto del linguaggio di sviluppo e dalle preferenze personali.
esistereNginxConfigurazione,scgi_pass
La direttiva viene utilizzata per passare la richiesta aSCGI Direttive chiave per il server.definisceNginxa cui inoltrare la richiestaSCGIServer o gruppo di server.
scgi_pass
La sintassi di base del comando è la seguente:
scgi_pass address;
In,address
Può essere nelle seguenti forme:
Per esempio:scgi_pass localhost:9000;
in questo caso,NginxLa richiesta verrà inoltrata al server in esecuzione sull'host locale e in ascolto sulla porta 9000.SCGIserver.
Per esempio:scgi_pass unix:/tmp/scgi.socket;
Qui,Nginxpasserà quanto specificatoUnixsocket di dominio conSCGI Comunicazione del server.Questo metodo viene solitamente utilizzatoSCGIserver conNginxL'esecuzione sulla stessa macchina può fornire prestazioni migliori.
Per esempio:scgi_pass scgi_backend;
In questo utilizzo,scgi_backend
è uno dentroNginx Un gruppo di server upstream predefinito nel file di configurazione. Ciò consente di implementare funzionalità avanzate come il bilanciamento del carico e il failover.
scgi_pass
Di solito ci sono le istruzionilocation
utilizzato nei blocchi per gestire specificiIndirizzo Indirizzo URL sentiero. Per esempio:
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
}
In questo esempio, tutto/scgi/
Le richieste all'inizio verranno inoltrate alla porta locale 9000.SCGIserver.
include scgi_params;
contiene un file di configurazione predefinito, che imposta una serie diSCGI parametro.Questi parametri definisconoNginxcomeHTTPLe informazioni sulla richiesta vengono convertite inSCGIchiedere.
Vale la pena notare chescgi_pass
Le direttive possono essere combinate con altreNginx Le direttive vengono utilizzate in combinazione per ottenere configurazioni più complesse.Ad esempio, puoi usareif
Istruzioni condizionali per selezionare diverse opzioni in base a diverse condizioniSCGIserver:
location / {
if ($request_method = POST) {
scgi_pass localhost:9001;
}
scgi_pass localhost:9000;
include scgi_params;
}
In questo esempio,INVIARELe richieste vengono inoltrate alla porta 9001, mentre tutte le altre richieste vengono inoltrate alla porta 9000.
scgi_pass
Eproxy_pass
Sono tutte istruzioni di proxy inverso comunemente utilizzate e inoltrano tutte le richieste al server back-end.
In,scgi_pass
Progettato per l'uso con supportoSCGIProtocollo per la comunicazione del server backend.SCGIè un semplificatoGrafica computerizzataprotocollo, progettato perragnatela Comunicazione efficiente tra server e applicazioni. In contrasto,proxy_pass
è una direttiva più generale che può essere utilizzata per proxy una varietà di protocolli, inclusiHTTP、HTTPS、CGI veloceAspettare.
In usoscgi_pass
ora,NginxriceveràHTTPLa richiesta viene convertita inSCGIformato e quindi inviato al backendSCGI server. Durante questo processo,Nginx Gestirà la conversione del protocollo per garantire che il server back-end possa comprendere ed elaborare correttamente la richiesta.Eproxy_pass
Di solito viene utilizzato per inoltrare la richiesta intatta al server backend senza conversione del protocollo.
Un'altra differenza importante è come è configurato.scgi_pass
Di solito richiede cooperazionescgi_param
direttiva da utilizzare per impostareSCGI Parametri richiesti dal protocollo. Per esempio:
location /app/ {
scgi_pass localhost:9000;
include scgi_params;
scgi_param SCRIPT_FILENAME /path/to/app$fastcgi_script_name;
}
In questo esempio,include scgi_params
introdotto predefinitoSCGIparametri, mentrescgi_param
Le direttive vengono utilizzate per impostare parametri aggiuntivi.
In contrasto,proxy_pass
La configurazione è solitamente più semplice e immediata:
location /api/ {
proxy_pass http://backend_server;
}
In termini di prestazioni,scgi_pass
Eproxy_pass
Ognuno ha i suoi vantaggi.Per un utilizzo appositamente studiatoSCGIapplicazione del protocollo,scgi_pass
può fornire prestazioni migliori perché evitaHTTP sovraccarico del protocollo. Tuttavia,proxy_pass
La sua versatilità lo rende più flessibile e può adattarsi a vari server e protocolli backend.
Anche la sicurezza è un aspetto da considerare.Perchéscgi_pass
dedicato aSCGI protocollo, che in alcuni casi può fornire una migliore sicurezza perché limita il modo in cui comunica con il server backend.Eproxy_pass
A causa della sua versatilità, potrebbe essere necessaria una configurazione aggiuntiva per garantire la sicurezza, soprattutto quando si gestiscono dati sensibili.
Nelle applicazioni pratiche, scegli di utilizzarescgi_pass
Ancoraproxy_pass
Dipende principalmente dalle caratteristiche e dai requisiti dell'applicazione backend.Se l'applicazione backend è progettata specificamente per l'usoSCGIaccordo, quindiscgi_pass
Potrebbe essere una scelta migliore.Se il backend è uno standardragnatelaServer o applicazione, non supportato o richiestoSCGI,COSÌproxy_pass
potrebbe essere più appropriato.
scgi_pass
L'istruzione èNginxutilizzati nella lavorazioneSCGI (Simple Common Gateway Interface) istruzioni di base richieste. Il suo funzionamento prevede più passaggi, dalla ricezione di una richiesta del client alla restituzione di una risposta elaborata al client.
Prima di tutto, quandoNginxRicevuto da un clienteHTTP Quando viene effettuata una richiesta, deciderà come gestirla in base alle regole nel file di configurazione.Se la richiesta corrisponde a usescgi_pass
il blocco di posizione dell'istruzione,NginxinizieràSCGIflusso di elaborazione.
esistereSCGIDurante il processo di lavorazione,NginxPer prima cosa creeremo il fileSCGI Connessione al server.Questa connessione può essereTCPpresa oUnixSocket del dominio, a secondascgi_pass
L'indirizzo specificato nell'istruzione. Se viene utilizzato un gruppo di server upstream,NginxViene selezionato anche un server specifico in base all'algoritmo di bilanciamento del carico configurato.
Dopo aver stabilito la connessione,NginxVolereHTTPLa richiesta viene convertita inSCGI Formato.Questo processo include la creazioneSCGIIntestazione della richiesta e corpo della richiesta.SCGIL'intestazione della richiesta contiene una serie di coppie chiave-valore che forniscono metadati sulla richiesta, come metodo di richiesta, percorso, stringa di query, clientProprietà intellettuale Indirizzo ecc.La maggior parte di queste informazioni provengono dall'originaleHTTPintestazioni di richiesta, ma possono anche includerescgi_param
Parametri aggiuntivi impostati dal comando.
SCGI Il formato dell'intestazione della richiesta è specifico: inizia con un numero che indica la lunghezza dell'intera intestazione, seguito da due punti, quindi una serie di coppie chiave-valore terminate da un carattere null e infine terminata da una virgola.Ad esempio, un semplificatoSCGIL'intestazione della richiesta potrebbe assomigliare a questa:
70:CONTENT_LENGTH27SCGI1REQUEST_METHODGETquery_string,
In questo esempio, "70" rappresenta la lunghezza totale dell'intestazione, seguita da tre coppie chiave-valore:CONTENT_LENGTH
、SCGI
EREQUEST_METHOD
。
Dopo aver inviato l'intestazione della richiesta,Nginx Viene inviato il corpo della richiesta (se presente).perOTTENERELe richieste di solito non hanno un corpo della richiesta, ma forINVIAREOMETTERERichiesta, il corpo della richiesta può contenere dati del modulo o altri tipi di contenuto.
SCGI Dopo che il server ha ricevuto la richiesta, elabora la richiesta e genera una risposta.La risposta viene rinviata sulla stessa connessioneNginx。SCGIIl formato della risposta è relativamente semplice e include le intestazioni e il corpo della risposta, separati da una riga vuota.
NginxricevutoSCGIDopo la risposta del server, viene riconvertito inHTTP Formato della risposta.Questo processo include l'analisiSCGIIntestazioni di risposta, impostate in modo appropriatoHTTPintestazioni di risposta, quindi passare il corpo della risposta intatto al client.
nell'intero processo,Nginx Responsabile anche della gestione del ciclo di vita della connessione.Ciò include la gestione dei timeout di connessione, la gestione del pool di connessioni (se abilitatokeepalive
), gestire gli errori di rete, ecc. Se si verifica un errore durante l'elaborazione,NginxAl client verrà restituita una risposta di errore appropriata in base alla configurazione.
Inoltre,scgi_pass
Il processo di lavoro non è bloccante.questo significaNginxPuò elaborarne più di unoSCGI richieste senza creare un nuovo processo o thread per ciascuna richiesta.Questo design faNginxCapacità di gestire in modo efficiente un gran numero di connessioni simultanee.
esistereNginxConfigurazione mediascgi_pass
L'esempio di base di è relativamente semplice.Questa configurazione consentiràNginxInoltra le richieste per un percorso specifico aSCGI server. Ecco un esempio di configurazione di base:
Innanzitutto, apertoNginxIl file di configurazione principale, solitamente situato in/etc/nginx/nginx.conf
O/usr/local/nginx/conf/nginx.conf
.In questo file dobbiamohttp
Aggiungi o modifica all'interno di un bloccoserver
pezzo.
esistereserver
blocco, aggiungeremo unlocation
direttiva per definire a chi devono essere inoltrate le richiesteSCGI server.Ad esempio, se vogliamo aggiungere all/scgi/
La richiesta all'inizio viene inoltrata al server in esecuzione sulla porta locale 9000.SCGIServer, è possibile utilizzare la seguente configurazione:
http {
server {
listen 80;
server_name example.com;
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
}
}
}
In questa configurazione,listen 80
le istruzioni diconoNginxAscolta sulla porta 80 (standardHTTPporta).server_name
La direttiva definisce il nome di dominio al quale dovrà rispondere questo blocco di server.
location /scgi/
il blocco definisce tutto/scgi/
inizioIndirizzo Indirizzo URL Le richieste dovrebbero essere tutte elaborate.All'interno di questo blocco usiamoscgi_pass
comando da specificareSCGI L'indirizzo e la porta del server. In questo esempio,SCGIIl server è in esecuzione sulla stessa macchina (localhost
) del porto 9000.
include scgi_params;
contiene un file di configurazione predefinito, che imposta una serie diSCGI parametro.Questi parametri definisconoNginxcomeHTTPLe informazioni sulla richiesta vengono convertite inSCGI chiedere.In genere, questo file si trova/etc/nginx/scgi_params
O/usr/local/nginx/conf/scgi_params
。
Se tuoSCGIIl server richiede parametri aggiuntivi che possono essere utilizzatiscgi_param
comando da impostare.Ad esempio, se è necessario impostareSCRIPT_FILENAME
I parametri possono essere configurati in questo modo:
location /scgi/ {
scgi_pass localhost:9000;
include scgi_params;
scgi_param SCRIPT_FILENAME /path/to/your/scripts$fastcgi_script_name;
}
Qui,SCRIPT_FILENAME
Il parametro è impostato sul percorso effettivo dello script.$fastcgi_script_name
È unNginxVariabile che rappresenta il nome dello script richiesto.
Se tuoSCGIUtilizzo del serverUnixsocket di dominio inveceTCPLa porta può essere configurata in questo modo:
location /scgi/ {
scgi_pass unix:/tmp/scgi.socket;
include scgi_params;
}
In questo esempio,Nginxsarà localizzato tramite/tmp/scgi.socket
DiUnixsocket di dominio conSCGIComunicazione del server.
Una volta completata la configurazione, è necessario ricaricare o riavviareNginx affinché le modifiche abbiano effetto. È possibile utilizzare i seguenti comandi:
sudo nginx -s reload
O
sudo systemctl restart nginx
Questa configurazione di base è da utilizzarescgi_pass
Fornisce un buon punto di partenza. A seconda delle tue esigenze specifiche, potrebbero essere necessarie ulteriori regolazioni e ottimizzazioni. Ad esempio, potrebbe essere necessario configurare il buffering, i timeout o impostare gruppi di server upstream per il bilanciamento del carico. Queste opzioni di configurazione vengono discusse in dettaglio nei capitoli successivi.
esistereNginx , il modulo upstream ci consente di definire un insieme di server che possono essere utilizzati per il bilanciamento del carico e il failover.quando conscgi_pass
Il modulo upstream può essere notevolmente migliorato se utilizzato insieme alle direttiveSCGIFlessibilità e affidabilità dell'agente.
La sintassi di base del modulo upstream è la seguente:
upstream backend_name {
server address1;
server address2;
# 更多服务器...
}
In questa configurazione,backend_name
è il nome specificato per questo gruppo di server, che potrà essere utilizzato in seguitoscgi_pass
citato nella direttiva.ogniserver
La direttiva definisce l'indirizzo di un server backend, che può essereProprietà intellettualeIndirizzo più numero di porta, che può anche essereUnixPercorso del socket del dominio.
Ad esempio, possiamo definire un file chiamatoscgi_servers
gruppo a monte:
upstream scgi_servers {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server unix:/tmp/scgi.socket;
}
Dopo aver definito a monte, possiamoscgi_pass
Usalo nella direttiva:
location /app/ {
scgi_pass scgi_servers;
include scgi_params;
}
COSÌ,NginxLa richiesta verrà distribuita ascgi_servers
server nel gruppo.
Il modulo upstream fornisce una varietà di algoritmi di bilanciamento del carico, che possono essere configurati aggiungendo parametri dopo la direttiva del server:
Round-robin (impostazione predefinita): distribuisce le richieste a ciascun server in sequenza.
Polling ponderato: è possibile specificare un peso per ciascun server. I server con pesi più elevati ricevono più richieste. Per esempio:
upstream scgi_servers {
server 127.0.0.1:9000 weight=3;
server 127.0.0.1:9001 weight=1;
}
least_conn
istruzione:upstream scgi_servers {
least_conn;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
ip_hash
istruzione:upstream scgi_servers {
ip_hash;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
Il modulo upstream fornisce inoltre funzioni di controllo dello stato del server e di failover.Ad esempio, possiamo usaremax_fails
Efail_timeout
Parametri per configurare il rilevamento guasti:
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;
}
In questa configurazione, se un server si guasta tre volte di seguito entro 30 secondi,NginxVerrà contrassegnato come non disponibile e non gli verranno inviate altre richieste per i prossimi 30 secondi.
Inoltre, possiamo usarebackup
Parametri per specificare un server di backup, che verrà utilizzato solo quando tutti i server primari non saranno disponibili:
upstream scgi_servers {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002 backup;
}
Utilizzando correttamente il modulo upstream, possiamo costruire un sistema altamente disponibile e ad alte prestazioniSCGI Gruppo di agenti. Ciò non solo migliora le prestazioni complessive dell'applicazione, ma migliora anche l'affidabilità e la tolleranza ai guasti del sistema. Nelle applicazioni pratiche, dovremmo scegliere strategie di bilanciamento del carico e meccanismi di failover appropriati in base a esigenze e scenari specifici per ottenere le migliori prestazioni del sistema.
In configurazioneNginxDiscgi_pass
direttiva, abbiamo due opzioni principali da specificareSCGIIndirizzo del server:Unixsocket di dominio eTCP PRESA. Entrambi i metodi presentano vantaggi e svantaggi e quale metodo scegliere dipende dagli scenari e dalle esigenze applicative specifiche.
UnixI socket di dominio sono un tipo di comunicazione tra processi (IPC ) meccanismo che consente ai processi sulla stessa macchina di comunicare in modo efficiente.esistereNginxConfigurazione,Unix L'indirizzo di un socket di dominio è solitamente rappresentato come un percorso di file. Per esempio:
scgi_pass unix:/tmp/scgi.socket;
utilizzoUnix Il vantaggio principale dei socket di dominio è la loro prestazione.Poiché la comunicazione avviene sulla stessa macchina e quindi non è necessario passare attraverso lo stack del protocollo di reteUnixI socket di dominio sono generalmente più piccoli diTCP Le prese sono più veloci.evitanoIl protocollo TCP/IP Il sovraccarico causato dal protocollo, come l'incapsulamento e il decapsulamento dei pacchetti di dati, il controllo della congestione della rete, ecc.Questo faUnixI socket di dominio sono particolarmente adatti perNginxESCGIIl server viene eseguito sulla stessa macchina.
Un altro usaUnix Il vantaggio dei socket di dominio è la sicurezza. Poiché la comunicazione è limitata alla macchina locale, è naturalmente immune agli attacchi provenienti da tutta la rete. Inoltre, le autorizzazioni del file system possono essere utilizzate per controllare l'accesso ai file socket, fornendo un ulteriore livello di sicurezza.
Tuttavia,Unix Anche i socket di dominio hanno i loro limiti. Ovviamente, possono essere utilizzati solo per la comunicazione tra processi sulla stessa macchina.SeNginxESCGIIl server deve essere eseguito su un computer diverso, quindi non può essere utilizzatoUnixpresa di dominio.
In contrasto,TCPUtilizzo della presaProprietà intellettuale indirizzo e numero di porta per specificare l'indirizzo del server. Per esempio:
scgi_pass 127.0.0.1:9000;
TCP Il vantaggio principale delle prese è la flessibilità.loro permettonoNginxESCGI I server vengono eseguiti su macchine diverse, il che è necessario per sistemi distribuiti o applicazioni che richiedono scalabilità orizzontale.utilizzoTCPsocket, possiamo facilmente implementare il bilanciamento del carico, distribuendo le richieste su piùSCGIserver.
Un altro vantaggio è quelloTCP I socket semplificano il monitoraggio e il debug a livello di rete. Utilizzando strumenti di rete standard, possiamo facilmente controllare lo stato della comunicazione e diagnosticare i problemi.
Tuttavia,TCPLo svantaggio principale dei socket è che le prestazioni sono leggermente inferioriUnix presa di dominio. Anche se comunicano sulla stessa macchina, i dati devono passare attraverso lo stack completo del protocollo di rete, il che comporterà un sovraccarico aggiuntivo.Inoltre, utilizzareTCPI socket potrebbero richiedere considerazioni di sicurezza aggiuntive, come l'impostazione delle regole del firewall, l'utilizzoCertificato SSL/TLSCrittografia ecc.
Quando si sceglie di utilizzareUnixSocket di dominio ancoraTCPQuando si utilizzano le prese, è necessario considerare i seguenti fattori:
Requisiti prestazionali: se persegui le massime prestazioni, eNginxESCGIIl server si trova sulla stessa macchina e deve essere selezionatoUnixpresa di dominio.
Architettura di distribuzione: seNginxESCGISe il server deve essere eseguito su macchine diverse o è necessario ottenere il bilanciamento del carico, è necessario utilizzareTCPPRESA.
Requisiti di sicurezza: se la sicurezza è la preoccupazione principale e la comunicazione tra computer non è richiesta,UnixI socket di dominio potrebbero essere una scelta migliore.
Scalabilità: se si prevede che potrebbe essere necessarioSCGIPer scalare un server su più macchine, utilizzareTCPI socket saranno più facili da ottimizzare per lo schema.
Esigenze di debug e monitoraggio: se è necessario utilizzare strumenti di rete standard per il monitoraggio e il debug,TCPLe prese potrebbero essere più adatte.
In breve,Unixsocket di dominio eTCP I socket sono tutte scelte valide. La tua scelta dovrebbe essere basata sulle esigenze specifiche dell'applicazione, sui requisiti di prestazioni e sull'ambiente di distribuzione.In molti casi, soprattutto quando si perseguono prestazioni elevate eNginxESCGIQuando i server coesistono sulla stessa macchina,Unix I socket di dominio potrebbero essere una scelta migliore. Ma se è necessaria una maggiore flessibilità o un’implementazione distribuita,TCPLe prese sono un'opzione indispensabile.
In questo capitolo verrà discusso in dettaglioscgi_pass
Tre aspetti chiave della configurazione avanzata: impostazioni di timeout, configurazione del buffer e gestione del pool di connessioni.
L'impostazione del timeout serve a garantireNginxESCGI Fondamentale per l'affidabilità della comunicazione tra i server. Una corretta configurazione del timeout può impedire il blocco delle richieste per un tempo indefinito se si verifica un problema, fornendo allo stesso tempo un tempo di elaborazione sufficiente per le connessioni lente.
NginxFornisce moltepliciscgi_pass
Istruzioni relative al timeout:
Prima di tuttoscgi_connect_timeout
, che definisceNginxESCGI Il tempo massimo di attesa affinché il server stabilisca una connessione. Se non è possibile stabilire la connessione entro il tempo specificato,Nginx restituirà un errore. Per esempio:
scgi_connect_timeout 60s;
Questa configurazione imposta il timeout della connessione su 60 secondi.
In secondo luogo,scgi_read_timeout
designatoNginxdaSCGI Timeout del server per la lettura delle risposte.SeSCGI Durante questo periodo il server non ha trasmesso alcun dato e la connessione verrà chiusa. Per esempio:
scgi_read_timeout 60s;
infine,scgi_send_timeout
già impostatoNginxIn direzioneSCGI Il periodo di timeout per l'invio delle richieste da parte del server.Se entro il tempo specificatoSCGI Il server non ha ricevuto alcun dato e la connessione verrà chiusa. Per esempio:
scgi_send_timeout 60s;
Queste impostazioni di timeout devono essere regolate in base alle esigenze dell'applicazione effettiva. Per la maggior parte delle applicazioni sono sufficienti i valori predefiniti. Ma per alcune richieste di lunga durata potrebbe essere necessario aumentare questi valori di timeout.
Configurazione del buffer per l'ottimizzazioneNginxESCGI Il trasferimento dei dati tra i server è fondamentale. Impostazioni ragionevoli del buffer possono migliorare la velocità di risposta e ridurre il consumo di risorse.
scgi_buffer_size
Istruzioni per l'impostazione della letturaSCGI La dimensione del buffer per la prima parte della risposta del server. Di solito contiene una piccola intestazione di risposta. Per esempio:
scgi_buffer_size 4k;
scgi_buffers
Le istruzioni sono definite per la letturaSCGI Il numero e la dimensione dei buffer per le risposte del server. Per esempio:
scgi_buffers 8 4k;
Questa configurazione crea 8 buffer di dimensione 4K.
Se la risposta non rientra interamente nella memoria, è possibile utilizzarescgi_max_temp_file_size
Direttiva per limitare la dimensione massima dei file temporanei:
scgi_max_temp_file_size 1024m;
Ciò limita la dimensione massima dei file temporanei a 1024 MB.
Per risposte di grandi dimensioni è possibile utilizzarescgi_busy_buffers_size
Direttiva per limitare la dimensione del buffer disponibile in stato occupato:
scgi_busy_buffers_size 8k;
Queste impostazioni del buffer devono essere ottimizzate in base alle caratteristiche dell'applicazione e alle risorse del server per ottenere prestazioni ottimali.
La gestione del pool di connessioni è ottimizzataNginxESCGI Un altro aspetto importante della comunicazione tra server. Riutilizzando le connessioni, il sovraccarico derivante dalla creazione di nuove connessioni può essere notevolmente ridotto e le prestazioni complessive migliorate.
scgi_keepalive
Direttiva per la configurazione a monteSCGI Il numero massimo di connessioni inattive che il server può mantenere attive. Per esempio:
scgi_keepalive 10;
Questa configurazione consente a ciascun processo di lavoro di mantenere fino a 10 connessioni keep-alive inattive.
poter usarescgi_http_version
comando da specificareNginxusato conSCGIcomunicazione del serverHTTPVersione del protocollo:
scgi_http_version 1.1;
utilizzoHTTP/1.1È possibile abilitare connessioni di lunga durata, il che è fondamentale per mantenere l'efficienza del pool di connessioni.
Inoltre, è possibile utilizzarescgi_next_upstream
Direttive per controllare in quali circostanze le richieste devono essere passate al server successivo:
scgi_next_upstream error timeout invalid_header http_500;
Questa configurazione specifica cosa fare quando si verifica un errore, si verifica un timeout, viene ricevuta un'intestazione non valida oHTTP In caso di errore 500, la richiesta dovrebbe essere passata al server successivo.
Da scrivere
Questo articolo discute in dettaglioNginxmezzoscgi_pass
applicazione delle istruzioni, con particolare focus suPitone Configurazione e distribuzione dell'applicazione.Per prima cosa ci siamo presentatiSCGISono state poi spiegate in modo approfondito le caratteristiche ed i vantaggi del protocollo.scgi_pass
Sintassi di base e opzioni di configurazione avanzate per le direttive.Attraverso casi pratici, mostra come farloPitone FlupConfigurazione del telaioscgi_pass
, incluse le impostazioni di base, il bilanciamento del carico, il pooling delle connessioni e la gestione del buffer.