Khi bạn dùng caddy mà muốn cấu hình bảo mật một số thông tin như CORS hoặc cấu hình chặn Iframe thì chúng ta có thể cấu hình đơn giản thông qua các block của caddy file hiệu quả
trong bài này mình sẽ tiếp tục dùng cấu hình trong bài hướng dẫn caddy bạn có thể xem cấu hình ở bài này Ẩn Một Số Thư Mục Quan Trọng Với Caddy Server
Cấu trúc của block header sẽ như sau
header [<matcher>] [[+|-|?]<field> [<value>|<find>] [<replace>]] {
# Replace
<field> <find> <replace>
# Add or Set
[+]<field> <value>
# Delete
-<field>
# Default
?<field> <value>
[defer]
}Các giá trị cần lưu ý trong cấu hình
field: Tên của giá trị trong header field, ví dụ một hear như sau:
Content-Type: text/html; charset=utf-8Thì chúng ta sẽ có trường field này là Content-Type, với dữ liệu này thì nó sẽ đi cùng 3 cách cấu hình tương ứng với 3 dấu
- Dấu +: thêm dữ liệu vào giá trị header và nghi đè lên giá trị đó nếu chúng đã tồn tại, mặc định hệ thống sẽ là + và ghi đè.
- Dấu -: xóa giá trị đã tồn tại có thể dùng * ở cuối của 1 từ để xóa hết các giá trị khớp với nó theo regex, ví dụ có nhiều giá trị như Content-Type, Content-Type-x, Content-Type-y… thì bạn có thể dùng Content-Type* để xóa toàn bộ những giá trị đó mà không cần cấu hình nhiều
- Dấu ?: sẽ cài đặt giá trị cho 1 value của header với điều kiện nó chưa có nếu có rồi thì nó sẽ không ghi đè như với dấu +
Value: Giá trị của header field sẽ được thêm vào
Find: tìm kiếm giá trị để phục vụ việc xóa bỏ hoặc thay thế
replace: Giá trị cần thay thế
defer: cái này thì mặc định bật bạn không cần quan tâm và tắt đi nó có tác dụng là kiểm soát giá trị backend trả về cho end user để đảm bảo quá trình xóa hoặc thêm giá trị hoàn thành trước khi gửi đi
Từ cấu hình trên ta có một cấu hình hoàn chỉnh như sau:
header +Custom-Header "My value"
header ?Cache-Control "max-age=3600"
header -Content-Type: text/html; charset=utf-8Với cấu hình này thì có nghĩa mình sẽ:
- Ghi đè: Custom-Header với giá trị My Value
- Thêm giá trị Cache-Control nếu nó không tồn tại
- Xóa cấu hình Content-Type trong header
Từ đó căn cứ vào nhu cầu chúng ta sẽ cấu hình từ
{
order coraza_waf first
}
caddy.manhtuong.net {
coraza_waf {
include /etc/caddy/waf/config.conf
include /etc/caddy/waf/whitelist.conf
include /etc/caddy/waf/coreruleset/crs-setup.conf.example
include /etc/caddy/waf/coreruleset/rules/*.conf
}
route {
rate_limit {body.id} 2r/m
}
file_server {
hide .git
}
root * /home/caddy/web
php_fastcgi unix//run/php/php7.4-fpm.sock
log {
output file /home/caddy/caddy.manhtuong.net.log
}
}Thành
{
order coraza_waf first
}
caddy.manhtuong.net {
coraza_waf {
include /etc/caddy/waf/config.conf
include /etc/caddy/waf/whitelist.conf
include /etc/caddy/waf/coreruleset/crs-setup.conf.example
include /etc/caddy/waf/coreruleset/rules/*.conf
}
route {
rate_limit {body.id} 2r/m
header +Custom-Header "My value"
header ?Cache-Control "max-age=3600"
header -Content-Type text/html; charset=utf-8
}
file_server {
hide .git
}
root * /home/caddy/web
php_fastcgi unix//run/php/php7.4-fpm.sock
log {
output file /home/caddy/caddy.manhtuong.net.log
}
}Các bạn căn cứ nhu cầu cài đặt mà tùy chỉnh thành dữ liệu mình cần.
Nếu bạn cần một cấu hình áp dụng cho toàn bọ máy chủ của mình thì bạn cần tạo một snippets cho cấu hình này như sau
(cors) {
@cors_preflight method OPTIONS
@cors header Origin {args.0}
handle @cors_preflight {
header Access-Control-Allow-Origin "{args.0}"
header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE"
header Access-Control-Allow-Headers "Content-Type"
header Access-Control-Max-Age "3600"
respond "" 204
}
handle @cors {
header Access-Control-Allow-Origin "{args.0}"
header Access-Control-Expose-Headers "Link"
}
}bạn cần thay hết các thông tin về các giá trị bạn cần cài đặt mặc định sẽ là + và ghi đè dữ liệu, đẻ chạy được đoạn snippets này thì chúng ta cần dùng hàm import vào nơi chúng ta cần thì có thể chạy được cấu hình chúng ta mong muốn và kết quả chúng ta có một cấu hình hoàn chỉnh nó sẽ như sau
{
order coraza_waf first
}
(cors) {
@cors_preflight method OPTIONS
@cors header Origin {args.0}
handle @cors_preflight {
header Access-Control-Allow-Origin "{args.0}"
header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE"
header Access-Control-Allow-Headers "Content-Type"
header Access-Control-Max-Age "3600"
respond "" 204
}
handle @cors {
header Access-Control-Allow-Origin "{args.0}"
header Access-Control-Expose-Headers "Link"
}
}
caddy.manhtuong.net {
coraza_waf {
include /etc/caddy/waf/config.conf
include /etc/caddy/waf/whitelist.conf
include /etc/caddy/waf/coreruleset/crs-setup.conf.example
include /etc/caddy/waf/coreruleset/rules/*.conf
}
import cors https://caddy.manhtuong.net
route {
rate_limit {body.id} 200r/s
}
file_server {
hide .git
}
root * /home/caddy/web
php_fastcgi unix//run/php/php7.4-fpm.sock
log {
output file /home/caddy/caddy.manhtuong.net.log
}
}tùy vào điều kiện mà bạn có thể tùy chỉnh cấu hình cho phù hợp với ứng dụng của mình!