Configuració de Nginx per al rendiment i la seguretat

En aquest tutorial, veurem com podem configurar el servidor web de Nginx per a un entorn de producció.


Un servidor web d’un entorn de producció és diferent d’un servidor web d’un entorn de prova en termes de rendiment, seguretat i així successivament.

De manera predeterminada, sempre hi ha una configuració de configuració preparada per utilitzar per a un servidor web Nginx un cop l’hagi instal·lat correctament. Tanmateix, la configuració predeterminada no és prou bona per a un entorn de producció. Per tant, ens centrarem en com configurar Nginx perquè funcioni millor durant la intensitat normal del trànsit i en com protegir-lo dels usuaris que pretenen abusar-ne.

Si no heu instal·lat Nginx a la vostra màquina, podeu comprovar com fer-ho aquí. Us mostra com instal·lar Nginx en una plataforma Unix. Trieu instal·lar Nginx mitjançant els fitxers d’origen perquè el Nginx preconstruït no inclou alguns dels mòduls utilitzats en aquest tutorial.

Requisits

Heu d’instal·lar el següent a la vostra màquina i assegureu-vos d’executar aquest tutorial a qualsevol plataforma basada en Debian com Ubuntu.

  • Ubuntu o qualsevol altra plataforma basada en Debian
  • wget
  • Vim (editor de text)

A més, cal executar o executar algunes ordres d’aquest tutorial com a usuari root mitjançant l’ordre sudo.

Comprendre l’estructura de configuració de Nginx

En aquesta secció ens fixarem en el següent:

  • Estructura de Nginx
  • Seccions com un esdeveniment, HTTP i correu
  • Sintaxi vàlida de Nginx

Al final d’aquesta secció, entendreu l’estructura de la configuració de Nginx, el propòsit o els rols de les seccions i com definir directives vàlides dins de seccions.

El fitxer de configuració complet de Nginx té una estructura lògica que es compon de directrius agrupades en diverses seccions com la secció d’esdeveniments, la secció http, la secció de correu, etc..

El fitxer de configuració principal es troba a /etc/nginx/nginx.conf mentre que els altres fitxers de configuració es troben a / etc / nginx.

Context principal

Aquesta secció o context contenen directives fora de seccions específiques com ara la secció de correu.

Qualsevol altra directiva com ara l’usuari nginx; , Treballador_processos 1; , Error_log /var/log/nginx/error.log advertir; i pid /var/run/nginx.pid es poden situar dins de la secció o context principal.

Però algunes d’aquestes directives com els treballadors_processos també poden existir a la secció d’esdeveniments.

Seccions

Les seccions a Nginx defineixen la configuració dels mòduls Nginx.

Per exemple, la secció http defineix la configuració del mòdul ngx_http_core, la secció d’esdeveniments defineix la configuració del ngx_event_module mentre que la secció de correu defineix la configuració del ngx_mail_module..

Podeu consultar aquí per a una llista completa de seccions a Nginx.

Directives

Les directives de Nginx es componen d’un nom variable i d’una sèrie d’arguments, com ara:

Work_processes és un nom variable, mentre que l’auto serveix d’argument.

treballador_processos automàtics;

Les directrius acaben amb un punt i dos punts com es mostra més amunt.

Finalment, el fitxer de configuració Nginx ha de complir un conjunt de regles determinat. A continuació es mostra la sintaxi vàlida de la configuració de Nginx:

  • Les directives vàlides comencen amb un nom variable i després segueixen un o diversos arguments
  • Totes les directives vàlides acaben amb un punt i coma;
  • Les seccions es defineixen amb claudàtors {}
  • Una secció es pot incrustar en una altra secció
  • La configuració fora de qualsevol secció forma part de la configuració global de Nginx.
  • Les línies que comencen amb el signe hash # són comentaris.

Ajust de Nginx per al rendiment

En aquesta secció, configurarem Nginx perquè funcioni millor durant el trànsit intens i la intensitat del trànsit.

Veurem com configurar:

  • Obrers
  • Activitat d’E / S de disc
  • Activitat en xarxa
  • Buffers
  • Compressió
  • Cache
  • Retard de temps

Tot i així, dins de l’entorn virtual activat, escriviu les ordres següents per canviar al directori Nginx i llisteu-ne el contingut.

cd nginx && ls

Cerqueu la carpeta conf. Dins d’aquesta carpeta hi ha el fitxer nginx.conf.

Aprofitarem aquest fitxer per configurar Nginx

Ara, executeu les ordres següents per anar a la carpeta conf i obriu el fitxer nginx.conf amb l’editor vim

cd conf
sudo vim nginx.conf

A continuació, es mostra una captura de pantalla de com sembla el fitxer nginx.conf de manera predeterminada.

Obrers

Perquè Nginx funcioni millor, hem de configurar els treballadors a la secció d’esdeveniments. La configuració dels treballadors de Nginx us permet processar de manera eficaç les connexions de clients.

Suposant que no heu tancat l’editor vim, premeu el botó i del teclat per editar el fitxer nginx.conf.

Copieu i enganxeu el següent dins de la secció d’esdeveniments tal com es mostra a continuació:

esdeveniments {
treballador_processos automàtics;
treballador_connexions 1024;
treballador_rlimit_nofil 20960;
multi_accept on;
mutex_accept on;
mutex_accept_delay 500ms;
utilitzar epoll;
epoll_events 512;
}

working_processes: aquesta directiva controla el nombre de treballadors de Nginx. El valor d’aquesta directiva s’estableix en automàtic per permetre a Nginx determinar el nombre de nuclis disponibles, els discos, la càrrega del servidor i el subsistema de xarxa. Tanmateix, podeu descobrir el nombre de nuclis executant la comanda lscpu al terminal.

treballador_connexions: aquesta directiva estableix el valor del nombre de connexions simultànies que pot obrir un treballador. El valor per defecte és 512, però el definim a 1.024 per permetre a un treballador acceptar una connexió molt simultània d’un client.

worker_rlimit_nofile: Aquesta directiva està relacionada d’alguna manera amb les connexions de treballadors. Per poder gestionar una connexió simultània de grans dimensions, la definim a un valor gran.

multi_accept: Aquesta directiva permet al treballador acceptar moltes connexions a la cua alhora. Una cua en aquest context significa simplement una seqüència d’objectes de dades a l’espera de ser processats.

mutex_accept: Aquesta directiva està desactivada de manera predeterminada. Però, ja que hem configurat molts treballadors a Nginx, hem d’activar-lo tal com es mostra al codi anterior per permetre que els treballadors acceptin les noves connexions una per una..

mutex_accept_delay: Aquesta directiva determina el temps que ha d’esperar un treballador abans d’acceptar una connexió nova. Un cop activat l’accept_mutex, se li assigna un bloqueig mutex a un treballador per un període de temps especificat per accept_mutex_delay. Quan s’acabi el termini, el següent treballador en línia està preparat per acceptar noves connexions.

use: Aquesta directiva especifica el mètode per processar una connexió des del client. En aquest tutorial, vam decidir establir el valor a epoll perquè estem treballant en una plataforma Ubuntu. El mètode epoll és el mètode de processament més eficaç per a les plataformes Linux.

epoll_events: el valor d’aquesta directiva especifica el nombre d’esdeveniments que Nginx transferirà al nucli.

I / O de disc

En aquesta secció, configurarem l’activitat d’E / S asíncrona a Nginx per permetre’l realitzar una transferència de dades efectiva i millorar l’eficàcia de la memòria cau.

I / O de disc només fa referència a les operacions d’escriptura i lectura entre el disc dur i la memòria RAM. En farem ús sendfile () Funciona dins del nucli per enviar fitxers petits.

Podeu utilitzar la secció http, la secció d’ubicació i la secció del servidor per obtenir directives d’aquest àmbit.

La secció d’ubicació, la secció del servidor es poden incrustar o col·locar dins de la secció http per fer que la configuració sigui llegible.

Copieu i enganxeu el codi següent dins de la secció d’ubicació incrustada a la secció HTTP.

ubicació / pdf / {
fitxer enviat;
aio endavant;
}

ubicació / àudio / {
directe 4m
directio_alineació 512
}

sendfile: per utilitzar els recursos del sistema operatiu, configureu el valor d’aquesta directiva a. sendfile transfereix dades entre descriptors de fitxers a l’espai del nucli del sistema operatiu sense enviar-los als buffers d’aplicació. Aquesta directiva s’utilitzarà per servir fitxers petits.

directio: Aquesta directiva millora l’eficàcia de la memòria cau, permetent que la lectura i l’escriptura s’enviïn directament a l’aplicació. directio és una característica del sistema de fitxers de tots els sistemes operatius moderns. Aquesta directiva s’utilitzarà per servir fitxers més grans com vídeos.

aio: Aquesta directiva permet multi-threading quan està activat per a l’operació d’escriptura i lectura. El multi-threading és un model d’execució que permet executar diversos fils separats els uns dels altres, alhora que es comparteixen els recursos del seu procés d’allotjament.

directio_alignment: aquesta directiva assigna un valor de mida de bloc a la transferència de dades. Es relacionava amb la directiva directio.

Capa de xarxa

En aquesta secció, farem ús de directrius com tcp_nodelay i tcp_nopush per evitar que els petits paquets esperin un període de temps especificat d’uns 200 mil·lisegons abans que s’enviïn alhora..

Normalment, quan els paquets es transfereixen en “trossos”, solen saturar la xarxa altament carregada. Així doncs, John Nagle va construir un algorisme d’amortització per resoldre aquest problema. L’objectiu de l’algorisme d’agermanament de Nagle és evitar que els petits paquets saturen la xarxa altament carregada.

Copieu i enganxeu el codi següent dins de la secció HTTP.

http {

tcp_nopush on;
tcp_nodelay on;

}

tcp_nodelay: Per defecte, aquesta directiva està habilitada per permetre als paquets petits esperar un període especificat abans que s’enviïn alhora. Per permetre que totes les dades s’envieu alhora, aquesta directiva està habilitada.

tcp_nopush: Com que hem activat la directiva tcp_nodelay, els paquets petits s’envien alhora. Tanmateix, si encara voleu fer servir l’algorisme d’amortització de John Nagle, també podem habilitar tcp_nopush per afegir paquets els uns als altres i enviar-los tots alhora.

Buffers

Vegem com configurar els buffers de sol·licitud a Nginx per gestionar les sol·licituds de manera eficaç. Un buffer és un emmagatzematge temporal on es guarden i es processen les dades durant un temps.

Podeu copiar el següent a la secció del servidor.

servidor {

client_body_buffer_size 8k;
client_max_body_size 2m;
client_body_in_single_buffer activat;
client_body_temp_pathtemp_files 1 2;
client_header_buffer_size 1m;
large_client_header_buffers 4 8k;

}

És important comprendre què fan aquestes línies buffer.

client_body_buffer_size: aquesta directiva estableix la mida del buffer per al cos de sol·licitud. Si teniu previst executar el servidor web en sistemes de 64 bits, heu de definir el valor a 16k. Si voleu executar el servidor web al sistema de 32 bits, configureu el valor a 8k.

client_max_body_size: Si voleu gestionar càrregues de fitxers grans, heu de definir aquesta directiva com a mínim a 2 metres o més. Per defecte, s’estableix en 1 m.

client_body_in_file_only: Si heu desactivat la directiva client_body_buffer_size amb el símbol hashtag # i aquesta directiva client_body_in_file_only està configurada, Nginx guardarà els buffers de sol·licitud en un fitxer temporal. Això no és recomanable per a un entorn de producció.

client_body_in_single_buffer: De vegades, no tot el cos de sol·licitud no s’emmagatzema en un buffer. La resta es guarda o s’escriu en un fitxer temporal. Tanmateix, si teniu intenció de desar o emmagatzemar el buffer complet de sol·licitud en un únic buffer, heu d’habilitar aquesta directiva.

client_header_buffer_size: Podeu utilitzar aquesta directiva per configurar o assignar un buffer per a les capçaleres de sol·licitud. Podeu definir aquest valor a 1 m.

large_client_header_buffers: Aquesta directiva s’utilitza per establir el nombre i la mida màxim per a llegir les capçaleres de sol·licituds grans. Podeu definir el nombre màxim i la mida del buffer a 4 i 8k amb precisió.

Compressió

Comprimir la quantitat de dades transferides a la xarxa és una altra manera de garantir que el servidor web funciona millor. En aquesta secció, farem ús de directrius com gzip, gzip_comp_level i gzip_min_length per comprimir dades.

Enganxeu el codi següent a la secció http tal com es mostra a continuació:

http {

gzip encesa;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_types text / xml text / css;
gzip_http_version 1.1;
gzip_vary activat;
gzip_disable "MSIE [4-6] \.";

}

gzip: si voleu habilitar la compressió, configureu el valor d’aquesta directiva a On. Per defecte, està desactivat.

gzip_comp_level: podeu utilitzar aquesta directiva per establir el nivell de compressió. Per no malgastar els recursos de la CPU, no heu de definir el nivell de compressió massa alt. Entre l’1 i el 9, podeu definir el nivell de compressió a 2 o 3.

gzip_min_length: estableix la longitud mínima de resposta per a la compressió mitjançant el camp de la capçalera de la resposta de la longitud del contingut. Podeu definir-lo a més de 20 bytes.

gzip_types: Aquesta directiva us permet triar el tipus de resposta que voleu comprimir. De manera predeterminada, el text / html de resposta tipus sempre es comprimeix. Podeu afegir un altre tipus de resposta, com ara text / css, tal com es mostra al codi anterior.

gzip_http_version: Aquesta directiva us permet triar la versió HTTP mínima d’una sol·licitud de resposta comprimida. Podeu utilitzar el valor per defecte que és 1.1.

gzip_vary: Quan la directiva gzip està habilitada, aquesta directiva afegeix el camp de la capçalera Varia: Accepta la codificació a la resposta.

gzip_disabled: alguns navegadors com Internet Explorer 6 no tenen suport per a la compressió de gzip. Aquesta directiva utilitza el camp de capçalera de sol·licitud de User-Agent per desactivar la compressió de determinats navegadors.

Cache

Aprofiteu les funcions de memòria cau per reduir el nombre de vegades que es carreguen les mateixes dades diverses vegades. Nginx proporciona funcions per a caché metadades de contingut estàtic mitjançant la directiva open_file_cache.

Podeu col·locar aquesta directiva dins de la secció servidor, ubicació i http.

http {

open_file_cache max = 1.000 inactius = 30s;
open_file_cache_valid 30s;
open_file_cache_min_uses 4;
open_file_cache_errors activat;

}

open_file_cache: Aquesta directiva està desactivada de manera predeterminada. Habiliteu-la si voleu implementar la memòria cau a Nginx. Aquesta directiva emmagatzema metadades dels fitxers i directoris sol·licitats habitualment pels usuaris.

open_file_cache_valid: Aquesta directiva conté informació de còpia de seguretat dins de la directiva open_file_cache. Podeu utilitzar aquesta directiva per establir un període vàlid normalment en segons els segons que la informació relacionada amb fitxers i directoris es torna a validar.

open_file_cache_min_uses: Nginx acostuma a esborrar informació dins de la directiva open_file_cache després d’un període d’inactivitat basat en open_file_cache_min_uses. Podeu utilitzar aquesta directiva per establir un nombre mínim d’accés per identificar quins fitxers i directoris s’accedeix activament.

open_file_cache_errors: Podeu fer ús d’aquesta directiva per permetre a Nginx caché errors com “permís denegat” o “no pot accedir a aquest fitxer” quan s’accedeix als fitxers. De manera que, quan un usuari que no té dret a accedir a un recurs, Nginx mostra el mateix informe d’error “denegat el permís”..

Retard de temps

Configureu el temps d’espera amb directrius com keepalive_timeout i keepalive_requests per evitar que les connexions de llarga espera perdin recursos..

A la secció HTTP, copieu i enganxeu el codi següent:

http {

keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;

}

keepalive_timeout: mantingueu les connexions vives durant uns 30 segons. El valor per defecte és de 75 segons.

keepalive_requests: configura una sèrie de peticions per mantenir vives durant un període de temps concret. Podeu definir el nombre de sol·licituds a 20 o 30.

keepalive_disable: si voleu desactivar la connexió keepalive per a un grup específic de navegadors, utilitzeu aquesta directiva.

send_timeout: estableix un termini d’espera per a la transmissió de dades al client.

Configuració de seguretat de Nginx

Les següents se centren exclusivament en com configurar de forma segura un Nginx en lloc d’una aplicació web. Així, no mirarem els atacs basats en web com la injecció SQL, etc..

En aquesta secció, veurem com configurar les opcions següents:

  • Restringiu l’accés als fitxers i directoris
  • Configureu els registres per supervisar les activitats malicioses
  • Eviteu DDoS
  • Desactiva la llista de directoris

Restringiu l’accés als fitxers i directoris

Vegem com restringir l’accés a fitxers i directoris delicats mitjançant els següents mètodes.

Utilitzant l’autenticació HTTP

Podem restringir l’accés a fitxers o àrees sensibles no destinats a la visualització pública sol·licitant autenticació d’usuaris o fins i tot d’administradors. Executeu la següent comanda per instal·lar una utilitat de creació de fitxers de contrasenya si no l’heu instal·lada.

apt-get install -y apache-utils

A continuació, creeu un fitxer de contrasenya i un usuari mitjançant l’eina htpasswd tal com es mostra a continuació. L’eina htpasswd la proporciona la utilitat apache2-utils.

sudo htpasswd -c / etc / apache2 / .htpasswd

Podeu confirmar si heu creat un usuari i una contrasenya aleatòries mitjançant la següent comanda

cat etc / apache2 / .htpasswd

A la secció d’ubicació, podeu enganxar el codi següent per demanar autenticació als usuaris mitjançant la directiva auth_basic.

ubicació / administrador {

basic_auth "Àrea d’administració";
auth_basic_user_file / etc / apache2 / .htpasswd;

}

Utilitzant la directiva Permetre

A més de la directiva basic_auth, també podem fer ús de la directiva permetre restringir l’accés.

Dins de la secció d’ubicació, podeu utilitzar el codi següent per permetre que les adreces IP especificades accedeixin a l’àrea sensible.

ubicació / administrador {
permetre 192.168.34.12;
permetre 192.168.12.34;
}

Configureu els registres per supervisar les activitats malicioses

En aquesta secció, configurarem els registres d’error i d’accés per supervisar específicament les sol·licituds vàlides i no vàlides. Podeu examinar aquests registres per esbrinar qui va iniciar la sessió en un moment determinat, o quin usuari va accedir a un fitxer determinat, etc..

error_log: us permet configurar el registre a un fitxer determinat com ara syslog o stderr. També podeu especificar el nivell de missatges d’error que voleu registrar.

access_log: permet escriure la sol·licitud dels usuaris al fitxer access.log

A la secció HTTP, podeu utilitzar el següent.

http {

access_log logs / access.log combinat;
error_log registra / Warn.log avisa;

}

Eviteu DDOS

Podeu protegir Nginx d’un atac de DDOS mitjançant els mètodes següents:

Limitació de les sol·licituds dels usuaris 

Podeu fer ús de les directrius limit_req_zone i limit_req per limitar la tarifa d’una sol·licitud enviada pels usuaris en pocs minuts.

Afegiu el codi següent a la secció d’ubicació incrustada a la secció del servidor.

limit_req_zone $ binary_remote_addr zona = un: 10m velocitat = 30r / m;

servidor {
ubicació /admin.html {
zona limit_req = un;
}

}

Limiteu el nombre de connexions 

Podeu utilitzar les directrius limit_conn i limit_conn_zone per limitar la connexió a determinades ubicacions o àrees. Per exemple, el codi següent rep 15 connexions de clients durant un període determinat.

El següent codi anirà a la secció d’ubicació.

limit_conn_zone $ binary_remote_addr zona = addr: 10m;

servidor {

ubicació / productes / {
limit_conn addr 10;

}
}

Acaba les connexions lentes   

Podeu utilitzar directrius de temps d’espera, com el client_body_timeout i el client_header_timeout per controlar el temps que Nginx esperarà per escriure a la capçalera del cos i a la capçalera del client..

Afegiu el següent dins de la secció del servidor.

servidor {
client 5 de client_estada 5;
client_header_timeout 5s;
}

També seria una bona idea aturar els atacs de DDoS al límit aprofitant les solucions basades en núvols tal com es menciona aquí.

Desactiva la llista de directoris

Podeu utilitzar la directiva auto_index per evitar la llista de directoris tal com es mostra al codi següent. Heu de definir-lo al valor desactivat per desactivar la llista de directoris.

ubicació / {
auto_index desactivat;
}

Conclusió

Hem configurat el servidor web de Nginx per tal de realitzar-lo de manera eficaç i protegir-lo d’abusos excessius en un entorn de producció. Si utilitzeu Nginx per a aplicacions web orientades a Internet, haureu de plantejar-vos també utilitzar un CDN i una seguretat basada en núvol per obtenir un millor rendiment i seguretat..

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map