Nginx là webserver thông dụng thứ hai sau Apache, bạn có thể dễ dàng cài đặt Nginx sử dụng PHP với PHP-FPM và MySQL trên CentOS 5/6/7.

Cài đặt Nginx, PHP-FPM, MySQL trên CentOS 6/7Không giống như Apache, Nginx không có khả năng xử lý PHP như mod_php của Apache. Tuy nhiên, Nginx hỗ trợ các module để giao tiếp với các trình xử lý PHP như FastCGI. Bài viết này sẽ hướng dẫn bạn cài đặt Nginx chạy PHP-FPM sử dụng unix socket và MySQL trên CentOS 6/7.

  1. Cài đặt và cấu hình Nginx
  2. Cài đặt và cấu hình PHP-FPM
  3. Cài đặt và bảo mật MySQL

Chú ý: bài viết dưới đây được hướng dẫn dựa trên CentOS 6, nó cũng hoàn toàn hoạt động trên CentOS 7. Tuy nhiên, đối với một số lệnh như servicechkconfig, bạn nên sử dụng systemctl để thay thế như sau:

  • Đối với CentOS 7, bạn nên sử dụng lệnh systemctl để khởi động Nginx, PHP-FPM và MySQL:
    systemctl start nginx
    systemctl start php-fpm
    systemctl start mysqld

    Thay thế start thành restart hoặc stop để khởi động lại và dừng Nginx, PHP-FPM…

  • Để khởi động Nginx, PHP-FPM và MySQL cùng hệ thống, sử dụng lệnh systemctl thay cho chkconfig như sau:
    systemctl enable nginx
    systemctl enable php-fpm
    systemctl enable mysqld

Cài đặt Nginx mới nhất từ Nginx repository

Nginx không có sẵn trên CentOS nhưng Nginx cung cấp gói cài đặt cho CentOS thông qua repository mở rộng. Để cài đặt Nginx phiên bản mới nhất, bạn cần phải thêm repository này vào CentOS.

  1. Tạo một repository nginx.repo cho Nginx:
    # nano /etc/yum.repos.d/nginx.repo
  2. Đi đến Official Red Hat/CentOS packages và copy đoạn mã dành cho CentOS vào nginx.repo

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1

    Thay thế $releasever với phiên bản CentOS bạn đang dùng (CentOS 5.x là 5, CentOS 6.x là 6, CentOS 7.x là 7)

  3. Bạn có thể cài đặt Nginx ngay bây giờ với lệnh sau:
    # yum install nginx

    Sử dụng lệnh sau để kiểm tra phiên bản Nginx đã cài

    # nginx -v
    nginx version: nginx/1.8.0

Khởi động Nginx bằng lệnh sau:

# service nginx start
Starting nginx:                                            [  OK  ]

Để cho Nginx tự khởi động cùng với hệ thống khi bạn khởi động lại CentOS, sử dụng lệnh sau:

# chkconfig --level 235 nginx on

Vậy là bạn đã cài xong Nginx phiên bản mới nhất trên CentOS. Bây giờ bạn cần phải cấu hình Nginx để chạy PHP thông qua PHP-FPM.

Cấu hình Nginx chạy PHP thông qua PHP-FPM

Để cấu hình Nginx chạy PHP-FPM, bạn cần phải chỉnh sửa virtual host trong file config /etc/nginx/conf.d/default.conf.

# nano /etc/nginx/conf.d/default.conf

Tìm đến đoạn sau và xóa hết dấu # ở trước mỗi dòng để PHP làm việc với Nginx:

# location ~ \.php$ {
#     root           html;
#     fastcgi_pass   127.0.0.1:9000;
#     fastcgi_index  index.php;
#     fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
#     include        fastcgi_params;
# }

Và sửa lại “/scripts” thành “$document_root” như sau:

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

thành

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

“fastcgi_pass   127.0.0.1:9000;” có nghĩa là Nginx sẽ giao tiếp với PHP-FPM thông qua một giao thức TCP ở địa chỉ 127.0.0.1 và port 9000. Bạn nên sử dụng Unix socket để tăng hiệu suất cho các kết nối, kết nối của bạn sẽ nhanh hơn và bảo mật hơn. Để sử dụng Unix socket, bạn cần thay thế 127.0.0.1:9000 thành unix:/var/run/php5-fpm.sock:

fastcgi_pass   unix:/var/run/php5-fpm.sock;

Sau khi hoàn tất việc cấu hình, bạn sẽ có được một file config như sau:

    location ~ \.php$ {
        root           html;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

Tiếp theo bạn cần cài đăt PHP-FPM và cấu hình để xử lý PHP.

Cài đặt PHP-FPM

Đầu tiên, bạn cần phải chọn phiên bản PHP mà bạn muốn cài. Để kiểm tra phiên bản PHP-FPM hiện tại đang có trên CentOS, sử dụng lệnh sau:

# yum info php-fpm
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.sitbv.nl
 * extras: mirror.netrouting.net
 * updates: mirrors.supportex.net
Available Packages
Name        : php-fpm
Arch        : x86_64
Version     : 5.3.3
Release     : 46.el6_6
Size        : 1.1 M
Repo        : updates
Summary     : PHP FastCGI Process Manager
URL         : http://www.php.net/
License     : PHP
Description : PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
            : implementation with some additional features useful for sites of
            : any size, especially busier sites.

Nếu như bạn muốn cài phiên bản PHP 5.4, 5.5, 5.6 hoặc mới hơn, xem hướng dẫn cài đặt PHP mới nhất trên CentOS 6.

Cài đặt PHP-FPM và các module mà bạn cần:

# yum install php-fpm php-cli php-mysqlnd php-gd php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-soap

Để cài đặt APC cho PHP, bạn cần cài thêm gói php-pecl-apc.

Khởi động PHP-FPM:

# service php-fpm start
Starting php-fpm:                                          [  OK  ]

Để cho PHP-FPM tự khởi động cùng với hệ thống khi bạn khởi động lại CentOS, sử dụng lệnh sau:

# chkconfig --levels 235 php-fpm on

Cấu hình PHP-FPM để sử dụng cho Nginx

Nếu như bạn muốn sử dụng Unix socket thay cho TCP để tăng hiệu suất kết nối như ở trên, bạn cần phải cấu hình lại PHP-FPM trong file /etc/php-fpm.d/www.conf.

# nano /etc/php-fpm.d/www.conf

Tìm và thay đổi giá trị của “listen = ” thành giá trị “fastcgi_pass” mà bạn đã cấu hình cho Nginx ở phía trên:

listen = 127.0.0.1:9000

thành

listen = /var/run/php5-fpm.sock

Tìm đến các đoạn sau và thay thế giá trị thành nginx (bỏ dấu “;” ở trước nếu có):

;listen.owner = nobody
;listen.group = nobody

user = apache
group = apache

Sau khi thay đổi các giá trị bạn sẽ được như sau:

listen.owner = nginx
listen.group = nginx

user = nginx
group = nginx

Mình sẽ giải thích việc thay đổi các cấu hình ở trên. Khi PHP-FPM khởi động, file socket /var/run/php5-fpm.sock sẽ được tạo ra dưới quyền (permission) của user và group được chỉ định trong “listen.owner” và “listen.group“. Chỉ có user và group này mới được phép giao tiếp với file socket này. Nếu như bạn muốn Nginx sử dụng PHP-FPM thông qua unix socket, bạn phải set permissions cho file socket này. Đó là lý do tại sao bạn cần phải thay đổi các mục đó.

Nếu bạn không set permissions cho Nginx thì bạn sẽ gặp lỗi “502 Bad Gateway” vì Nginx không được phép giao tiếp với file socket..

An error occurred.

Sorry, the page you are looking for is currently unavailable.
Please try again later.

If you are the system administrator of this resource then you should check the error log for details.

Faithfully yours, nginx.

Vậy là việc cấu hình cho Nginx sử PHP-FPM đã xong, bây giờ bạn cần restart Nginx và PHP-FPM:

# service php-fpm restart
# service nginx restart

Kiểm tra thử Nginx đã chạy được PHP-FPM hay chưa

Để kiểm tra xem bạn đã chạy được Nginx sử dụng PHP-FPM hay chưa, bạn chỉ cần xem thông tin phpinfo của máy chủ.

Tạo một file phpinfo.php trong thư mục root của bạn:

# nano /usr/share/nginx/html/phpinfo.php

Với nội dung như sau:

<?php phpinfo(); ?>

Bây giờ truy cập vào http://ip-server/phpinfo.php và kiểm tra, nếu bạn thấy trong phần “Server API” là FPM/FastCGI thì bạn đã thành công.

Sử dụng FPM/FastCGI cho Nginx
Nginx đang chạy PHP-FPM mà bạn có thể dễ dạng nhận thấy ở mục Server API là FPM/FastCGI.

Nếu bạn gặp lỗi “File not found.” thì có thể là do sai tên file hoặc cấu hình sau thư mục root trong Nginx.

Mở file cấu hình Nginx và sửa lại mục root:

# nano /etc/nginx/conf.d/default.conf
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

Cài đặt và cấu hình để bảo mật cho MySQL

MySQL là một trình quản lý cơ sở dữ liệu phổ biến, bạn có thể dễ dàng cài đặt và sử dụng. Bạn cũng có thể cài đặt MariaDB thay thế cho MySQL trên CentOS để có hiệu suất tốt hơn. Sử dụng lệnh sau để cài MySQL trên CentOS:

# yum install mysql mysql-server

Khởi động MySQL:

# service mysqld start

Để cho MySQL tự khởi động cùng với hệ thống khi bạn khởi động lại CentOS, sử dụng lệnh sau:

# chkconfig --levels 235 mysqld on

Khi khởi động MySQL lần đầu tiên, có thể bạn sẽ nhìn thấy thông điệp sau:

Initializing MySQL database: Installing MySQL system tables…
150917 3:28:42 [Note] /usr/libexec/mysqld (mysqld 5.5.45) starting as process 11970 …
OK
Filling help tables…
150917 3:28:42 [Note] /usr/libexec/mysqld (mysqld 5.5.45) starting as process 11977 …
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password ‘new-password’
/usr/bin/mysqladmin -u root -h production.vn password ‘new-password’

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

Thông báo trên là nhắc nhở bạn tạo mật khẩu cho user root để bảo mật MySQL. Để tạo mật khẩu cho user root và bảo mật MySQL, sử dụng lệnh mysql_secure_installation.

# mysql_secure_installation

Trong dòng “Enter current password for root (enter for none):” nhấn Enter vì bạn chưa thiết lập mật khẩu. Tiếp theo bạn cần đặt mật khẩu cho user root của MySQL.

# mysql_secure_installation




NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y
New password: --> nhập mật khẩu
Re-enter new password: --> nhập lại mật khẩu
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
 ... Success!

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

Vậy là bạn đã hoàn thành việc cài đặt và bảo mật MySQL. Bạn có thể cấu hình để tối ưu hóa và nâng cao bảo mật cho MySQL nếu như điều đó là cần thiết.

Sử dụng Nginx, PHP-FPM và MySQL cho hiệu suất và tăng tốc độ tải cho các trang web có phần lớn là nội dung tĩnh như hình ảnh, video hoặc tài liệu. Nhưng nếu trang web của bạn chủ yếu chạy PHP và các nội dung động, có thể bạn nên tham khảo sử dụng Apache và PHP-FPM để có một hiệu suất tốt hơn.

Cám ơn bạn đã tham khảo, chúc bạn thành công!

Tham gia cuộc thảo luận

1 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 *