Nginx là một trong những máy chủ web phổ biến nhất trên thế giới. Nó có thể làm tốt nhiệm vụ xử lý hệ thống có lượng truy cập lớn cùng 1 thời điểm, có thể chắc chắn nhận được nhiều công việc như. máy chủ web, máy chủ thư hoặc máy chủ proxy ngược. Trong bài viết hướng dẫn này, chúng ta sẽ thảo luận về vấn đề. Nginx đã xử lý yêu cầu khách hàng như thế nào?
Cấu hình khối Nginx
Nginx phân chia cấu hình trong nhiều khối khác nhau để tạo thành cấu trúc cấu trúc cây. Mỗi lần yêu cầu được gửi lên máy chủ, nginx sẽ xác định khối cấu hình nào sẽ được sử dụng để xử lý yêu cầu. And normal a block blogo to handle request will have a format as after
server { location { } }Một khối máy chủ là một tập hợp của nhiều cấu hình nginx quyết định hướng xử lý lý do cho các yêu cầu khác nhau dựa trên cổng tên miền và địa chỉ IP. Một khối vị trí nằm trong khối máy chủ được sử dụng để xác định rằng nginx có thể xử lý yêu cầu cho nhiều yêu cầu với các định dạng URI khác nhau. URI could be be chia thao thao theo bất kỳ cách nào mà quản trị viên hệ thống muốn phân loại yêu cầu
Cách mà nginx quyết định khối máy chủ nào sẽ xử lý yêu cầu
kể từ khi nginx cho phép khai báo server trong config thành những block block riêng biệt cho từng virtual host thì ta cần phải có cách để xác định được khi nào thì request nào sẽ bị xử lí ở đâu. NGINX thực hiện công việc này thông qua 2 thuộc tính trong cấu hình đó là lệnh listen và lệnh server_name
Phân tích listen directive và server_name để tìm ra server web nào mà request sẽ được ánh xạ tới
Đầu tiên, NGINX sẽ xem xét địa chỉ IP và cổng của yêu cầu, NGINX sẽ đối chiếu với từng lệnh nghe của mỗi khối máy chủ để tìm ra khối nào sẽ giải quyết yêu cầu này. Thông thường thì listen directive sẽ được định nghĩa là ip hoặc port mà máy chủ sẽ trả lời. Nếu không khai báo, nginx sẽ nghe mặc định ở 0. 0. 0. 0. 80 (hoặc 0. 0. 0. 0. 8080 nếu nginx không chạy dưới quyền user không được root). Tóm tắt là phản hồi sau khi lí do hoàn tất sẽ trả về phản hồi về cổng 80
Listen directive can be set to
- địa chỉ ip đơn (mặc định sẽ chạy ở cổng 80), hoặc kết hợp bao gồm ip và cổng
- đường dẫn đến ổ cắm unix
Tùy chọn cuối cùng chỉ có ý nghĩa khi ta muốn trả lời yêu cầu về một máy chủ khác
Trong quá trình xác minh yêu cầu xem sẽ được chuyển đến bất kỳ khối máy chủ nào, nginx sẽ cố định thông tin từ lệnh lắng nghe trước theo luật như sau
- NGINX sẽ gán giá trị mặc định cho khối bị thiếu thông tin. VD like. khối không có lệnh nghe sẽ sử dụng giá trị là 0. 0. 0. 0. 80, chặn địa chỉ đặt địa chỉ ip sẽ mặc định nghe ở cổng 80, chặn chỉ mỗi cổng sẽ chuyển về nghe ở điểm chỉ 0. 0. 0. 0
Sau quá trình tìm theo ip và port, nginx sẽ tìm tiếp theo chỉ thị server_name và đối chiếu nó với trường Host trong request
server { listen 80; server_name *.example.com; . . . }khối chỉ thị vị trí
Sau khi đã chọn được khối máy chủ nào sẽ tiếp nhận yêu cầu này, nginx sẽ tiếp tục phân tích URI của yêu cầu để tìm ra hướng xử lý lý do của yêu cầu dựa trên vị trí khối có cú pháp như sau
location optional_modifier location_match { . . . }tùy chọn_modifier. bạn có thể tạm hiểu nó là kiểu so sánh để tìm ra đối chiếu với location_match. Có nhiều loại tùy chọn như sau
- (không ai). Nếu không khai báo bất cứ điều gì, NGINX sẽ hiểu là tất cả các yêu cầu có URI bắt đầu bằng phần location_match sẽ được chuyển cho khối vị trí này xử lý
- =. Khai báo này chỉ ra rằng URI phải có chính xác giống như location_match (giống như chuỗi so sánh bình thường)
- ~. Sử dụng biểu thức chính quy cho các URI
- ~*. Sử dụng biểu thức chính quy cho các URI cho phép chuyển cả chữ hoa và chữ thường
Một số ví dụ
location /site { . . . }các yêu cầu có URI có định dạng như sau. /trang web, /trang web/trang/1, trang web/chỉ mục. html sẽ được xử lý thông qua vị trí này
location = /site { . . . }with 3 URI as side on, only have /site will have been handle in this directive, but /site/page/1 or /site/index. html thì không
location ~ \.(jpe?g|png|gif|ico)$ { . . . }request has đuôi. jpg,. jpeg,. png,. ảnh gif,. ico could pass qua this location but. PNG thì không
location ~* \.(jpe?g|png|gif|ico)$ { . . . }same as on but end. PNG can also pass
When any, location block will jump to other block
Thông thường khi mà khối vị trí được sử dụng để phục vụ một yêu cầu nào đó thì hành động sẽ hoàn toàn nằm trong ngữ cảnh của nó (bên trong dấu {}). Và nó sẽ chỉ nhảy sang các khối khác hoặc chuyển hương xử lý yêu cầu khi có yêu cầu từ chính bên trong bối cảnh của nó. Một vài chỉ thị có thể yêu cầu chuyển hướng. Ví dụ
- mục lục
- try_files
- viết lại
- error_page
chỉ thị chỉ mục
chỉ mục trực tiếp nằm bên trong vị trí luôn được nginx trỏ tới đầu tiên khi xử lý yêu cầu điều hướng lý do. Định nghĩa trang mặc định mà Nginx sẽ phục vụ nếu không có tên tập tin được chỉ định trong yêu cầu (nói cách khác, trang chỉ mục). Chúng ta có thể chỉ định nhiều tên tệp và tệp đầu tiên được tìm thấy sẽ được sử dụng. Nếu không có tập tin cụ thể nào được tìm thấy, Nginx sẽ hoặc đang cố gắng phát hiện 1 mục tự động của các tập tin
________số 8_______lệnh try_files
Cố gắng phục vụ các tập tin được chỉ định (các tham số từ 1 đến N-1 trong chỉ thị), nếu không có tập tin nào tồn tại, nhảy đến vị trí khối được khai báo (tham số cuối cùng trong chỉ thị)
location / { try_files $uri $uri.html $uri/ /fallback/index.html; }viết lại chỉ thị
Khác với Apache, Nginx không sử dụng tệp. htaccess nên khi bạn cần viết lại url thì phải chuyển đổi qua quy tắc của Nginx. Trong bài viết này, mình sẽ đưa ra một số ví dụ về quy tắc mà Nginx sử dụng để viết lại url, chuyển hướng và một số cấu hình cần thiết khác
server { listen 80; server_name *.example.com; . . . } 0chỉ thị error_page
chỉ thị khi không tìm thấy tệp tham chiếu
server { listen 80; server_name *.example.com; . . . } 1Tham khảo
https. //viblo. asia/p/tim-hieu-va-huong-dan-setup-web-server-nginx-OREGwBwlvlN https. //www. kỹ thuật số. com/cộng đồng/hướng dẫn/sự hiểu biết-nginx-máy chủ-và-vị trí-khối-lựa chọn-thuật toán