Cách Cấu Hình Apache làm Reverse Proxy với mod_proxy

Apache làm Reverse Proxy

Apache là một ứng dụng web server có khả năng phục vụ nội dung web động hoặc đóng vai trò như một reverse proxy — chuyển tiếp các yêu cầu từ client đến các ứng dụng chạy phía sau. Bài viết này giải thích cách cấu hình Apache làm reverse proxy với mod_proxy.

Hướng dẫn dưới đây sử dụng ví dụ về việc proxy một ứng dụng ownCloud chạy trên cổng 8080 trong Docker. Tuy nhiên, bạn có thể áp dụng kỹ thuật tương tự cho bất kỳ ứng dụng nào khác chạy trên cổng khác.

Yêu cầu tiên quyết trước khi cài đặt Apache Reverse Proxy

1. Kích hoạt Apache mod_Proxy

  1. Kích hoạt module mod_proxy trên Apache:

    $ sudo a2enmod proxy
  2. Kích hoạt các module bổ sung:

    $ sudo a2enmod proxy_http
    $ sudo a2enmod proxy_balancer
    $ sudo a2enmod proxy_wstunnel

    Giải thích chức năng từng module:

    • mod_proxy: Triển khai tính năng proxy trên máy chủ Apache.
    • proxy_http: Xử lý các yêu cầu proxy HTTP và HTTPS.
    • proxy_balancer: Kích hoạt tính năng cân bằng tải (load balancing).
    • proxy_wstunnel: Tạo đường hầm (tunnel) cho kết nối WebSocket đến máy chủ phía sau.
  3. Khởi động lại Apache để áp dụng các module vừa kích hoạt:

    $ sudo systemctl restart apache2

2. Thiết lập ứng dụng chạy phía sau (Back-end Application)

Ví dụ này sẽ thiết lập một container ownCloud lắng nghe trên cổng 8080 trong Docker.

  1. Tạo container ownCloud:

    $ docker run -d --name owncloud -p 8080:8080 owncloud/server
  2. Khởi động ownCloud:

    $ docker start owncloud
  3. Kiểm tra ownCloud đang chạy:

    $ docker ps

    Output:

    CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                       NAMES
     3eaea7b55cfe   owncloud/server   "/usr/bin/entrypoint…"   36 seconds ago   Up 35 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   owncloud

Reverse Proxy

3. Cấu hình Apache làm Reverse Proxy

Sao lưu file cấu hình virtual host mặc định của Apache:

$ sudo mv /etc/apache2/sites-available/000-default.conf  /etc/apache2/sites-available/origdefault.backup

Tạo file cấu hình mới:

$ sudo nano /etc/apache2/sites-available/app.example.com.conf

Thêm nội dung sau vào file (thay app.example.com bằng tên miền của bạn). Nếu bạn đang proxy cho một ứng dụng khác không phải ownCloud, hãy thay 8080 bằng cổng tương ứng của ứng dụng:

<VirtualHost *:80>

   ServerName app.example.com

   ProxyPreserveHost On
   ProxyPass / http://127.0.0.1:8080/
   ProxyPassReverse / http://127.0.0.1:8080/

</VirtualHost>

Lưu và đóng file.

Giải thích các chỉ thị:

ProxyPreserveHost: Chuyển tiếp header host gốc đến ứng dụng phía sau.

ProxyPass: Chỉ định tất cả yêu cầu “/” được chuyển tiếp đến cổng của ứng dụng phía sau.

ProxyPassReverse: Phản chiếu ProxyPass bằng cách điều chỉnh các header phản hồi từ ứng dụng phía sau.

Kích hoạt file cấu hình vừa tạo:

$ sudo ln -s /etc/apache2/sites-available/app.example.com.conf  /etc/apache2/sites-enabled/app.example.com.conf

Kiểm tra cấu hình Apache:

$ sudo apachectl configtest

Khởi động lại Apache để áp dụng thay đổi:

$ sudo service apache2 restart

4. Bảo mật máy chủ | Apache Reverse Proxy

  1. Cấu hình firewall cho phép lưu lượng HTTP trên cổng 80:

    $ sudo ufw allow 80/tcp
  2. Cho phép HTTPS trên cổng 443:

    $ sudo ufw allow 443/tcp
  3. Khởi động lại firewall:

    $ sudo ufw reload

5. Thiết lập SSL

  1. Cài đặt Certbot:

    $ sudo apt install certbot python3-certbot-apache
  2. Yêu cầu chứng chỉ SSL miễn phí từ Let’s Encrypt:

    $ sudo certbot -d app.example.com
  3. Kiểm tra tính năng tự động gia hạn:

    $ sudo certbot renew --dry-run

6. Kiểm tra

Mở trình duyệt web và truy cập vào subdomain của bạn:

https://app.example.com

Trang đăng nhập ownCloud sẽ hiển thị. Đăng nhập bằng tài khoản admin và mật khẩu admin để bắt đầu sử dụng ứng dụng.

Thông tin thêm

Bạn đã cấu hình Apache làm reverse proxy và thiết lập ownCloud làm ứng dụng phía sau. Để tìm hiểu thêm, hãy tham khảo các tài nguyên dưới đây:

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *