Jak podzielić konfigurację Nginx na wiele linii?

13

Szczególnie przy konfigurowaniu nagłówka HPKP (lub ogólnie innych długich nagłówków) przydatne byłoby podzielenie linii w konfiguracji nginx na wiele linii.

To jest pożądany wynik:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; 
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; 
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; 
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; 
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";

Jednak w przypadku przeglądarki powinien to być tylko jeden wiersz:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";

Próbowałem więc kilku rzeczy, ale nie jestem zadowolony z wyników ...

Pierwsza próba: po prostu podziel

add_header Public-Key-Pins '
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec=";
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg=";
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg=";
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo=";
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";
'

To działa, ale curlwidzę, że przeglądarki otrzymują nagłówek ze wszystkimi podziałami linii ...

Druga próba: ukośnik odwrotny

Właściwie w już powiązanym artykule Scott Helme zaleca to:

add_header Public-Key-Pins ' \
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; \
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; \
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; \
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; \
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; \
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g="; \
'

Jednak w moim przypadku po prostu dodałem ukośniki, a także zwróciłem je do przeglądarki, więc to nie działa.

Jak mogę to zrobić?

Premia

Oczywiście komentarze do każdej linii byłyby niesamowitym dodatkiem:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; # current ECDSA
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; # current RSA (nginx 1.11.0)
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; # backup ECDSA 1
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; # backup ECDSA 2
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; # backup RSA 1
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g="; # backup RSA 2
dywanik
źródło
1
Czy można użyć modułu Lua lub Perl?
Alexey Ten
Co? Jak mogę to zrobić? Ale poza tym wolę rozwiązanie tego bezpośrednio w pliku konfiguracyjnym nginx. Mam na myśli, że nie jest tak niezwykłe żądanie, aby móc używać wielu linii do dyrektywy config ... przynajmniej tak mi się wydawało.
rugk
To może nadal znajdować się w pliku konfiguracyjnym. To tylko pytanie, czy twój nginx jest skompilowany z włączonym jednym z tych modułów.
Alexey Ten
Obecnie nie jest skompilowany z tymi modułami (chyba że są w domyślnym zestawie modułów skompilowanym przez nginx), ale z pewnością mógłbym skompilować wersję z takim modułem ... Jeśli to pomoże rozwiązać ten „problem”.
rugk

Odpowiedzi:

8

Może być konieczne rozważenie zagnieżdżania zmiennych, które będą wyglądały mniej więcej tak:

set $PKP '';
set $PKP '${PKP}pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";'; # current ECDSA
set $PKP '${PKP}pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec=";'; # current RSA (nginx 1.11.0)
set $PKP '${PKP}pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg=";';  # Backup ECDSA 1
set $PKP '${PKP}pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg=";';  # Backup ECDSA 2
set $PKP '${PKP}pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo=";'; # backup RSA 1
set $PKP '${PKP}pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";';  # Backup RSA 2

add_header Public-Key-Pins $PKP;
BlackHOST
źródło
To naprawdę dobry pomysł i działa. Jest to raczej obejście, ale z pewnością jest to sposób na zrobienie tego.
rugk
kiedy włożyłem go na serwer {} dostałem: nginx: [emerg] nieoczekiwany "s"
Atombit
0

;jest separatorem

dzięki czemu możesz umieszczać rzeczy na wielu liniach, wystarczy zakończyć ostatni wiersz tylko za pomocą ;

MrE
źródło
Właśnie tego próbowałem, First try: Just split itjeśli dobrze to rozumiem. Problem polegał na tym, że klient otrzymał nagłówek ze wszystkimi podziałami linii.
rugk
wtedy jedyną nadzieją jest umieszczenie wszystkiego w jednym wierszu. pozwól swojemu redaktorowi owinąć się, jeśli ci to przeszkadza
MrE