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.

Vì sao khoá này là HTML tĩnh nhiều trang Mỗi bài là một địa chỉ thật như /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.

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.