Как разделить конфигурацию 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
rugk
источник
1
Можно ли использовать модуль Lua или Perl?
Алексей Тен
Какая? Как я могу это сделать? Но, кроме того, я бы хотел найти решение для этого в конфигурационном файле nginx напрямую. Я имею в виду, что это не такой необычный запрос, чтобы иметь возможность использовать несколько строк для директивы конфигурации ... по крайней мере, это то, что я, хотя.
rugk
Это все еще может быть в вашем конфигурационном файле. Вопрос в том, скомпилирован ли ваш 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;
BlackHOST
источник
Это действительно хорошая идея, и она работает. Это скорее обходной путь, но это, безусловно, способ сделать это.
rugk
когда я положил его на сервер {}, я получил: nginx: [emerg] неожиданное "s"
Atombit
0

;является разделителем

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

MRE
источник
Вот что я попробовал, First try: Just split itесли я правильно понял. Проблема заключалась в том, что клиент получил заголовок со всеми переносами строк.
rugk
тогда ваша единственная надежда - поставить все в одну строку. пусть ваш редактор
закутается,