Với sự bủng nổ và số lượng người dùng NGINX không ngừng tăng thì hiện nay NGINX ngày càng trở nên phổ biến rộng rãi không kém phần Apache, do đó nếu bây giờ bạn sử dụng NGINX thì cũng không khó để tìm các bài hướng dẫn cấu hình chi tiết.
Ở bài này, mình sẽ hướng dẫn qua cho bạn cách cài đặt NGINX để làm Webserver và các cấu hình cần thiết. Hãy nên nhớ, serie này mình sẽ hướng dẫn sử dụng NGINX làm Webserver chứ không phải Proxy Server để kết hợp với Apache nên mong bạn đừng lẫn lộn.
I. Tại sao NGINX lại nhanh hơn Apache?
Hầu hết các Webserver hiện nay đều xử lý các truy vấn từ máy khách đến máy chủ bằng các thread (bạn cứ hiểu thread là một cỗ máy giúp nó xử lý truy vấn), và mỗi truy vấn khách sẽ được server xử lý bằng một thread riêng biệt cho đến khi nó hoàn thành nhiệm vụ. Do đó, ổ cứng trên server sẽ mất nhiều thời gian hơn để giải phóng các thread đã hoàn thành nhiệm vụ, và việc tạo ra nhiều thread cũng sẽ làm server tiêu hao rất nhiều tài nguyên (CPU, RAM).
NGINX sinh ra là để khắc phục nhược điểm đó, nó không phụ thuộc vào số lượng thread trên server mà bạn sẽ có quyền phân chia tổng số thread trên server ra số lượng worker processes tùy thích và các worker processes này sẽ lặp lại quá trình trong mỗi truy vấn gửi tới server mà không cần máy chủ tạo ra thread riêng.
Các worker cũng không thể tốn nhiều tài nguyên để xử lý và nó cũng không tự chặn lẫn nhau như Apache để giải phóng bộ nhớ vì nó sử dụng kỹ thuật Tải không đồng bộ (Asynchronous). Nghĩa là nó sẽ được xử lý luân phiên nhau theo một chu kỳ.
Còn rất nhiều nữa nhưng có thể trong bài này mình không thể nhắc qua hết mà mình chỉ cần bạn biết tại sao NGINX lại mạnh hơn Apache mà thôi.
Xem thêm: How is NGINX different from Apache.
II. Nạp package cần thiết
Đầu tiên bạn hãy nhớ rằng, serie này mình viết dành cho hệ điều hành CentOS 6.5 trở lên nên bạn cần có một VPS sử dụng CentOS 6.5 và chưa cài bất cứ cái gì vào.
Do cả NGINX và PHP-FPM đều không có sẵn trong gói Yum mặc định của CentOS nên chúng ta phải nạp một package từ bên ngoài vào.
Với package này bạn sẽ cài được NGINX 1.6.2 và PHP/PHP-FPM mới nhất.
Bạn chạy lần lượt 2 lệnh sau:
# CentOS 32-Bit
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# CentOS 64-Bit
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
Sau đó tạo 1 file tên là nginx.repo trong thư mục /etc/yum.repos.d/ rồi copy đoạn dưới đây vào:
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Nếu bạn muốn dùng NGINX bản mới nhất thì dùng đoạn dưới:
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
III. Cài đặt NGINX và PHP-FPM
Trước khi cài đặt, hãy tiến hành tắt SELinux đi bằng cách mở file /etc/sysconfig/selinux và tìm SELINUX=
rồi sửa thành như dưới đây:
SELINUX=disabled
Sửa xong, hãy gõ lệnh reboot
để khởi động lại máy chủ và đăng nhập vào lại SSH.
Sau đó là cài NGINX và PHP cùng các module cần thiết:
yum –enablerepo=remi,remi-php56 install nginx php-fpm php-mysql php-common php-mbstring php-mcrypt php-gd
Lưu ý thêm là nếu sau này bạn cần cài thêm công cụ gì thì tốt nhất nên chạy lệnh yum là yum --enablerepo=remi,remi-php56
để được cài nhiều chức năng hơn, phiên bản mới hơn và tương thích với PHP 5.6
Một số tên ứng dụng có thể bạn muốn cài đặt
- php-pecl-memcached – Memcached Server
- php-pecl-memcache – extension chạy Memcached dành cho PHP
- php-opcache – Zend Opcache
- apcu – APC Opcode Cache
Output trả về:
Loaded plugins: fastestmirror Setting up Install Process Loading mirror speeds from cached hostfile epel/metalink | 16 kB 00:00 * base: centos.mirror.iweb.ca * epel: epel.mirrors.ovh.net * extras: centos.mirror.iweb.ca * remi: rpms.famillecollet.com * remi-php56: rpms.famillecollet.com * updates: centos.mirror.iweb.ca base | 3.7 kB 00:00 epel | 4.4 kB 00:00 epel/primary_db | 5.3 MB 00:01 extras | 3.3 kB 00:00 extras/primary_db | 28 kB 00:00 nginx | 2.9 kB 00:00 nginx/primary_db | 35 kB 00:00 remi | 2.9 kB 00:00 remi/primary_db | 743 kB 00:00 remi-php56 | 2.9 kB 00:00 remi-php56/primary_db | 168 kB 00:00 updates | 3.4 kB 00:00 updates/primary_db | 149 kB 00:00 Package php-mysql is obsoleted by php-mysqlnd, trying to install php-mysqlnd-5.6 .2-1.el6.remi.i686 instead Resolving Dependencies --> Running transaction check ---> Package nginx.i386 0:1.6.2-1.el6.ngx will be installed ---> Package php-common.i686 0:5.6.2-1.el6.remi will be installed --> Processing Dependency: php-pecl-zip(x86-32) for package: php-common-5.6.2-1. el6.remi.i686 --> Processing Dependency: php-pecl-jsonc(x86-32) for package: php-common-5.6.2- 1.el6.remi.i686 ---> Package php-fpm.i686 0:5.6.2-1.el6.remi will be installed ---> Package php-gd.i686 0:5.6.2-1.el6.remi will be installed --> Processing Dependency: gd-last(x86-32) >= 2.1.0-3 for package: php-gd-5.6.2- 1.el6.remi.i686 --> Processing Dependency: libvpx.so.1 for package: php-gd-5.6.2-1.el6.remi.i686 --> Processing Dependency: libt1.so.5 for package: php-gd-5.6.2-1.el6.remi.i686 --> Processing Dependency: libpng12.so.0 for package: php-gd-5.6.2-1.el6.remi.i6 86 --> Processing Dependency: libjpeg.so.62 for package: php-gd-5.6.2-1.el6.remi.i6 86 --> Processing Dependency: libgd.so.3 for package: php-gd-5.6.2-1.el6.remi.i686 --> Processing Dependency: libfreetype.so.6 for package: php-gd-5.6.2-1.el6.remi .i686 --> Processing Dependency: libXpm.so.4 for package: php-gd-5.6.2-1.el6.remi.i686 --> Processing Dependency: libX11.so.6 for package: php-gd-5.6.2-1.el6.remi.i686 ---> Package php-mbstring.i686 0:5.6.2-1.el6.remi will be installed ---> Package php-mcrypt.i686 0:5.6.2-1.el6.remi will be installed --> Processing Dependency: libmcrypt.so.4 for package: php-mcrypt-5.6.2-1.el6.re mi.i686 --> Processing Dependency: libltdl.so.7 for package: php-mcrypt-5.6.2-1.el6.remi .i686 ---> Package php-mysqlnd.i686 0:5.6.2-1.el6.remi will be installed --> Processing Dependency: php-pdo(x86-32) = 5.6.2-1.el6.remi for package: php-m ysqlnd-5.6.2-1.el6.remi.i686 --> Running transaction check ---> Package freetype.i686 0:2.3.11-14.el6_3.1 will be installed ---> Package gd-last.i686 0:2.1.0-3.el6.remi will be installed --> Processing Dependency: libtiff.so.3 for package: gd-last-2.1.0-3.el6.remi.i6 86 --> Processing Dependency: libfontconfig.so.1 for package: gd-last-2.1.0-3.el6.r emi.i686 ---> Package libX11.i686 0:1.6.0-2.2.el6 will be installed --> Processing Dependency: libX11-common = 1.6.0-2.2.el6 for package: libX11-1.6 .0-2.2.el6.i686 --> Processing Dependency: libxcb.so.1 for package: libX11-1.6.0-2.2.el6.i686 ---> Package libXpm.i686 0:3.5.10-2.el6 will be installed ---> Package libjpeg-turbo.i686 0:1.2.1-3.el6_5 will be installed ---> Package libmcrypt.i686 0:2.5.8-9.el6 will be installed ---> Package libpng.i686 2:1.2.49-1.el6_2 will be installed ---> Package libtool-ltdl.i686 0:2.2.6-15.5.el6 will be installed ---> Package libvpx.i686 0:1.3.0-5.el6_5 will be installed ---> Package php-pdo.i686 0:5.6.2-1.el6.remi will be installed ---> Package php-pecl-jsonc.i686 0:1.3.6-1.el6.remi.5.6.1 will be installed --> Processing Dependency: /usr/bin/pecl for package: php-pecl-jsonc-1.3.6-1.el6 .remi.5.6.1.i686 --> Processing Dependency: /usr/bin/pecl for package: php-pecl-jsonc-1.3.6-1.el6 .remi.5.6.1.i686 ---> Package php-pecl-zip.i686 0:1.12.4-2.el6.remi.5.6 will be installed ---> Package t1lib.i686 0:5.1.2-6.el6_2.1 will be installed --> Running transaction check ---> Package fontconfig.i686 0:2.8.0-5.el6 will be installed ---> Package libX11-common.noarch 0:1.6.0-2.2.el6 will be installed ---> Package libtiff.i686 0:3.9.4-10.el6_5 will be installed ---> Package libxcb.i686 0:1.9.1-2.el6 will be installed --> Processing Dependency: libXau.so.6 for package: libxcb-1.9.1-2.el6.i686 ---> Package php-pear.noarch 1:1.9.5-3.el6.remi will be installed --> Processing Dependency: php-xml for package: 1:php-pear-1.9.5-3.el6.remi.noar ch --> Processing Dependency: php-posix for package: 1:php-pear-1.9.5-3.el6.remi.no arch --> Processing Dependency: php-cli for package: 1:php-pear-1.9.5-3.el6.remi.noar ch --> Running transaction check ---> Package libXau.i686 0:1.0.6-4.el6 will be installed ---> Package php-cli.i686 0:5.6.2-1.el6.remi will be installed ---> Package php-process.i686 0:5.6.2-1.el6.remi will be installed ---> Package php-xml.i686 0:5.6.2-1.el6.remi will be installed --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.24) for package: php-xml-5.6 .2-1.el6.remi.i686 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.22) for package: php-xml-5.6 .2-1.el6.remi.i686 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.18) for package: php-xml-5.6 .2-1.el6.remi.i686 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.13) for package: php-xml-5.6 .2-1.el6.remi.i686 --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.11) for package: php-xml-5.6 .2-1.el6.remi.i686 --> Processing Dependency: libxslt.so.1 for package: php-xml-5.6.2-1.el6.remi.i6 86 --> Processing Dependency: libexslt.so.0 for package: php-xml-5.6.2-1.el6.remi.i 686 --> Running transaction check ---> Package libxslt.i686 0:1.1.26-2.el6_3.1 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: nginx i386 1.6.2-1.el6.ngx nginx 343 k php-common i686 5.6.2-1.el6.remi remi-php56 1.0 M php-fpm i686 5.6.2-1.el6.remi remi-php56 1.3 M php-gd i686 5.6.2-1.el6.remi remi-php56 69 k php-mbstring i686 5.6.2-1.el6.remi remi-php56 955 k php-mcrypt i686 5.6.2-1.el6.remi remi-php56 41 k php-mysqlnd i686 5.6.2-1.el6.remi remi-php56 3.7 M Installing for dependencies: fontconfig i686 2.8.0-5.el6 base 186 k freetype i686 2.3.11-14.el6_3.1 base 363 k gd-last i686 2.1.0-3.el6.remi remi 134 k libX11 i686 1.6.0-2.2.el6 base 591 k libX11-common noarch 1.6.0-2.2.el6 base 192 k libXau i686 1.0.6-4.el6 base 24 k libXpm i686 3.5.10-2.el6 base 50 k libjpeg-turbo i686 1.2.1-3.el6_5 base 177 k libmcrypt i686 2.5.8-9.el6 epel 94 k libpng i686 2:1.2.49-1.el6_2 base 184 k libtiff i686 3.9.4-10.el6_5 base 339 k libtool-ltdl i686 2.2.6-15.5.el6 base 45 k libvpx i686 1.3.0-5.el6_5 base 490 k libxcb i686 1.9.1-2.el6 base 115 k libxslt i686 1.1.26-2.el6_3.1 base 451 k php-cli i686 5.6.2-1.el6.remi remi-php56 3.8 M php-pdo i686 5.6.2-1.el6.remi remi-php56 108 k php-pear noarch 1:1.9.5-3.el6.remi remi 375 k php-pecl-jsonc i686 1.3.6-1.el6.remi.5.6.1 remi-php56 48 k php-pecl-zip i686 1.12.4-2.el6.remi.5.6 remi-php56 273 k php-process i686 5.6.2-1.el6.remi remi-php56 54 k php-xml i686 5.6.2-1.el6.remi remi-php56 201 k t1lib i686 5.1.2-6.el6_2.1 base 152 k Transaction Summary ================================================================================ Install 30 Package(s) Total download size: 16 M Installed size: 46 M Is this ok : y^: y Downloading Packages: (1/30): fontconfig-2.8.0-5.el6.i686.rpm | 186 kB 00:00 (2/30): freetype-2.3.11-14.el6_3.1.i686.rpm | 363 kB 00:00 (3/30): gd-last-2.1.0-3.el6.remi.i686.rpm | 134 kB 00:00 (4/30): libX11-1.6.0-2.2.el6.i686.rpm | 591 kB 00:00 (5/30): libX11-common-1.6.0-2.2.el6.noarch.rpm | 192 kB 00:00 (6/30): libXau-1.0.6-4.el6.i686.rpm | 24 kB 00:00 (7/30): libXpm-3.5.10-2.el6.i686.rpm | 50 kB 00:00 (8/30): libjpeg-turbo-1.2.1-3.el6_5.i686.rpm | 177 kB 00:00 (9/30): libmcrypt-2.5.8-9.el6.i686.rpm | 94 kB 00:00 (10/30): libpng-1.2.49-1.el6_2.i686.rpm | 184 kB 00:00 (11/30): libtiff-3.9.4-10.el6_5.i686.rpm | 339 kB 00:00 (12/30): libtool-ltdl-2.2.6-15.5.el6.i686.rpm | 45 kB 00:00 (13/30): libvpx-1.3.0-5.el6_5.i686.rpm | 490 kB 00:00 (14/30): libxcb-1.9.1-2.el6.i686.rpm | 115 kB 00:00 (15/30): libxslt-1.1.26-2.el6_3.1.i686.rpm | 451 kB 00:00 (16/30): nginx-1.6.2-1.el6.ngx.i386.rpm | 343 kB 00:00 (17/30): php-cli-5.6.2-1.el6.remi.i686.rpm | 3.8 MB 00:01 (18/30): php-common-5.6.2-1.el6.remi.i686.rpm | 1.0 MB 00:00 (19/30): php-fpm-5.6.2-1.el6.remi.i686.rpm | 1.3 MB 00:00 (20/30): php-gd-5.6.2-1.el6.remi.i686.rpm | 69 kB 00:00 (21/30): php-mbstring-5.6.2-1.el6.rem (63%) 16% 0 (21/30): php-mbstring-5.6.2-1.el6.remi.i686.rpm | 955 kB 00:00 (22/30): php-mcrypt-5.6.2-1.el6.remi.i686.rpm | 41 kB 00:00 (23/30): php-mysqlnd-5.6.2-1.el6.remi.i686.rpm | 3.7 MB 00:01 (24/30): php-pdo-5.6.2-1.el6.remi.i686.rpm | 108 kB 00:00 (25/30): php-pear-1.9.5-3.el6.remi.noarch.rpm | 375 kB 00:00 (26/30): php-pecl-jsonc-1.3.6-1.el6.remi.5.6.1.i686.rpm | 48 kB 00:00 (27/30): php-pecl-zip-1.12.4-2.el6.remi.5.6.i686.rpm | 273 kB 00:00 (28/30): php-process-5.6.2-1.el6.remi.i686.rpm | 54 kB 00:00 (29/30): php-xml-5.6.2-1.el6.remi.i686.rpm | 201 kB 00:00 (30/30): t1lib-5.1.2-6.el6_2.1.i686.rpm | 152 kB 00:00 -------------------------------------------------------------------------------- Total 925 kB/s | 16 MB 00:17 warning: rpmts_HdrFromFdno: Header V3 DSA/SHA1 Signature, key ID 00f97f56: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi Importing GPG key 0x00F97F56: Userid : Remi Collet Package: remi-release-6.5-1.el6.remi.noarch (installed) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi Is this ok : y warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 Importing GPG key 0x0608B895: Userid : EPEL (6) Package: epel-release-6-8.noarch (installed) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 Is this ok : y Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Warning: RPMDB altered outside of yum. Installing : libjpeg-turbo-1.2.1-3.el6_5.i686 service nginx start service php-fpm start chkconfig php-fpm on chkconfig nginx on Output trả về:# service nginx start Starting nginx: # service php-fpm start Starting php-fpm: # chkconfig php-fpm on # chkconfig nginx onKiểm tra phiên bản NGINX và PHP-FPM:
nginx -v
php-fpm -v# php-fpm -v PHP 5.6.1 (fpm-fcgi) (built: Oct 3 2014 07:29:26) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies # nginx -v nginx version: nginx/1.6.2
Bây giờ bạn hãy truy cập vào địa chỉ là http://ip-của-vps rồi xem nó đã hiện trang Welcome của NGINX chưa nhé. Nếu hiện như ở dưới thì thành công:
IV. Thiết lập lại user và group chạy PHP
Mặc định PHP-FPM sẽ chỉ định user tên là apache và group tên apache để chạy nó, nhưng ở đây chúng ta không sử dụng Apache mà là NGINX nên bạn cần mở file /etc/php-fpm.d/www.conf lên và tìm:
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apacheThay thành
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginxLưu lại và khởi động lại PHP-FPM
service php-fpm restart
Nếu bạn cần cách thiết lập từng user riêng theo domain thì mình đã hướng dẫn ở phần 7.
Tạm thời bài này chúng ta kết thúc ở đây, ở bài tiếp theo chúng ta sẽ đi vào bước tạo Virtual Host - hay còn gọi là thêm domain vào VPS đó.
Xem tiếp bài trong serie
Phần kế tiếp: LEMP cho VPS [Phần 2] – Thêm VirtualHost (thêm domain) cho NGINX