Saya menggunakan HAproxy 1.6 sebagai penyeimbang beban di depan server kucing jantan.
Saya perlu menambahkan header tanggapan berdasarkan permintaan URI.
Untuk misalnya, saya ingin menambahkan header respon Cache-Control public,max-age="600"
ketika permintaan uri adalah /api
tetapi tidak ketika permintaan uri adalah sesuatu yang lain.
Percobaan pertama saya menggunakan acl berdasarkan path untuk menambahkan header ke http-response:
acl api path_reg ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if api
Ketika saya mulai haproxy
-d
, saya memiliki peringatan yang mengatakan bahwapath_reg
(ataupath
) tidak kompatibel denganhttp-response
:Dec 6 15:22:29 ip-10-30-0-196 haproxy-systemd-wrapper[315]: [WARNING] 340/152229 (2035) : parsing [/etc/haproxy/haproxy.cfg:78] : acl 'api' will never match because it only involves keywords that are incompatible with 'backend http-response header rule'
Saya mencoba menambahkan tajuk
http-request
alih-alihhttp-response
:acl api path_reg ^/api/(.*)$ http-request add-header Cache-Control public,max-age="600" if api
Itu berhasil tetapi saya membutuhkannya dalam respons
Saya juga mencoba menggunakan variabel haproxy:
http-request set-var(txn.path) path acl path_acl %[var(txn.path)] -m ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if path_acl
Tetapi ketika saya mencoba HAproxy tidak memulai acara dan saya memiliki kesalahan berikut:
[ALERT] 340/162647 (2241) : parsing [/etc/haproxy/haproxy.cfg:48] : error detected while parsing ACL 'path_acl' : unknown fetch method '%[var' in ACL expression '%[var(txn.path)]'.
Bagaimana saya bisa menggunakan jalur permintaan ke ACL untuk mengatur header respons?
sumber
capture.req.uri
dan variabel saat mengeluarkan%[ ]
diacl̀
bekerja. Anda juga benar tentang tanda kutip di sekitarmax-age
nilai danset-header
bukanadd-header
.Cache-Control
respons: Saya menambahkanCache-Control-Authority: implicit, gateway
header untuk memberikan pengembang / pemecah masalah / tester head-up yang saya, proxy, berikan header itu, bukan aplikasi , tetapi aplikasi dapat menonaktifkan saya hanya dengan memberikan tajuknya sendiri. Catatan tajuk ini bukan standar - saya hanya mengada-ada, untuk membantu orang lain di tim menyadari bahwa saya menyediakan in-line ini, bukan aplikasi. Proxy sangat bebas masalah sehingga mereka memiliki kebiasaan buruk lupa bahwa mereka berada di jalan sama sekali.