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