Cài đặt nginx và PHP-FPM
Hiện nay nginx (Engine X) là một web server mã nguồn mở đang khá được ưa chuộng trong cộng đồng các nhà phát triển web. Lúc trước mình vẫn thường dùng Apache, còn nginx sử dụng làm proxy.
Các dự án sau này mình đã chuyển sang hẳn dùng nginx vì mình muốn đồng bộ sử dụng 1 loại web server cũng phần mình thấy nginx chạy hiệu suất ổn định và việc cấu hình cũng như sử các plugin dễ dàng hơn.
Bài này mình sẽ hướng dẫn các bạn cài đặt nginx và chạy mã PHP trên môi trường CentOS 6
Thiết lập và cài đặt nginx
Mặc định trên Centos6 không có sẵn gõi nginx nên chúng ta sẽ cài đặt thông qua repository.
Thiết lập repository
Chúng ta tạo file /etc/yum.repos.d/nginx.repo
với nội dung
[nginx]
name=nginx
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=1
Cài đặt nginx
Bây giờ chúng ta có thể cài đặt dịch vụ nginx
yum install nginx
Khởi động dịch vụ nginx
service nginx start
Tiếp theo, chúng ta cần tạo 2 thư mục sites-available và sites-enabled.
sites-available: Thư mục chứa file cấu hình các vhost của server
sites-enabled: Thư mục chứa các symlink từ thư mục sites-available
mkdir -p /etc/nginx/sites-{enabled,available}
Sau đó, bạn mở file /etc/nginx/nginx.conf
, thêm 1 dòng include trong thân của http.
worker_processes 1;
error_log /Library/Logs/nginx/error.log;
events {
worker_connections 1024;
}
http {
...
include /usr/local/etc/nginx/sites-enabled/*.conf;
}
Làm việc này rất có lợi khi bạn muốn enable hoặc disable một site nào đó ở server thì chúng ta chỉ cần link hoặc unlink file cấu hình đó là xong
Cấu hình nginx
Mình sẽ bắt đầu tạo 1 file host vói tên là minhtringuyen.info.conf để cấu hình cho domain minhtringuyen.info
server {
listen 80;
server_name minhtringuyen.info;
root /var/www/minhtringuyen.info;
access_log /var/log/nginx/minhtringuyen.info.access.log;
error_log /var/log/nginx/minhtringuyen.info.error.log;
location / {
index index.html index.htm;
}
}
Tạo symlink từ thư mục sites-avaiable sang sites-enabled
ln -s /etc/nginx/sites-available/minhtringuyen.info.conf /etc/nginx/sites-enabled/minhtringuyen.info.conf
Vậy là xong phần cấu hình và cài đặt cho phần nginx
Cấu hình để xử lý PHP
Vì nginx không thể tự xử lý được các file PHP (như Apache có sẵn mod_php) nên chúng ta cần đến php-fpm
để hỗ trợ xử lý các tác vụ này.
Cài đặt php-fpm
yum install php-fpm
Về cơ bản nginx sẽ forward các request đến php-fpm và nhận kết quả. Ở đây chúng ta có 2 cách để thực hiện
Chạy thông qua port:
- Cấu hình nhanh gọn, đơn giản nhưng không được khuyến nghị chạy cho production
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Chạy thông qua socket:
- Cấu hình phức tạp hơn nhưng bảo đảm hiệu năng khi chạy trên môi trường production
vim /etc/php-fpm.conf
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;
[global]
...
pid = /var/run/php-fpm/php-fpm.pid
...
error_log = /var/log/php-fpm/error.log
...
log_level = warning
...
daemonize = yes
...
include=/etc/php-fpm.d/*.conf
Mở file /etc/php-fpm.d/www.conf
và thay đổi lại các dòng sau:
[www]
...
listen = /var/run/php5-fpm.sock
...
listen.owner = nginx
listen.group = nginx
Khi php-fpm
được khởi động thì file socket php5-fpm.sock
sẽ được tạo ra. Vì vậy chúng ta cần thay đổi quyền của file này sang owner và group nginx lúc đó nginx mới có thể giao tiếp được với file socket này.
Ở file cầu hình nginx chúng ta sẽ thay đổi fastcgi_pass
tới file socket chạy php:
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Cuối cùng chúng ta cần reload 2 dịch vụ này lại là quá trình cài đặt đã hoàn tất
sudo service nginx reload
sudo service php-fpm reload