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:
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