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

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;

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ą ;


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.