Я використовую nginx в основному як проксі-сервер кешування перед декількома програмами gunicon / mod_wsgi і, звичайно, для статичних файлів сервера.
Я вважаю, що швидко мій конфіденційність nginx стає неможливим для підтримки; Проблема полягає в тому, що у мене є кілька подібних (або навіть однакових) моделей, але я не можу зробити це чистим.
Однією з найбільших проблем у мене є те, що я хотів би використовувати названі місця як спосіб групування набору конфіденцій, наприклад.
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. Проблема полягає не в тому, щоб мати як guicorn, так і wsgi. Це лише приклад. Ще один:
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
}
але називати назване місце єдиним способом, який я знайшов, це:
location /somelocation {
try_files $uri @named_location;
}
Це вже не правильно, я не хочу, щоб nginx йшов шукати статичні файли, я хочу, щоб він прямував до вказаного місця! Чи є спосіб "зателефонувати" на вказане місце безпосередньо ?!
Ще один спосіб, який я думав, що можу піти на суху, - це багато include
...
location /somelocation {
include django_unicorn.conf;
}
Але це хороший спосіб зробити це? Це звучить нормально для дуже загальних налаштувань (наприклад, проксі), але не дуже читабельно потрібно відкривати різні файли, щоб отримати повну конфіденційність.
Крім того, в деяких випадках я можу згрупувати кілька локацій за допомогою регулярного виразу, але мені подобається робити це ТІЛЬКИ, коли вони логічно пов'язані не просто, щоб мати змогу розміщувати загальні налаштування в одному блоці.
Питання
Чи існує "офіційна" найкраща практика для написання гарних, сухих конфігурацій nginx?
Я хотів би знайти такий зразок:
location / {
common confs
try_files $uri @name_location
}
** але як мені писати конкретні випадки для різних місць? **
Чи можу я просто додати декілька локацій із нечастою частиною конфіденційності та загальною частиною в @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
}
Коли у мене є різні URL-адреси, що вказують на один ресурс, чи можу я просто зробити перезапис?
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
}
чи всі вони повинні бути об'єднані в одне місце?
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
}
Пов'язані
Я не міг знайти багато в списку розсилки, тим більше у вікі.
Зверніть увагу, що це / не / те саме, що питання NGinx Best Practices - це дуже загальне питання.
Цей інший більш релевантний: Як я ПУШИТИ цю конфігурацію Nginx?
map
або, принаймні, я ніколи не помічав і не думав, що можу це використати так ... дозвольте трохи подумати над цим і побачити, чи є у мене додаткові запитання / коментарі!