banner
 .::*nix::. Làm Reverse Proxy với apache 2 Go to original post Author: nhuhoang - Translator:  - Entry Date: 13/02/2009 16:23:44
Anh mrro cũng đã có lần định viết về vấn đề này nhưng mới thấy /hvaonline/posts/list/100.html, giới thiệu qua về reverse proxy chứ chưa thấy nói về cấu hình. Nay tớ xin mạo muội viết tiếp phần 2, có gì sai sót xin các bạn chỉ giáo.

Cấu hình cơ bản

Đầu tiên, các bạn cần đưa chỉ dẫn "ProxyRequests Off" vào để tránh kẻ khác lợi dụng thành forward proxy. Chúng ta sẽ cấu hình dựa trên một mô hình đơn giản: Server sẽ luân chuyển các request đến các back-and server dựa theo đường dẫn có trong Header của request:





Ví dụ khi một user truy cập đến www.mcslp.com/marketing thì reverse proxy sẽ lấy nội dung của marketing.mcslp.com để cung cấp cho client. Trong phần cấu hình cho reverse proxy ta có chỉ dẫn sau:
Code:


ProxyPass [path] !|url


Cấu hình cho cả 3 back-end server như sau:
Code:


ProxyPass /marketing http://marketing.mcslp.com

ProxyPass /accounts http://finance.mcslp.com
ProxyPass /sales http://sales.mcslp.com


Và như vậy, www.mcslp.com/marketing/admin/index.html sẽ được lấy từ marketing.mcslp.com/admin/index.html . Nếu bạn không muốn reverse proxy luân chuyển các request đến một thư mục con trên back-end server thì bạn có thể dùng dấu chấm than (!) thay cho url. Ví dụ:
Code:


ProxyPass /marketing/account !

ProxyPass /marketing http://marketing.mcslp.com


Sẽ reverse proxy /marketing nhưng request đến /marketing/account không được luân chuyển đến http://marketing.mcslp.com/account


ProxyPassReverse

Chỉ dẫn ProxyPass có một nhược điểm, đó là nó không can thiệp vào header của reponse data nên nếu trong header có các trường như Location, URI hay Content-Location thì client sẽ dễ dàng biết được nguồn gốc thực sự của trang web đó. Ví dụ như bạn có một trang http://marketing.mcslp.com/wwwect.php có nội dung như sau:
Code:


<?

header(“Location: http://marketing.mcslp.com/admin/");
?>


Thì trong header của client ta sẽ thấy trường
Code:


Location: http://marketing.mcslp.com/admin/


Chứ không phải
Code:


Location: http://www.mcslp.com/marketing/admin/


như mong muốn.
Để khắc phục ta thêm vào chỉ dẫn ProxyPassReverse, các tham số giống hệt ProxyPass:
Code:


ProxyPass /marketing http://marketing.mcslp.com

ProxyPassReverse /marketing http://marketing.mcslp.com


Tác dụng của ProxyPassReverse là rewrite lại header của reponse data và với ví dụ trên, giá trị của trường location sẽ thực sự là http://www.mcslp.com/marketing/admin/

Cấu hình hoàn chỉnh:

Đây chỉ là cấu hình mẫu của reverse proxy, các bạn còn phải thiết lập cho back-end server mà tôi không đề cập ở đây (xem thêm về VirtualHost trên trang chủ của apache)
Code:


<VirtualHost *:80>

ServerName mcslp.com
Alias www.mcslp.com
DocumentRoot /var/www/mcslp.com

ProxyRequests Off
ProxyPass /marketing http://marketing.mcslp.com
ProxyPass /accounts http://finance.mcslp.com
ProxyPass /sales http://sales.mcslp.com
ProxyPassReverse /marketing http://marketing.mcslp.com
ProxyPassReverse /accounts http://finance.mcslp.com
ProxyPassReverse /sales http://sales.mcslp.com
</VirtualHost>



Mod Proxy còn rất nhiều tính năng hay, các bạn có thể tham khảo http://httpd.apache.org/docs/2.0/mod/mod_proxy.html
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to top Go to original post  

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|