Tôi đang triển khai một SPA. Nó hoạt động khi tôi vừa nhấn vào URL cơ sở. Nhưng khi tôi truy cập một URL sâu hơn, tôi nhận được lỗi 404 từ nginx
Làm cách nào để định cấu hình nginx để đảm bảo nó chuyển hướng đến chỉ mục. Html?
Định cấu hình NGINX và NGINX Plus để phục vụ nội dung tĩnh, với các thư mục gốc dành riêng cho loại, kiểm tra sự tồn tại của tệp và tối ưu hóa hiệu suất
Phần này mô tả cách định cấu hình NGINX và NGINX Plus để phân phát nội dung tĩnh, cách xác định đường dẫn nào được tìm kiếm để tìm tệp được yêu cầu, cách thiết lập tệp chỉ mục và cách điều chỉnh NGINX và NGINX Plus, cũng như nhân, cho
Thư mục gốc và tệp chỉ mục
Chỉ thị chỉ định thư mục gốc sẽ được sử dụng để tìm kiếm tệp. Để có được đường dẫn của tệp được yêu cầu, NGINX nối thêm URI yêu cầu vào đường dẫn được chỉ định bởi chỉ thị
location /images/ {
autoindex on;
}
6. Chỉ thị có thể được đặt ở bất kỳ cấp độ nào trong bối cảnh location /images/ {
autoindex on;
}
7, location /images/ {
autoindex on;
}
8 hoặc location /images/ {
autoindex on;
}
9. Trong ví dụ dưới đây, chỉ thị location /images/ {
autoindex on;
}
6 được xác định cho một máy chủ ảo. Nó áp dụng cho tất cả các khối location /images/ {
autoindex on;
}
9 trong đó lệnh location /images/ {
autoindex on;
}
6 không được bao gồm để xác định lại gốc một cách rõ ràngserver {
root /www/data;
location / {
}
location /images/ {
}
location ~ \.[mp3|mp4] {
root /www/media;
}
}
Tại đây, NGINX tìm kiếm một URI bắt đầu bằng
location / {
index index.$geo.html index.htm index.html;
}
3 trong thư mục location / {
index index.$geo.html index.htm index.html;
}
4 trong hệ thống tệp. Nhưng nếu URI kết thúc bằng phần mở rộng location / {
index index.$geo.html index.htm index.html;
}
5 hoặc location / {
index index.$geo.html index.htm index.html;
}
6, thì NGINX sẽ tìm kiếm tệp trong thư mục location / {
index index.$geo.html index.htm index.html;
}
7 vì nó được xác định trong khối location / {
index index.$geo.html index.htm index.html;
}
8 phù hợpNếu một yêu cầu kết thúc bằng dấu gạch chéo, NGINX sẽ coi đó là yêu cầu cho một thư mục và cố gắng tìm một tệp chỉ mục trong thư mục. Chỉ thị xác định tên của tệp chỉ mục [giá trị mặc định là
location / {
index index.$geo.html index.htm index.html;
}
9]. Để tiếp tục với ví dụ, nếu URI yêu cầu là location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
0, NGINX sẽ gửi tệp location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
1 nếu nó tồn tại. Nếu không, NGINX trả về mã HTTP location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
2 theo mặc định. Thay vào đó, để định cấu hình NGINX trả về danh sách thư mục được tạo tự động, hãy thêm tham số location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
3 vào lệnhlocation /images/ {
autoindex on;
}
Bạn có thể liệt kê nhiều tên tệp trong chỉ thị
location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
4. NGINX tìm kiếm các tệp theo thứ tự đã chỉ định và trả về tệp đầu tiên mà nó tìm thấy________số 8_______
Biến
location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
5 được sử dụng ở đây là biến tùy chỉnh được đặt thông qua lệnh. Giá trị của biến phụ thuộc vào địa chỉ IP của máy kháchĐể trả về tệp chỉ mục, NGINX kiểm tra sự tồn tại của nó và sau đó thực hiện chuyển hướng nội bộ tới URI thu được bằng cách thêm tên của tệp chỉ mục vào URI cơ sở. Chuyển hướng nội bộ dẫn đến tìm kiếm vị trí mới và có thể kết thúc ở một vị trí khác như trong ví dụ sau
location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
Tại đây, nếu URI trong một yêu cầu là
location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
6 và location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
7 không tồn tại nhưng location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
8 thì có, thì chuyển hướng nội bộ tới location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
9 được ánh xạ tới vị trí thứ hai. Kết quả là, yêu cầu được ủy quyềnĐang thử một số tùy chọn
Chỉ thị có thể được sử dụng để kiểm tra xem tệp hoặc thư mục đã chỉ định có tồn tại hay không; . Ví dụ: để kiểm tra sự tồn tại của tệp tương ứng với URI yêu cầu, hãy sử dụng chỉ thị
server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
0 và biến server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
1 như sauserver {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
Tệp được chỉ định ở dạng URI, được xử lý bằng cách sử dụng các lệnh
location /images/ {
autoindex on;
}
6 hoặc server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
3 được đặt trong ngữ cảnh của vị trí hiện tại hoặc máy chủ ảo. Trong trường hợp này, nếu tệp tương ứng với URI ban đầu không tồn tại, NGINX sẽ thực hiện chuyển hướng nội bộ tới URI được chỉ định bởi tham số cuối cùng, trả về server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
4Tham số cuối cùng cũng có thể là mã trạng thái [ngay trước dấu bằng] hoặc tên của một vị trí. Trong ví dụ sau, một lỗi
server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
5 được trả về nếu không có tham số nào của lệnh server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
0 giải quyết một tệp hoặc thư mục hiện cólocation / {
try_files $uri $uri/ $uri.html =404;
}
Trong ví dụ tiếp theo, nếu cả URI gốc và URI có dấu gạch chéo được nối thêm đều không phân giải thành một tệp hoặc thư mục hiện có, thì yêu cầu sẽ được chuyển hướng đến vị trí đã đặt tên để chuyển nó đến một máy chủ được ủy quyền
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass //backend.example.com;
}
Để biết thêm thông tin, hãy xem hội thảo trực tuyến về Bộ nhớ đệm nội dung theo yêu cầu để tìm hiểu cách cải thiện đáng kể hiệu suất của trang web và tìm hiểu sâu về khả năng bộ nhớ đệm của NGINX
Tối ưu hóa hiệu suất để phục vụ nội dung
Tốc độ tải là một yếu tố quan trọng để phục vụ bất kỳ nội dung nào. Thực hiện các tối ưu hóa nhỏ cho cấu hình NGINX của bạn có thể tăng năng suất và giúp đạt được hiệu suất tối ưu
Kích hoạt server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
7
server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
Theo mặc định, NGINX tự xử lý việc truyền tệp và sao chép tệp vào bộ đệm trước khi gửi đi. Kích hoạt lệnh loại bỏ bước sao chép dữ liệu vào bộ đệm và cho phép sao chép dữ liệu trực tiếp từ bộ mô tả tệp này sang bộ mô tả tệp khác. Ngoài ra, để ngăn không cho một kết nối nhanh chiếm hoàn toàn quy trình worker, bạn có thể sử dụng lệnh để giới hạn lượng dữ liệu được truyền trong một lệnh gọi
server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
8 [trong ví dụ này là tới server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
9 MB]location /mp3 {
sendfile on;
sendfile_max_chunk 1m;
#...
}
Kích hoạt location / {
try_files $uri $uri/ $uri.html =404;
}
0
location / {
try_files $uri $uri/ $uri.html =404;
}
Sử dụng chỉ thị cùng với chỉ thị
location / {
try_files $uri $uri/ $uri.html =404;
}
1. Điều này cho phép NGINX gửi các tiêu đề phản hồi HTTP trong một gói ngay sau khi server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
8 lấy được đoạn dữ liệulocation /mp3 {
sendfile on;
tcp_nopush on;
#...
}
Kích hoạt location / {
try_files $uri $uri/ $uri.html =404;
}
3
location / {
try_files $uri $uri/ $uri.html =404;
}
Lệnh này cho phép ghi đè thuật toán của Nagle, ban đầu được thiết kế để giải quyết vấn đề với các gói nhỏ trong mạng chậm. Thuật toán hợp nhất một số gói nhỏ thành một gói lớn hơn và gửi gói với độ trễ
location / {
try_files $uri $uri/ $uri.html =404;
}
4 ms. Ngày nay, khi phục vụ các tệp tĩnh lớn, dữ liệu có thể được gửi ngay lập tức bất kể kích thước gói. Sự chậm trễ cũng ảnh hưởng đến các ứng dụng trực tuyến [ssh, trò chơi trực tuyến, giao dịch trực tuyến, v.v.]. Theo mặc định, lệnh được đặt thành location / {
root /data;
index index.html index.php;
}
location ~ \.php {
fastcgi_pass localhost:8000;
#...
}
3, điều đó có nghĩa là thuật toán của Nagle bị vô hiệu hóa. Chỉ sử dụng lệnh này cho các kết nối cố địnhlocation /mp3 {
tcp_nodelay on;
keepalive_timeout 65;
#...
}
Tối ưu hóa hàng đợi tồn đọng
Một trong những yếu tố quan trọng là NGINX có thể xử lý các kết nối đến nhanh như thế nào. Nguyên tắc chung là khi một kết nối được thiết lập, nó sẽ được đưa vào hàng đợi “nghe” của ổ cắm nghe. Dưới tải bình thường, hàng đợi nhỏ hoặc không có hàng đợi nào cả. Nhưng khi tải cao, hàng đợi có thể tăng lên đáng kể, dẫn đến hiệu suất không đồng đều, kết nối bị gián đoạn và độ trễ tăng lên
Hiển thị hàng đợi nghe
Để hiển thị hàng đợi nghe hiện tại, hãy chạy lệnh này
Đầu ra có thể giống như sau, cho thấy rằng trong hàng đợi nghe trên cổng
location / {
try_files $uri $uri/ $uri.html =404;
}
6 có location / {
try_files $uri $uri/ $uri.html =404;
}
7 kết nối không được chấp nhận so với số lượng tối đa được định cấu hình là location / {
try_files $uri $uri/ $uri.html =404;
}
8 kết nối hàng đợi. Tình trạng này là bình thườnglocation /images/ {
autoindex on;
}
0Ngược lại, trong lệnh sau, số lượng kết nối không được chấp nhận [
location / {
try_files $uri $uri/ $uri.html =404;
}
9] vượt quá giới hạn của location / {
try_files $uri $uri/ $uri.html =404;
}
8. Điều này khá phổ biến khi một trang web có lưu lượng truy cập lớn. Để đạt được hiệu suất tối ưu, bạn cần tăng số lượng kết nối tối đa có thể xếp hàng chờ NGINX chấp nhận trong cả hệ điều hành và cấu hình NGINX của bạnlocation /images/ {
autoindex on;
}
1Điều chỉnh hệ điều hành
Tăng giá trị của tham số hạt nhân
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass //backend.example.com;
}
1 từ giá trị mặc định của nó [location / {
try_files $uri $uri/ $uri.html =404;
}
8] lên một giá trị đủ cao để có một lượng lớn lưu lượng truy cập. Trong ví dụ này, nó đã tăng lên thành location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass //backend.example.com;
}
3Đối với FreeBSD, hãy chạy lệnh
2location /images/ { autoindex on; }
cho Linux
Chạy lệnh
3location /images/ { autoindex on; }
Sử dụng trình soạn thảo văn bản để thêm dòng sau vào
4location / { try_files $uri $uri/ @backend; } location @backend { proxy_pass //backend.example.com; }
4location /images/ { autoindex on; }
Điều chỉnh NGINX
Nếu bạn đặt tham số kernel
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass //backend.example.com;
}
5 thành giá trị lớn hơn location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass //backend.example.com;
}
6, hãy thay đổi tham số location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass //backend.example.com;
}
7 thành chỉ thị NGINX để khớp