Nginx chuyển hướng đến chỉ mục php
Trong cấu hình apache của tôi, tôi có quy tắc viết lại đơn giản sau đây Show
làm cách nào tôi có thể viết lại điều này trong nginx?
Đây là khối máy chủ nginx của tôi bây giờ trông như thế nào, nhưng nó không hoạt động 🙁 Trong bài đăng trên blog này, chúng tôi thảo luận về cách tạo quy tắc viết lại NGINX (các phương pháp giống nhau hoạt động cho cả NGINX Plus và phần mềm NGINX mã nguồn mở). Viết lại quy tắc thay đổi một phần hoặc toàn bộ URL trong yêu cầu của khách hàng, thường cho một trong hai mục đích
Ghi chú. Để tìm hiểu cách chuyển đổi quy tắc viết lại máy chủ HTTP Apache thành quy tắc viết lại NGINX, hãy xem bài đăng trên blog đồng hành của chúng tôi, Chuyển đổi quy tắc viết lại Apache sang quy tắc viết lại NGINX Chúng tôi cho rằng bạn đã quen thuộc với các mã phản hồi HTTP và các biểu thức thông thường (NGINX và NGINX Plus sử dụng cú pháp Perl) So sánh Chỉ thị return (1xx | 2xx | 4xx | 5xx) ["text"];0, return (1xx | 2xx | 4xx | 5xx) ["text"];1 và return (1xx | 2xx | 4xx | 5xx) ["text"];2Hai lệnh để viết lại NGINX cho mục đích chung là 0 và 1, và lệnh 2 là một cách thuận tiện để gửi các yêu cầu trực tiếp đến các máy chủ ứng dụng. Hãy xem lại những gì các chỉ thị làm và chúng khác nhau như thế nàoChỉ thị return (1xx | 2xx | 4xx | 5xx) ["text"];0Chỉ thị 20 đơn giản hơn trong số hai chỉ thị có mục đích chung và vì lý do đó, chúng tôi khuyên bạn nên sử dụng nó thay vì 1 khi có thể (sau này sẽ nói thêm về lý do và khi nào). Bạn gửi kèm theo 0 trong ngữ cảnh 23 hoặc 24 chỉ định các URL sẽ được viết lại và nó xác định URL đã sửa (viết lại) để khách hàng sử dụng trong các yêu cầu tài nguyên trong tương laiĐây là một ví dụ rất đơn giản giúp chuyển hướng khách hàng đến một tên miền mới 7Chỉ thị 25 có nghĩa là khối 26 áp dụng cho cả lưu lượng HTTP và HTTPS. Lệnh 27 khớp với các URL yêu cầu có tên miền www. tên Cu. com. Chỉ thị 0 yêu cầu NGINX ngừng xử lý yêu cầu và ngay lập tức gửi mã ______129 30 31 và URL được viết lại đã chỉ định cho máy khách. URL được viết lại sử dụng hai biến NGINX để nắm bắt và sao chép các giá trị từ URL yêu cầu ban đầu. 32 là giao thức (http hoặc https) và 33 là URI đầy đủ bao gồm các đối số. Đối với mã trong sê-ri 34, tham số 35 xác định URL mới (được viết lại) 9Đối với các mã khác, bạn có thể tùy ý xác định một chuỗi văn bản xuất hiện trong nội dung phản hồi (văn bản chuẩn cho mã HTTP, chẳng hạn như 36 37 cho 38, vẫn được bao gồm trong tiêu đề). Văn bản có thể chứa các biến NGINX
Ví dụ: lệnh này có thể phù hợp khi từ chối các yêu cầu không có mã thông báo xác thực hợp lệ 2Ngoài ra còn có một số lối tắt cú pháp mà bạn có thể sử dụng, chẳng hạn như bỏ qua mã nếu nó là 39; (Trong một số trường hợp, bạn có thể muốn trả về một phản hồi phức tạp hơn hoặc nhiều sắc thái hơn mức bạn có thể đạt được trong một chuỗi văn bản. Với chỉ thị 71, bạn có thể trả về một trang HTML tùy chỉnh hoàn chỉnh cho mỗi mã HTTP, cũng như thay đổi mã phản hồi hoặc thực hiện chuyển hướng. )Vì vậy, chỉ thị 0 rất dễ sử dụng và phù hợp khi chuyển hướng đáp ứng hai điều kiện. URL được viết lại phù hợp với mọi yêu cầu khớp với khối 26 hoặc 74 và bạn có thể tạo URL được viết lại bằng các biến NGINX tiêu chuẩnChỉ thị return (1xx | 2xx | 4xx | 5xx) ["text"];1Nhưng điều gì sẽ xảy ra nếu bạn cần kiểm tra sự khác biệt phức tạp hơn giữa các URL, nắm bắt các phần tử trong URL gốc không có các biến NGINX tương ứng hoặc thay đổi hoặc thêm các phần tử trong đường dẫn? Giống như chỉ thị 0, bạn gửi kèm theo chỉ thị 78 trong ngữ cảnh 26 hoặc 74 xác định các URL sẽ được viết lại. Mặt khác, hai chỉ thị khá khác biệt hơn là giống nhau và chỉ thị 1 có thể phức tạp hơn để sử dụng chính xác. Cú pháp của nó đủ đơn giản 3Nhưng đối số đầu tiên, 92, có nghĩa là NGINX Plus và NGINX chỉ viết lại URL nếu nó khớp với biểu thức chính quy đã chỉ định (ngoài việc khớp với lệnh 26 hoặc 74). Thử nghiệm bổ sung có nghĩa là NGINX phải xử lý nhiều hơnĐiểm khác biệt thứ hai là chỉ thị 1 chỉ có thể trả về mã 29 hoặc 39. Để trả về các mã khác, bạn cần bao gồm chỉ thị 0 sau chỉ thị 1 (xem ví dụ bên dưới)Và cuối cùng, chỉ thị 1 không nhất thiết phải dừng quá trình xử lý yêu cầu của NGINX như 0, và nó không nhất thiết phải gửi chuyển hướng đến máy khách. Trừ khi bạn chỉ rõ (bằng cờ hoặc cú pháp của URL) rằng bạn muốn NGINX tạm dừng xử lý hoặc gửi chuyển hướng, nó sẽ chạy qua toàn bộ cấu hình để tìm kiếm các lệnh được xác định trong mô-đun Viết lại ( 92, 93, 0, 1 . Nếu một URL được viết lại khớp với một lệnh tiếp theo từ mô-đun Viết lại, NGINX sẽ thực hiện hành động được chỉ định trên URL đã viết lại (thường viết lại nó một lần nữa)Đây là lúc mọi thứ có thể trở nên phức tạp và bạn cần lập kế hoạch cẩn thận về cách sắp xếp thứ tự các lệnh để đạt được kết quả mong muốn. Chẳng hạn, nếu khối 74 ban đầu và các quy tắc viết lại NGINX trong đó khớp với URL đã viết lại, NGINX có thể rơi vào một vòng lặp, áp dụng viết lại nhiều lần cho đến giới hạn tích hợp sẵn là 10 lần. Để tìm hiểu tất cả các chi tiết, hãy xem tài liệu dành cho mô-đun Viết lại. Như đã lưu ý trước đó, chúng tôi khuyên bạn nên sử dụng chỉ thị 0 nếu có thể để thay thếĐây là quy tắc viết lại NGINX mẫu sử dụng chỉ thị 1. Nó khớp với các URL bắt đầu bằng chuỗi /download và sau đó bao gồm thư mục /media/ hoặc /audio/ ở đâu đó sau này trong đường dẫn. Nó thay thế các phần tử đó bằng /mp3/ và thêm phần mở rộng tệp thích hợp,. mp3 hoặc. ra. Các biến 70 và 71 nắm bắt các phần tử đường dẫn không thay đổi. Ví dụ: /download/cdn-west/media/file1 trở thành /download/cdn-west/mp3 . mp3 . Nếu có phần mở rộng trên tên tệp (chẳng hạn như. flv), biểu thức sẽ loại bỏ nó và thay thế nó bằng. mp3. 7Chúng tôi đã đề cập ở trên rằng bạn có thể thêm cờ vào lệnh 1 để kiểm soát luồng xử lý. Cờ 73 trong ví dụ là một trong số đó. nó yêu cầu NGINX bỏ qua mọi chỉ thị mô-đun Viết lại tiếp theo trong khối 26 hoặc 74 hiện tại và bắt đầu tìm kiếm một 74 mới khớp với URL đã viết lạiChỉ thị cuối cùng của 0 trong ví dụ này có nghĩa là nếu URL không khớp với chỉ thị của 1, thì mã 79 sẽ được trả lại cho khách hàngChỉ thị return (1xx | 2xx | 4xx | 5xx) ["text"];2Giống như chỉ thị 0 và 1, chỉ thị 13 được đặt trong khối 26 hoặc 74. Là tham số, nó nhận danh sách một hoặc nhiều tệp và thư mục và URI cuối cùng 9NGINX kiểm tra sự tồn tại của các tệp và thư mục theo thứ tự (xây dựng đường dẫn đầy đủ đến từng tệp từ cài đặt của các chỉ thị 16 và 17) và phục vụ tệp đầu tiên mà nó tìm thấy. Để chỉ ra một thư mục, hãy thêm một dấu gạch chéo vào cuối tên phần tử. Nếu không có tệp hoặc thư mục nào tồn tại, NGINX sẽ thực hiện chuyển hướng nội bộ tới URI được xác định bởi phần tử cuối cùng ( 18)Để chỉ thị 2 hoạt động, bạn cũng cần xác định khối 74 nắm bắt chuyển hướng nội bộ, như minh họa trong ví dụ sau. Phần tử cuối cùng có thể là một vị trí đã đặt tên, được biểu thị bằng ký hiệu đầu tiên ( 901)Chỉ thị 2 thường sử dụng biến 903, đại diện cho một phần của URL sau tên miềnTrong ví dụ sau, NGINX phục vụ tệp GIF mặc định nếu tệp được khách hàng yêu cầu không tồn tại. Khi khách hàng yêu cầu (ví dụ) http. //www. miền. com/hình ảnh/hình ảnh1. gif, NGINX trước tiên tìm image1. gif trong thư mục cục bộ được chỉ định bởi chỉ thị 904 hoặc 905 áp dụng cho vị trí (không được hiển thị trong đoạn trích). Nếu hình ảnh1. gif không tồn tại, NGINX tìm image1. gif/ và nếu không tồn tại, nó sẽ chuyển hướng đến /images/default. gif. Giá trị đó khớp chính xác với lệnh 74 thứ hai, vì vậy, quá trình xử lý dừng lại và NGINX phân phối tệp đó và đánh dấu tệp được lưu vào bộ nhớ cache trong 30 giây 9Ví dụ – Chuẩn hóa tên miềnMột trong những cách sử dụng phổ biến nhất của các quy tắc viết lại NGINX là nắm bắt các phiên bản không dùng nữa hoặc không chuẩn của tên miền trang web và chuyển hướng chúng đến tên hiện tại. Có một số trường hợp sử dụng liên quan Chuyển hướng từ Tên cũ sang Tên hiện tạiQuy tắc viết lại NGINX mẫu này chuyển hướng vĩnh viễn các yêu cầu từ www. tên Cu. com và tên cũ. đến www. tên mới. com, sử dụng hai biến NGINX để lấy các giá trị từ URL yêu cầu ban đầu – 32 là giao thức ban đầu (http hoặc https) và 33 là URI đầy đủ (theo sau tên miền), bao gồm cả các đối số 7Bởi vì 33 nắm bắt phần URL theo sau tên miền, cách viết lại này phù hợp nếu có sự tương ứng một-một của các trang giữa các trang web cũ và mới (ví dụ: www. tên mới. com/about có nội dung cơ bản giống như www. tên Cu. com/về). Nếu bạn đã tổ chức lại trang web ngoài việc thay đổi tên miền, thì có thể an toàn hơn khi chuyển hướng tất cả các yêu cầu đến trang chủ, bằng cách bỏ qua 33 1Một số blog khác về viết lại URL trong NGINX sử dụng chỉ thị 1 cho các trường hợp sử dụng này, như thế này 90Điều này kém hiệu quả hơn so với chỉ thị 0 tương đương, vì nó yêu cầu NGINX xử lý một biểu thức chính quy, mặc dù là một biểu thức đơn giản (dấu mũ [ 913 ], khớp với toàn bộ URL ban đầu). Chỉ thị 0 tương ứng cũng dễ hiểu hơn đối với người đọc. 0 29 chỉ ra rằng NGINX trả về mã 29 rõ ràng hơn so với ký hiệu 1 919 920 . Thêm và xóa tiền tố wwwNhững ví dụ này thêm và xóa tiền tố www 91Một lần nữa, 0 thích hợp hơn so với 1 tương đương, như sau. 1 yêu cầu diễn giải một biểu thức chính quy – 924 – và tạo một biến tùy chỉnh ( 70) trên thực tế tương đương với biến 33 được tích hợp sẵn. 92Chuyển hướng tất cả lưu lượng truy cập đến tên miền chính xácĐây là trường hợp đặc biệt chuyển hướng lưu lượng truy cập đến trang chủ của trang web khi URL yêu cầu không khớp với bất kỳ khối 26 và 74 nào, có thể do tên miền bị sai chính tả. Nó hoạt động bằng cách kết hợp tham số 929 với chỉ thị 930 và dấu gạch dưới làm tham số cho chỉ thị 931 93Chúng tôi sử dụng dấu gạch dưới làm tham số cho 931 để tránh vô tình khớp với một tên miền thực – có thể giả định rằng sẽ không có trang web nào có dấu gạch dưới làm tên miền của nó. Tuy nhiên, các yêu cầu không khớp với bất kỳ khối 26 nào khác trong cấu hình sẽ kết thúc ở đây và tham số 929 thành 930 yêu cầu NGINX sử dụng khối này cho chúng. Bằng cách bỏ qua biến 33 khỏi URL được viết lại, chúng tôi chuyển hướng tất cả các yêu cầu đến trang chủ, một ý tưởng hay vì các yêu cầu có tên miền sai đặc biệt có khả năng sử dụng các URI không tồn tại trên trang webVí dụ – Buộc tất cả Yêu cầu sử dụng SSL/TLSKhối 126 ________ này buộc tất cả khách truy cập sử dụng kết nối an toàn (SSL/TLS) tới trang web của bạn 94Một số blog khác về quy tắc viết lại NGINX sử dụng thử nghiệm 93 và chỉ thị 1 cho trường hợp sử dụng này, như thế này 95Nhưng phương pháp này cần xử lý thêm vì NGINX phải vừa đánh giá điều kiện 93 vừa xử lý biểu thức chính quy trong chỉ thị 1Ví dụ – Kích hoạt liên kết cố định đẹp cho trang web WordPressNGINX và NGINX Plus là những nền tảng phân phối ứng dụng rất phổ biến cho các trang web sử dụng WordPress. Chỉ thị 2 sau đây yêu cầu NGINX kiểm tra sự tồn tại của tệp, 943, và sau đó là thư mục, 944. Nếu tệp hoặc thư mục không tồn tại, NGINX sẽ trả về một chuyển hướng đến /index. php và chuyển các đối số chuỗi truy vấn, được ghi lại bởi tham số 945 96Ví dụ – Bỏ yêu cầu đối với phần mở rộng tệp không được hỗ trợVì nhiều lý do, trang web của bạn có thể nhận được các URL yêu cầu kết thúc bằng phần mở rộng tệp tương ứng với máy chủ ứng dụng mà bạn không chạy. Trong ví dụ này từ blog Engine Yard, máy chủ ứng dụng là Ruby on Rails, vì vậy các yêu cầu với các loại tệp được xử lý bởi các máy chủ ứng dụng khác (Trang máy chủ đang hoạt động, PHP, CGI, v.v.) không thể được phục vụ và cần phải bị từ chối. Trong khối 26 chuyển bất kỳ yêu cầu nào đối với nội dung được tạo động cho ứng dụng, lệnh 74 này loại bỏ các yêu cầu đối với các loại tệp không phải Rails trước khi chúng vào hàng đợi Rails 97Nói một cách chính xác, mã phản hồi ____2948 38 là nó cho biết rõ ràng tài nguyên vĩnh viễn không khả dụng, vì vậy khách hàng sẽ không gửi lại yêu cầu. Bạn có thể muốn cung cấp cho khách hàng thông tin chính xác hơn về lý do thất bại, bằng cách trả lại mã phản hồi 79 mà không cần giải thích. 98Mã 79 xác nhận hoàn toàn rằng tài nguyên được yêu cầu tồn tại, vì vậy mã 38 có thể là lựa chọn tốt hơn nếu bạn muốn đạt được “bảo mật thông qua che khuất” bằng cách cung cấp cho khách hàng càng ít thông tin càng tốt. Nhược điểm là khách hàng có thể thử lại yêu cầu nhiều lần vì 38 không cho biết lỗi là tạm thời hay vĩnh viễnVí dụ – Định cấu hình định tuyến tùy chỉnhTrong ví dụ này từ MODXCloud, bạn có một tài nguyên có chức năng như một bộ điều khiển cho một tập hợp các URL. Người dùng của bạn có thể sử dụng tên dễ đọc hơn cho tài nguyên và bạn viết lại (không chuyển hướng) nó để bộ điều khiển xử lý tại danh sách. html |