Як розділити конфігурацію nginx на кілька рядків?


13

Особливо під час налаштування заголовка HPKP (або інших довгих заголовків взагалі) було б корисно розділити рядок у nginx-конфігурації на кілька рядків.

Це бажаний результат:

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

Однак для браузера це повинен бути лише один рядок:

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

Тому я спробував деякі речі, але результатами я не задоволений ...

Перша спроба: просто розділіть її

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=";
'

Це працює, але curlя бачу, що браузери отримують заголовок із усіма перервами рядків ...

Друга спроба: зворотний ривок

Насправді у вже пов'язаній статті Скотт Гельме рекомендує це:

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="; \
'

Однак у моєму випадку це просто додало косої риски, а також повернуло їх до браузера, тому це не працює.

То як я можу це зробити?

Бонус

Звичайно, коментарі до кожного рядка були б дивним доповненням:

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
Можна використовувати модуль Lua або Perl?
Олексій

Що? Як я можу це зробити? Але крім цього я швидше хочу вирішити це в файлі конфігурації nginx безпосередньо. Я маю на увазі, що це не надзвичайний запит мати можливість використовувати декілька рядків для конфігураційної директиви ... принаймні, це те, що я хоч.
рюк

Це все ще може бути у вашому конфігураційному файлі. Це лише питання, якщо ваш nginx складений з одним із цих модулів.
Олексій Десять,

Наразі він не компілюється з цими модулями (якщо вони не знаходяться у наборі за замовчуванням модулів, зібраних nginx), але я, безумовно, можу скласти версію з таким модулем ... Якщо це допоможе вирішити цю "проблему".
rugk

Відповіді:


8

Можливо, вам доведеться розглянути змінне вкладення, яке буде виглядати приблизно так:

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;

Це дійсно гарна ідея, і вона працює. Це скоріше обхід, але це, безумовно, спосіб зробити це.
rugk

коли я поставив його на сервер {} Отримав: nginx: [emerg] несподіваний "s"
Atombit

0

;є роздільником

тож ви можете розміщувати речі в декілька рядків, просто закінчуючи останній рядок лише з ;


Це я спробував, First try: Just split itякщо я правильно це розумію. Проблема полягала в тому, що клієнт отримав заголовок із усіма розривами рядків.
rugk

тоді ваша єдина надія поставити все в одну лінію. нехай ваш редактор обгортає, якщо це вас турбує
MrE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.