Estoy usando el nginx principalmente como un inversa cachining proxy delante de varios gunicon/mod_wsgi aplicaciones y, por supuesto, para servidor de archivos estáticos.
Me parece que rápidamente mi nginx confs llegar a ser imposible mantener; la cuestión es que tengo un par de patrones que son similares (o incluso idénticos), pero no he podido hacer la limpieza.
Uno de los mayores problemas que tengo es que me encantaría usar lugares el nombre como una forma de agrupar un conjunto de confs, por ejemplo.
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. El problema es no tener tanto gunicorn y wsgi. Eso es sólo un ejemplo. Otra es:
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
}
pero para llamar a un nombre de ubicación de la única manera que he encontrado es :
location /somelocation {
try_files $uri @named_location;
}
Esto ya no se siente a la derecha, yo no quiero nginx para ir a buscar los archivos estáticos, yo quiero que vaya directamente a la ubicación con nombre! Es allí una manera de "llamar" a un nombre de ubicación directamente?!
De otra manera, pensé que podría ir en seco es un montón de include
...
location /somelocation {
include django_unicorn.conf;
}
Pero es esta una buena manera de hacerlo? Suena muy bien para las opciones genéricas (por ejemplo. proxy), pero no es muy legible a tener que ir a abrir diferentes archivos para obtener la totalidad de la conf.
También, en algunos casos me pueden agrupar en algunas localidades con una regexp, pero me gusta hacerlo SÓLO cuando están relacionados lógicamente, no sólo para ser capaz de poner en común los ajustes en el mismo bloque.
La Pregunta
Hay un "oficial" de las mejores prácticas para escribir un buen, servicio de nginx configuraciones?
Me gustaría encontrar un patrón como:
location / {
common confs
try_files $uri @name_location
}
** pero, ¿cómo puedo escribir casos específicos para diferentes ubicaciones? **
Podría simplemente añadir varias ubicaciones con la infrecuente parte de la conf y la común en la @named_location?
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
}
Cuando he diferentes url que apunta a un mismo recurso puede simplemente hacer una reescritura?
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 deberían estar todos agrupados en un solo lugar?
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
}
Relacionados con la
No pude encontrar mucho en la lista de correo, y mucho menos en la wiki.
Tenga en cuenta que es /no/ de la misma forma que en la pregunta NGinx Mejores Prácticas - esa es una pregunta genérica.
Este otro es más relevante: ¿Cómo puedo SECAR esta la configuración de Nginx?