Sto usando nginx principalmente come proxy di cache inversa di fronte a diverse applicazioni gunicon / mod_wsgi e, naturalmente, per server file statici.
Trovo che rapidamente le mie conf di Nginx diventano impossibili da mantenere; il problema è che ho alcuni schemi simili (o addirittura identici) ma non riesco a renderlo pulito.
Uno dei maggiori problemi che ho è che mi piacerebbe usare posizioni nominate come un modo per raggruppare una serie di conf, ad es.
location @django_modwsgi {
include proxy.conf;
proxy_pass http://127.0.0.1:8080;
}
location @django_gunicorn {
include proxy.conf; # this could also be included directly in the server {} block?
proxy_pass http://gunicorn_builder;
}
NB. Il problema non è avere sia gunicorn che wsgi. Questo è solo un esempio. Un altro è:
location @namedlocation_1 {
some cache settings;
some cache_key settings;
ignore some headers;
expires;
proxy_pass
}
location @namedlocation_2 {
other cache settings;
other cache_key settings;
ignore some headers;
expires;
proxy_pass
}
ma per chiamare una posizione denominata l'unico modo che ho trovato è:
location /somelocation {
try_files $uri @named_location;
}
Questo già non sembra giusto, non voglio che nginx vada a cercare file statici, voglio che vada direttamente nella posizione indicata! C'è un modo per "chiamare" direttamente una posizione denominata ?!
Un altro modo in cui pensavo di poter andare a secco è un sacco di include
...
location /somelocation {
include django_unicorn.conf;
}
Ma è un buon modo per farlo? Sembra ok per impostazioni molto generiche (ad es. Quelle proxy), ma non è molto leggibile dover aprire diversi file per ottenere la configurazione completa.
Inoltre, in alcuni casi posso raggruppare alcune posizioni con una regexp, ma mi piace farlo SOLO quando sono logicamente correlate non solo per poter mettere impostazioni comuni nello stesso blocco.
La domanda
Esiste una best practice "ufficiale" per scrivere configurazioni nginx DRY valide?
Mi piacerebbe trovare uno schema come:
location / {
common confs
try_files $uri @name_location
}
** ma come posso scrivere casi specifici per località diverse? **
Potrei semplicemente aggiungere diverse posizioni con la parte non comune di conf e quella comune nella posizione @named_?
location /1/ {
some cache expire settings;
NOTHING ELSE;
}
location /2/ {
some other cache expire settings;
NOTHING ELSE;
}
location / {
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
Quando ho un URL diverso che punta alla stessa risorsa posso semplicemente fare una riscrittura?
location /1/ {
rewrite ^ /3/ last;
}
location /2/ {
rewrite ^ /4/ last;
}
location / {
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
o dovrebbero essere tutti raggruppati in un'unica posizione?
location / {
rewrite ^/1/$ /3/ last;
rewrite ^/2/$ /4/ last;
common settings
try_files
}
location @named_location {
other common settings for this named location only
proxy_pass
}
Relazionato
Non ho trovato molto nella mailing list, tanto meno nel wiki.
Si noti che questa è / non / uguale alla domanda Best practice di NGinx : è una domanda molto generica.
Quest'altro è più rilevante: come faccio a ASCIUGARE questa configurazione di Nginx?
map
- o almeno non l'avevo mai notato e pensavo di poterlo usare in questo modo ... fammi riflettere un po 'di più su questo e vedere se ho ulteriori domande / commenti!