Hướng dẫn cài đặt Nginx làm proxy cho Apache trên Ubuntu 14
Apache và Nginx là hai máy chủ web mã nguồn mở phổ biến thường được sử dụng với PHP.
- Apache tốt hơn Nginx trong việc phục vụ các trang web động.
- Nhưng Nginx lại tốt hơn Apache trong việc phục vụ các trang web tĩnh.
Cả Apache và Nginx đều có những ưu và nhược điểm khác nhau, tùy vào nhu cầu sử dụng mà ta có thể lựa chọn web server nào cho phù hợp. Tuy nhiên, ta hoàn toàn có thể tận dụng thế mạnh của cả Apache và Nginx bằng cách kết hợp chúng với nhau.
Bài viết sau đây sẽ hướng dẫn các bạn làm cách nào để có thể kết hợn Nginx làm proxy cho Apache. Ở đây, Nginx được sử dụng như 1 reverse proxy của Apache. Đối với nội dung tĩnh là lợi thế của Nginx, các file sẽ được Nginx phục vụ một cách nhanh chóng và trực tiếp cho client. Còn đối với nội dung động là lợi thế của Apache, Nginx sẽ chuyển cho Apache thực hiện sau đó trả kết quả về cho Nginx, rồi Nginx trả kết quả đó lại cho client. Nói 1 cách đơn giản hơn là dùng Nginx để xử lý tập tin tĩnh (CSS, JS, HTML, …) và dùng Apache xử lý các tập tin động (PHP,…)
Bước 1: Cài đặt apache và php-fpm
Đầu tiên chúng ta cần cập nhật kho apt.
# apt-get update -y
Sau đó cài đặt các gói cần thiết.
# apt-get install apache2 libapache2-mod-fastcgi php5-fpm -y
Bước 2: Cấu hình cho apache làm việc với php-fpm
Mở file cấu hình port của apache ra
# nano /etc/apache2/ports.conf
Tìm dòng Listen 80 và thay đổi port thành Listen 8888
Listen 8888
Lưu và thoát ra
Tiếp theo chúng ta sẽ chỉnh sửa các tập tin virtual host mặc định của apache
# nano /etc/apache2/sites-available/000-default.conf
Tìm dòng sau <VirtualHost *:80> và thay bằng <VirtualHost *:8888>
<VirtualHost *:8888>
Lưu và thoát khởi động lại apache
# service apache2 restart
Xác minh rằng Apache đang lắng nghe trên port 8888
# netstat -tunpl
Bước 3: Cấu hình Apache để sử dụng mod_fastcgi
Apache làm việc với mod_phpmặc định, nhưng nó đòi hỏi cấu hình bổ sung để làm việc với PHP5-FPM.
mod_fastcgi bị phụ thuộc vào mod_action. mod-action bị tắt theo mặc định, vì vậy đầu tiên chúng ta cần phải kích hoạt nó.
# a2enmod actions
Chỉnh sửa các tập tin cấu hình fastcgi.conf
# nano /etc/apache2/mods-enabled/fastcgi.conf
Ở đây tôi đang dùng apache 2.4 nêu nội dung sẽ như sau :
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
#FastCgiWrapper /usr/lib/apache2/suexec
FastCgiIpcDir /var/lib/apache2/fastcgi
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Nếu máy các bạn đang dùng apache 2.2 thì bỏ đoạn </Directory> đi nội dung sẽ như sau
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
#FastCgiWrapper /usr/lib/apache2/suexec
FastCgiIpcDir /var/lib/apache2/fastcgi
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
</IfModule>
Lưu và thoát, kiểm tra cấu hình.
# apachectl -t
Nếu kiểm tra đã ok thì restart lại apache
# service apache2 restart
Bước 4: Kiểm tra php
Tạo một file info.php nằm trong thư mục mặc định của apache
# nano /var/www/html/info.php
Có nội dung như sau
<?php phpinfo(); ?>
Bây giờ ta truy cập vào trình duyệt web và nhớ phải thêm port 8888 ta vừa thay vào
http://<địa chỉ ip>:8888/info.php
Bước 5: Cài đặt và cấu hình Nginx
Cài đặt Nginx.
# apt-get install nginx -y
Chuyển file cấu hình default của nginx thành một file dự phòng
# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bk
Ta sẽ tạo một file cấu hình mới
# nano /etc/nginx/sites-available/default
Với nội dung như sau và thay đổi các thông số ip của bạn vào
server {
listen 80 ;
server_name localhost;
location / {
proxy_pass http://<Địa chỉ IP VPS của bạn>:8888;
}
location ~ \.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8888;
}
}
Lưu và thoát.
Tiếp theo chúng ta khởi động lại nginx
# service nginx restart
Kiểm tra lại các port
# netstat -tunpl
Đến đây chúng ta đã thấy nginx và apache chạy song song nhau
Bây giờ chúng ta cũng kiểm tra nginx đã làm proxy chưa, bằng cách gõ lệnh sau
# curl -I localhost # curl -I localhost/info.php
Bây giờ chúng ta sẽ kiểm tra trên trình duyệt và lần này sẽ không phải thêm port 8888
http://<địa chỉ ip>/info.php
Đến đây chúng ta đã hoàn thành bài cài đặt nginx làm proxy cho apache. Chúc các bạn thành công