.htaccess RewriteCond cho REMOTE_ADDR trong khi đứng sau Load Balancer?


9

Tôi có một máy chủ web đằng sau một bộ cân bằng tải.

Tôi cần thêm một chuyển hướng có điều kiện vào .htaccess của mình để hiển thị trang bảo trì bất cứ khi nào chúng tôi đưa trang web ngoại tuyến để bảo trì. Phần này rất đơn giản:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]

Tuy nhiên, tôi muốn thêm vào một điều kiện là nếu địa chỉ IP của khách truy cập là của riêng tôi, nó sẽ không chuyển hướng tôi đến trang bảo trì và tôi sẽ có thể xem và kiểm tra trang web như thể nó đang trực tuyến. Phần này thường cũng đơn giản:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]

Tuy nhiên, vì máy chủ web của tôi đứng sau bộ cân bằng tải, REMOTE_ADDRđược phân giải thành địa chỉ IP bên trong của máy chủ Cân bằng tải.

Làm cách nào để thay đổi địa chỉ này để tìm địa chỉ IP được chuyển tiếp? Tôi biết trong PHP bạn có thể sử dụng $_SERVER['HTTP_X_FORWARDED_FOR']để lấy địa chỉ IP được chuyển tiếp. Tôi đã thử một vài điều trong .htaccessnhưng không có may mắn:

%{X_FORWARDED_FOR}
%{HTTP:X_FORWARDED_FOR}
%{HTTP_X_FORWARDED_FOR}

GIẢI PHÁP

Tôi đã làm việc sau đây:

%{HTTP:X-FORWARDED-FOR}

% {HTTP: X-Forwarded-For} là chính xác. Là trường hợp nhạy cảm?
Jeff Strunk

Tất cả các mũ làm việc cho tôi. Tôi đoán nó không phải là trường hợp nhạy cảm hoặc nếu không nó là bí danh hoặc một cái gì đó.
Jake Wilson

Bạn có thực sự phục vụ .jpehoặc .jptập tin?
7heo.tk

Câu trả lời:


10

Sử dụng %{HTTP:X-FORWARDED-FOR}thay vì%{REMOTE_ADDR}


Tôi biết bạn đã trả lời nó trong câu hỏi của bạn, nhưng bạn không có câu trả lời nào phù hợp. Cảm ơn bạn vì câu trả lời! Cứu tôi hôm nay.
Ryan

2

Bạn cần mod_rpaf . Mô-đun này sẽ viết lại REMOTE_ADDR trong apache với một tiêu đề khác, chẳng hạn như x-Forwarded-for. Rất hữu ích để làm cho các ứng dụng PHP hoạt động với các bộ cân bằng tải.



0

Nếu bạn có hai môi trường, giả sử một sản xuất đằng sau cân bằng tải và phát triển hoặc dàn không nằm sau cân bằng tải và bạn muốn sử dụng cùng một tệp .htaccess, bạn sẽ cần cả% {HTTP: X-FORWARDED-FOR} và % {REMOTE_ADDR} - gán địa chỉ IP cho cả hai điều kiện.


1
Ngoài ra, trên một số máy chủ apache, dấu gạch chéo ngược sẽ gây nhầm lẫn cho máy chủ. Đơn giản chỉ cần đặt! ^ 123.123.123.123 (không có dấu gạch chéo ngược, nghĩa là nếu không phải IP 123.123.123.123) nếu bạn không thể lặp lại với dấu gạch chéo ngược để làm việc.
Andrew S
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.