Разделение длинных строк в конфигурационном файле nginx

15

Чтобы не передавать мусор на сервер, у меня есть строгое регулярное выражение для locationдирективы. Это выглядит так:

location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/...(more|restrict).ext {
    # other directives
}

Я хотел бы сложить линию на 80 символов, есть ли способ разделить конфигурацию? Следующее приводит к синтаксической ошибке, но это то, что я ищу:

location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/"\
            "...(more|restrict).ext" {
# results in a literal newline (%0A) being accepted
location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/
...(more|restrict).ext" {

Я не смог найти подсказки в документации ( http://wiki.nginx.org/ConfigNotation и http://wiki.nginx.org/HttpCoreModule#location ничего не упомянули о сгибании строк)

Lekensteyn
источник
Не могли бы вы построить свою строку из нескольких интерполированных фрагментов? (
Понятия
@bsb Вы не можете использовать переменные в выражениях местоположения, поэтому нет, вы не можете устанавливать переменные и использовать интерполяцию строк.
Лекенштейн

Ответы:

7

Я не думаю, что вы можете сделать это.

nginx одинаково обрабатывает все пробелы, поэтому даже если вы попытаетесь разделить вашу строку таким образом, и nginx сможет проанализировать ее так, как вы хотели, вы получите регулярное выражение с кучей пробелов, что, я уверен, не так. т то, что вы хотите. Если nginx не смог разобрать его, что более вероятно, вы просто получите синтаксическую ошибку.

Вам просто придется жить с несколькими длинными строками или создавать менее сложные регулярные выражения.

Майкл Хэмптон
источник
Ну, если не может быть ведущих мест, я могу жить с этим. Но новая строка, кажется, интерпретируется буквально также.
Лекенштейн
Это действительно не конец света. :)
Майкл Хэмптон
1
Пока я застрял с location ".../[a-zA-Z0-9_...-]+$"шаблоном, за которым следует другой location ~ "\.pkg\.tar\.xz$"внутри. Спасибо за ваш ответ, надеюсь, когда-нибудь появится лучший ответ;)
Лекенштейн