Dzielenie długich linii w pliku konfiguracyjnym nginx

15

Aby nie przekazywać śmieci do zaplecza, mam ścisłe wyrażenie regularne dla locationdyrektywy. To wygląda tak:

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

Chciałbym złożyć linię przy 80 znakach, czy istnieje sposób na podzielenie konfiguracji? Następujące wyniki powodują błąd składniowy, ale szukam czegoś:

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" {

Nie mogłem znaleźć wskazówek w dokumentacji ( http://wiki.nginx.org/ConfigNotation ani http://wiki.nginx.org/HttpCoreModule#location wspominając coś o składaniu linii)

Lekensteyn
źródło
Czy możesz zbudować swój ciąg z wielu interpolowanych fragmentów? (Nie mam pojęcia)
bsb
@bsb Nie możesz używać zmiennych w wyrażeniach lokalizacji, więc nie, nie możesz ustawiać zmiennych i używać interpolacji łańcuchów.
Lekensteyn,

Odpowiedzi:

7

Nie sądzę, że możesz to zrobić.

nginx traktuje wszystkie białe znaki jednakowo, więc nawet jeśli spróbujesz tak podzielić łańcuch, a nginx może go parsować tak, jak chciałeś, skończyłbyś się wyrażeniem regularnym z dużą ilością białych znaków, co na pewno nie jest t czego chcesz. Jeśli nginx nie może go przeanalizować, co jest bardziej prawdopodobne, otrzymasz błąd składniowy.

Musisz po prostu żyć z kilkoma długimi liniami lub tworzyć mniej złożone wyrażenia regularne.

Michael Hampton
źródło
Cóż, jeśli nie może być wiodących pól, mogę z tym żyć. Ale nowa linia wydaje się również interpretowana dosłownie.
Lekensteyn
To naprawdę nie koniec świata. :)
Michael Hampton
1
Na razie utknąłem ze location ".../[a-zA-Z0-9_...-]+$"wzorem, a potem innym w location ~ "\.pkg\.tar\.xz$"środku. Dzięki za odpowiedź, mam nadzieję, że pewnego dnia pojawi się lepsza odpowiedź;)
Lekensteyn