Nginx viết lại vào chỉ mục html

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àng

server {
    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ợp

Nế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ệnh

location /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ư sau

server {
    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;
    }
}
4

Tham 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 http://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

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

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ệu

location /mp3 {
    sendfile   on;
    tcp_nopush on;
    #...
}

Kích hoạt location / { try_files $uri $uri/ $uri.html =404; } 3

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ố định

location /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ường

location /images/ {
    autoindex on;
}
0

Ngượ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ạn

location /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 http://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 http://backend.example.com;
}
3

  • Đối với FreeBSD, hãy chạy lệnh

    location /images/ {
        autoindex on;
    }
    
    2

  • cho Linux

    1. Chạy lệnh

      location /images/ {
          autoindex on;
      }
      
      3

    2. Sử dụng trình soạn thảo văn bản để thêm dòng sau vào

      location / {
          try_files $uri $uri/ @backend;
      }
      
      location @backend {
          proxy_pass http://backend.example.com;
      }
      
      4

      location /images/ {
          autoindex on;
      }
      
      4

Điều chỉnh NGINX

Nếu bạn đặt tham số kernel

location / {
    try_files $uri $uri/ @backend;
}

location @backend {
    proxy_pass http://backend.example.com;
}
5 thành giá trị lớn hơn
location / {
    try_files $uri $uri/ @backend;
}

location @backend {
    proxy_pass http://backend.example.com;
}
6, hãy thay đổi tham số
location / {
    try_files $uri $uri/ @backend;
}

location @backend {
    proxy_pass http://backend.example.com;
}
7 thành chỉ thị NGINX để khớp

Làm cách nào để thêm chỉ mục html vào NGINX?

tệp html với Nginx. Để tuân theo quy trình cung cấp tệp HTML, chúng tôi sẽ tạo thư mục “www” bằng cách sử dụng lệnh “mkdir” . Lệnh “mkdir” được sử dụng trong các hệ thống dựa trên Linux như CentOS để tạo một hoặc nhiều thư mục. Bây giờ, nhấn “CTRL+O” để lưu nội dung mà chúng tôi đã thêm vào trong “chỉ mục.

Chỉ mục html trong NGINX ở đâu?

Đây là chỉ số mặc định. trang html được phân phối với nginx trên Amazon Linux AMI. Nó nằm ở /usr/share/nginx/html .

Làm cách nào để sử dụng viết lại trong NGINX?

Cú pháp của lệnh viết lại là. viết lại regex thay thế-url [flag]; regex. Biểu thức chính quy dựa trên PCRE sẽ được sử dụng để khớp với URI yêu cầu đến. url thay thế. Nếu biểu thức chính quy khớp với URI được yêu cầu thì chuỗi thay thế được sử dụng để thay đổi URI được yêu cầu.

Làm cách nào để xóa chỉ mục html trong NGINX?

Cách xóa tiện ích mở rộng html trong Nginx .
Chỉnh sửa cấu hình của trang web bằng lệnh sau. # vi /etc/nginx/site-available/example. com. conf. Ghi chú. Đường dẫn của tệp cấu hình có thể khác trong máy chủ của bạn. .
Thêm mã sau. viết lại ^(/. *)\. .
Khởi động lại dịch vụ Nginx để áp dụng các thay đổi. # systemctl khởi động lại nginx