Khoá học ngắn về nginx
Nginx: location và proxy_pass
Khoá này đi qua hai quy tắc định đoạt việc một request rơi vào khối nào và tới backend dưới đường dẫn
nào: thứ tự nginx xét các khối location, và cách proxy_pass ghép đường dẫn.
Mọi kết quả trong bài đều đo trên nginx 1.27.5 trong container nginx:1.27-alpine, không
dẫn lại từ tài liệu khác.
/lessons/location.html, nên công cụ tìm kiếm lập chỉ mục
được từng bài. Các khoá cũ dùng định tuyến bằng # thì cả khoá chỉ là một địa chỉ duy nhất
với công cụ tìm kiếm — đo được: /hnsw trên một khoá như vậy trả về 404 vì máy chủ không có
fallback theo đường dẫn.
Lộ trình
Mỗi bài khoảng 10–15 phút đọc, kèm một phòng thí nghiệm chạy ngay trên trình duyệt.
nginx chọn khối location thế nào
Năm bước, đúng thứ tự. Kèm lab tự gõ cấu hình và đường dẫn, đối chiếu với 14 kết quả đo trên nginx thật.
Bài 2proxy_pass và dấu gạch chéo
Bốn cách viết, bốn đường dẫn khác nhau tới backend. Một trong bốn nối hai chuỗi liền nhau thành đường dẫn không tồn tại.
Cách đo
Mỗi bài dựng một container nginx:1.27-alpine với cấu hình rút gọn, mỗi khối
location trả về tên của chính nó, rồi gọi curl qua từng đường dẫn để xem
khối nào thắng. Đường dẫn nào cho kết quả nào thì bài ghi đúng như vậy.
docker run -d --name nglab -p 8099:80 \
-v "$PWD/default.conf:/etc/nginx/conf.d/default.conf:ro" \
nginx:1.27-alpine
curl -s http://localhost:8099/img/a.gif
# 3 regex-gif-jpg
Cách đo này bắt được cả lỗi cấu hình. Khi dựng cấu hình cho bài 1, nginx từ chối khởi động với
duplicate location "/images/": ^~ /images/ và /images/ là cùng
một khối, modifier không tạo khối riêng. Cú pháp của hai dòng đó trông như hai khối khác nhau, nên
khác biệt chỉ lộ ra khi nginx đọc cấu hình.