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.