วิธีการแยกการกำหนดค่า 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ฉันเห็นว่าเบราว์เซอร์ได้รับส่วนหัวพร้อมตัวแบ่งบรรทัดทั้งหมด ...

ลองครั้งที่สอง: แบ็กสแลช

จริง ๆ แล้วในบทความเชื่อมโยงแล้ว Scott Helme แนะนำสิ่งนี้:

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 ได้ไหม
Alexey Ten

อะไร? ฉันจะทำสิ่งนั้นได้อย่างไร แต่นอกเหนือจากนั้นฉันต้องการโซลูชันสำหรับสิ่งนี้ในไฟล์กำหนดค่า nginx โดยตรง ฉันหมายความว่ามันไม่ใช่คำขอพิเศษที่จะสามารถใช้หลายบรรทัดสำหรับคำสั่งปรับแต่ง ... อย่างน้อยนี่คือสิ่งที่ฉันคิด
2559

อาจยังอยู่ในไฟล์ปรับแต่งของคุณ เป็นเพียงคำถามถ้า nginx ของคุณถูกคอมไพล์โดยเปิดใช้งานหนึ่งในโมดูลเหล่านี้
Alexey Ten

ขณะนี้ยังไม่ได้รวบรวมกับโมดูลเหล่านี้ (เว้นแต่พวกเขาจะอยู่ในชุดเริ่มต้นของโมดูลที่รวบรวมโดย nginx) แต่ฉันสามารถรวบรวมเวอร์ชั่นด้วยโมดูลดังกล่าวได้อย่างแน่นอน ... หากมันช่วยแก้ปัญหานี้ได้ "
2559

คำตอบ:


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;

นั่นเป็นความคิดที่ดีและใช้งานได้จริง มันเป็นวิธีแก้ปัญหามากกว่า แต่มันก็เป็นวิธีที่ทำได้
2560

เมื่อฉันใส่ลงในเซิร์ฟเวอร์ {} ฉันได้รับ: nginx: [ฉุกเฉิน] "s" ที่ไม่คาดคิด
Atombit

0

;เป็นตัวคั่น

เพื่อให้คุณสามารถวางสิ่งต่าง ๆ ลงในหลายบรรทัดเพียงแค่จบบรรทัดสุดท้ายด้วย ;


นั่นคือสิ่งที่ฉันพยายามFirst try: Just split itถ้าฉันเข้าใจถูกต้อง ปัญหาที่เกิดขึ้นคือลูกค้าได้รับส่วนหัวที่มีตัวแบ่งบรรทัดทั้งหมด
rugk

จากนั้นความหวังเดียวของคุณคือทำให้ทุกอย่างอยู่ในบรรทัดเดียว ให้บรรณาธิการของคุณห่อถ้าสิ่งนั้นรบกวนคุณ
MrE
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.