Mẹo Hack Nginx

ITtoday.vn- Nginx là một máy chủ web hiệu suất cao và máy chủ proxy email được viết bởi Igor Sysoev và một sự thay thế tốt cho Apache HTTPD, dẫn đầu thị trường. Nginx đang nhanh chóng gia tăng thị phần với các trang web lớn tham gia nó như wordpress.com.

Trong tháng 6 năm 2008 Netcraft khảo sát LiteSpeed ​​mất hơn 600 nghìn trang web trong khảo sát này, trong khi nginx tăng hơn một triệu trang web, nhiều hơn gấp đôi số lượng. Hệ thống blog WordPress gần đây chuyển đổi tất cả các cân bằng tải để nginx, bằng cách sử dụng mô-đun băm thượng nguồn để phục vụ 8-9000 yêu cầu mỗi giây. Chúng tôi cũng đã có quyết định chuyển một số trang web của chúng tôi để Nginx. Dưới đây là vài lời khuyên cần thiết và hướng dẫn chung cho cấu hình Nginx. Đây không phải là một thay thế cho việc đọc các tài liệu hướng dẫn (rtfm). Tuy nhiên khi bạn đang mắc kẹt ngay cả sau khi đọc và đọc lại các tài liệu nginx sau đó đọc dưới đây. Bạn sẽ hiểu giá trị của những lời khuyên dưới đây chỉ sau đó

Chúng tôi sẽ tập trung vào lời khuyên cấu hình chung cũng như lưu trữ ảo.

Lưu ý: Trong lưu trữ ảo mà bạn sử dụng địa chỉ IP giống nhau cho nhiều trang web. Mỗi trang web có nhiều khả năng sẽ có riêng biệt. (Giả sử ban đầu bạn đã được lưu trữ trên máy chủ Apache HTTPD web) htaccess, thư mục gốc riêng biệt vv Ví dụ trong một trang web bạn có wordpress, trong khi mặt khác bạn có thể có MODx và những người hiểu biết có thể phpBB ngày thứ ba. Tất cả những khác nhau htaccess chỉ thị. Cần phải đi trong file cấu hình nginx (s).

Nginx có một hạn chế lớn trong quy tắc viết lại trong mà bạn không thể áp đặt nhiều điều kiện cho một quy tắc viết lại. Apache HTTPD trên mặt khác cung cấp một giải pháp tốt sử dụng nhiều chỉ thị RewriteCond.

Nginx mặt khác cho phép nếu tuyên bố. Bạn có thể có quy tắc viết lại trong khi khối. Tuy nhiên, nếu khối mình còn hạn chế. Bạn không có và hoặc hoặc để thêm nhiều điều kiện để một đơn nếu khối. Ngoài ra, bạn không thể làm tổ nếu khối. Không có tuyên bố nào khác cả. Tuy nhiên bạn có thể sử dụng biểu thức thông thường để sau đây là có thể:

if ($ REQUEST_METHOD ~ ^ (GET |! HEAD) $) {
trả lại 501;
}
Tuy nhiên bạn không thể kiểm tra hai biến số tại một thời điểm. Đặc biệt trong kịch bản lưu trữ ảo hạn chế như vậy thường có thể được coi là showstoppers. Tuy nhiên tôi thấy rằng với ít suy nghĩ thêm bạn có thể đến với các giải pháp sáng tạo để phục vụ nhu cầu đặc biệt của bạn. . Ví dụ rất phổ biến một quy tắc htaccess cho nhiều PHP phần mềm dựa trên web bao gồm wordpress là:

RewriteEngine On
RewriteBase /
RewriteCond% {REQUEST_FILENAME}!-F
RewriteCond% {REQUEST_FILENAME}-d!
RewriteRule. / Index.php [L] Nó nói rằng nếu tên tập tin yêu cầu không phải là hiện tại và cũng không phải là một thư mục sau đó gọi index.php thay thế.

Tuy nhiên trong khi các RewriteCond là như nhau cho hầu hết các PHP phần mềm dựa trên các RewriteRule không phải là. Ví dụ như một phần của quy tắc viết lại cho phpBB là:

RewriteCond% {REQUEST_FILENAME}!-F
RewriteCond% {REQUEST_FILENAME}-d!
RewriteCond% {REQUEST_FILENAME}-l!
RewriteRule ^ [a-z0-9_-] (p ([0-9] +) \. Html)? $ / Viewforum.php? Bắt đầu + / = $ 2 [QSA, L, NC] Bỏ qua RewriteCond thứ ba cho bây giờ. Nó cũng kiểm tra cho các liên kết tượng trưng. Như bạn có thể thấy các quy tắc viết lại là khác nhau. Giả sử bạn cần phải lưu trữ cả WordPress và các trang web phpBB trên một địa chỉ IP (máy chủ duy nhất). Là hai quy tắc đầu tiên là phổ biến bạn có thể làm viết các quy tắc sau đây sẽ áp dụng cho cả máy chủ:

# Nếu đó là một tập tin, thư mục hoặc liên kết tượng trưng
if (-e $ REQUEST_FILENAME) {
phá vỡ;
}
Điều này làm điều tương tự như các RewriteCond trước không và được áp dụng cho tất cả các trang web trên máy chủ (giả sử bạn đặt nó trong máy chủ).

Bây giờ bạn có thể viết lại quy tắc riêng cho máy chủ cá nhân của bạn. Ví dụ, bạn có thể sử dụng quy tắc này cho blog WordPress của bạn:

# Viết lại quy tắc cho blog.example.com
if ($ host ~ * ^ blog của \ ví dụ. \. com $) {
viết lại ^ $ / index.php q = $ 1 mới (*.)?;
phá vỡ;
}
Các nghỉ là để đảm bảo rằng không có quy tắc khác được xử lý sau khi tất cả các báo cáo trước đó trong khi điều kiện đã được thực hiện.
Làm thế nào để ngăn ngừa các file bắt đầu với. (Như. Htaccess) từ đang được xem trong Nginx?

Thêm này trong khối máy chủ của bạn ở gần đầu:

vị trí ~ / \. {
từ chối tất cả;
}
Điều này sẽ loại bỏ tất cả các yêu cầu bên ngoài cho các tập tin có tên bắt đầu bằng . (dấu chấm).

Url www Làm thế nào để lại trực tiếp là các biến thể không www?

Ví dụ ở đây là làm thế nào bạn có thể lại trực tiếp tất cả các yêu cầu như http://www.example.com/yourpage để http://example.com/yourpage:

if ($ host ~ * ^ www \. (. *)) {
đặt $ host_without_www $ 1;
(. *) viết lại ^ $ http:// $ host_without_www $ 1 vĩnh viễn; # $ 1 chứa ‘/ yourpage’, không ‘www.example.net / yourpage’
}
Lưu ý: Ví dụ này là từ trang web của họ

Làm thế nào để chuyển đổi Apache HTTPD quy tắc viết lại quy tắc viết lại Nginx?

Tôi đã thảo luận một số sắc thái trên và trong các bài viết. Đầu lớn nhất tôi có thể cho là trong Apache HTTPD các biểu hiện thường xuyên trong RewriteRule là phù hợp với các yêu cầu URI không có / ngay từ đầu, trong khi trong Nginx nó phù hợp với một uri yêu cầu với một dấu gạch chéo ngay từ đầu. Vì vậy, ví dụ như một Apache HTTPD viết lại quy tắc như thế này:

RewriteRule ^ [a-z0-9_-] *-f ([0-9] +) /? (P ([0-9] +) \. Html)? $ / Viewforum.php? F = $ 1 & start = $ 3 [QSA, L, NC] trở thành này trong nginx:

viết lại ^ / [a-z0-9_-] *-f ([0-9] +) /? (p ([0-9] +) \. html)? $ / viewforum.php? f = $ 1 & start = $ 3 vừa qua;
Đơn giản, phải không?

Lưu ý: Các nhu cầu của RewriteCond được thực hiện sử dụng nếu chỉ như giải thích ở trên.

Làm thế nào để ngăn chặn đăng nhập hình ảnh / tập tin tĩnh?
Làm thế nào để xác định một thời hạn sử dụng cho hình ảnh / tập tin tĩnh?

# Phục vụ các tập tin tĩnh trực tiếp
vị trí ~ * ^ + (jpg | jpeg | gif | css | png | js | ico | html).. $ {
access_log ra;
hết hạn 30d;
}

 

Rate this post