Điểm:3

Tại sao nginx trả về mã trạng thái 301 khi cố mở một thư mục?

lá cờ zm

Tôi đang cố gắng hiểu cách Nginx hoạt động. Bây giờ tôi đang làm việc trên mục lụctry_files chỉ thị. Tập tin cấu hình của tôi là thế này:

sự kiện {}
http {
  viết lại_log vào;
  error_log /var/log/nginx/localhost.error_log gỡ lỗi;

  người phục vụ {
    gốc/ứng dụng;
    nghe 8080 ;
    chỉ số index.html;
    địa điểm / {
      try_files $uri $uri/ =404;
    }
  }
}

Cũng thế /ứng dụng/ thư mục cây là:

/ứng dụng
|-- abcd.html
|-- tập tin.php
|-- index.html
|-- index.php
|-- sss
| `--index.html
|-- style.css
`--thumb.png

Khi tôi cố mở máy chủ cục bộ:8080 mọi thứ hoạt động như mong đợi. Đầu tiên nó sử dụng địa điểm / bối cảnh. Sau đó sử dụng $uri/ để đọc thư mục gốc. Sau đó, vì tên tệp chỉ mục đã được chỉ định, nên nó sử dụng tệp chỉ mục trong thư mục đó. Ngoài ra, tệp nhật ký có thể chỉ ra rằng:

...
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 vị trí thử nghiệm: "/"
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 sử dụng cấu hình "/"
...
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 giai đoạn chung: 12
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 thử trình xử lý tệp
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 tập lệnh http var: "/"
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 đang cố sử dụng tệp: "/" "/app/"
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 tập lệnh http var: "/"
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 đang cố sử dụng dir: "/" "/app/"
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 thử tệp uri: "/"
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 giai đoạn chung: 13
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 giai đoạn nội dung: 14
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 mở chỉ mục "/app/index.html"
27/10/2021 11:37:49 [gỡ lỗi] 1297#1297: *1 chuyển hướng nội bộ: "/index.html?"
...

Nhưng khi tôi mở máy chủ cục bộ:8080/sss, Đầu tiên, nó phản hồi bằng cách chuyển hướng đến máy chủ cục bộ:8080/sss/, sau đó mở tệp chỉ mục bên trong sss/ danh mục. Đây là nhật ký:

27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 vị trí thử nghiệm: "/"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 sử dụng cấu hình "/"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 http cl:-1 max:1048576
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 giai đoạn viết lại: 3
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 giai đoạn viết lại bài đăng: 4
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 giai đoạn chung: 5
...
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 thử trình xử lý tệp
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 Tập lệnh http var: "/sss"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 đang cố sử dụng tệp: "/sss" "/app/sss"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 Tập lệnh http var: "/sss"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 cố gắng sử dụng dir: "/sss" "/app/sss"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 try file uri: "/sss"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 giai đoạn chung: 13
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 giai đoạn nội dung: 14
...
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 giai đoạn nội dung: 18
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 tên tệp http: "/app/sss"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 thêm dọn dẹp: 000055AA4A146290
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 http fd tĩnh: -1
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 http dir
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 http hoàn tất yêu cầu: 301, "/sss?" a:1, c:1
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 http phản hồi đặc biệt: 301, "/sss?"
27/10/2021 11:46:07 [gỡ lỗi] 1297#1297: *3 http đặt nội dung hủy bỏ
...

Tại sao nó không phản hồi với tệp chỉ mục bên trong sss/ thư mục, giống như thư mục gốc, không có chuyển hướng bên ngoài?

Điểm:3
lá cờ jp

Các $uri/ hạn trên một try_files câu lệnh hoạt động giống như hành vi mặc định của Nginx.

Nếu bạn cung cấp một URI không có một dấu vết / trỏ đến một thư mục, trước tiên Nginx sẽ nối thêm một dấu / sử dụng một chuyển hướng bên ngoài (tức là 301).

Nếu bạn cung cấp một URI với một dấu vết / trỏ đến một thư mục, mục lục lệnh sẽ được gọi và có thể tạo chuyển hướng nội bộ tới bất kỳ tệp nào được chỉ định (ví dụ: index.html).

Mặc du tài liệu rõ ràng là một dấu vết / được yêu cầu bởi mục lục chỉ thị. Tôi không thể tìm thấy hành vi cũ được ghi lại ở đâu.

lá cờ zm
Vậy tại sao yêu cầu đầu tiên không được phản hồi với chuyển hướng bên ngoài, mặc dù nó không có dấu `/`? tức là `localhost:8080`. Ngoài ra, trong bối cảnh vị trí, tôi đã chỉ định thử một tệp có thêm dấu `/`.
Richard Smith avatar
lá cờ jp
Nó có dấu `/`. Thanh địa chỉ của trình duyệt của bạn đang ẩn nó khỏi bạn, nhưng máy chủ nhận được URI là `GET /` - hãy xem nhật ký truy cập của bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.