Tiếp tục Phần IV, bài này sẽ hướng dẫn các bạn cấu hình php 7/php-fpm, nginx trên VPS để chúng làm việc được với nhau và tìm hiểu những thông số, cú pháp cơ bản được dùng khi cấu hình.
Đọc lại các phần trước:
Phần I: Tổng quan và các bước cài đặt NGINX cơ bản.
Phần II: Cấu hình NGINX tạo Virtual Host trên Linux.
Phần III: Cài MariaDB 10 trên CentOS Server.
Các nội dung chính của bài bao gồm.
1. Thêm repository Epel và Remi
Sau khi SSH vào máy chủ, việc đầu tiên cần làm là update thêm repo cho OS.
Epel và Remi là gì ? Đây là hai kho cung cấp các gói cài đặt cho linux uy tín trên thế giới tất cả các chương trình muốn cài đặt trên Linux RHEL/CentOS/Fedora đều có ở đây cả.
Để download và cài repo bạn chạy lệnh:
EPEL Repository
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-7.noarch.rpm #Cài đặt yum install epel-release
REMI Repository
wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm #Cài đặt rpm -Uvh remi-release-7*.rpm epel-release-7*.rpm
Repo đã được add vào hệ thống nhưng vẫn chưa cho phép tải package về bằng cách mở file remi-php70.repo
sửa giá trị thành enabled=1.
vi /etc/yum.repo.d/remi-php70.repo
Kết quả như hình dưới.
2. Cài đặt PHP 7
Chạy lệnh cài đặt.
yum install php php-mysql php-fpm
Tiếp theo cần sửa file php.ini
,nhưng trước tiên cần lưu lại một bản phòng rủi ro.
cp /etc/php.ini /var/www/demo1.thuysys.com/backup/php.ini.bak
Chạy lệnh
vi /etc/php.ini
Tìm đến cgi.fix_pathinfo bỏ dấu ;
và gán cho nó giá trị là 0
.
cgi.fix_pathinfo=0
cgi.fix_pathinfo là gì ? mình cùng tìm hiểu tại sao đặt giá trị là 0
, theo PHP giải thích:
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo
Do liên quan đến bảo mật webserver và performance mình giải thích nôm na như này.
Chúng ta xét một link như sau.
demo1.thuysys.com/info.php/abc/fuck.jpg
Trong đó
REQUEST_URI: là demo1.thuysys.com/info.php/abc/fuck.jpg
đây là đường dẫn người dùng nhập trên address bar của trình duyệt, đoạn abc/fuck.jpg
không tồn tại trên webserver.
SCRIPT_FILENAME: là /var/www/demo1.thuysys.com/public_html/info.php
đường dẫn file info.php
có thực trên webserver.
PATH_INFO: là đoạn /abc/fuck.jpg
.
Như các bạn thấy trên hình, mặc dù request đến file không tồn tại, webserver không hề hiện thống báo lỗi mà vẫn hiển thị kết quả ra trình duyệt và nó lấy file info.php
để hiển thị.
Việc này tạo ra kẽ hở làm tiêu tốn tài nguyên về hiển thị không đúng, mấy bác coder chăc rõ cái này hơn :).
3. Cấu hình PHP-FPM làm việc với NGINX.
Cấu hình php-fpm
Như mọi lần, mình tạo một bảo sao lưu
cp /etc/php-fpm.d/www.conf /var/www/demo1.thuysys.com/backup/www.conf.bak
Mớ file www.conf
vi /etc/php-fpm.d/www.conf
Thay đổi i thông số như bên dưới.
user = nginx group = nginx listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx listen.mode = 0660
Trong đó:
listen: khai báo dùng unix domain thay cho socket domain
listen = 127.0.0.1:9000 #Thành listen = /var/run/php-fpm/php-fpm.sock
listen.owner, listen.group, listen.mode: khai báo user làm việc với php-fpm với quyền 0660
, nếu bị lỗi 502 Bad Gateway thì bạn xem lại giá trị này đã đúng hay chưa.
Khởi động php-fpm và cho phép boot cùng hệ điều hành.
systemctl enable php-fpm.service systemctl start php-fpm.service
Sang phần cấu hình webserver nginx
4. Cấu hình NGINX
Tạo một file virtualhost
vi /etc/nginx/conf/demo1.thuysys.com.conf
Có nội dung như sau
server { listen 80; server_name demo1.thuysys.com www.demo1.thuysys.com; access_log /var/www/demo1.thuysys.com/logs/access.log; error_log /var/www/demo1.thuysys.com/logs/error.log; root /var/www/demo1.thuysys.com/public_html; index index.php; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
Tất cả directive thuộc block server {…} đã nói ở phần trước rồi mình không nói lại nữa, chúng ta tập trung vào nội dung trong các block con location {…} thôi.
location / {…}
Cấu hình rewrite url trong nginx
Toàn bộ nội dung trong block này nhằm kích hoạt Permalink Settings trong WordPress để có url thân thiện chuẩn SEO trên trình duyệt dạng /%category%/%postname%.html
Chú ý directive try_files
chỉ dùng trong block location, với các đối số như trên.
location ~ \.php$ {…}
Cấu hình unix domain trong nginx
Block : Ở đây, do chay trên cùng một server không dựng loadbalance cho backend mình cấu hình server dùng domain socket thay cho tcp socket để có hiệu suất cao hơn. Xin nói thêm cú pháp ~ \.php$
là chuỗi regular expression được dùng để xử lý chuỗi rất nhiều khi cấu hình Apache Web Server, nó có nghĩa tất cả directive bên trong block location này sẽ chỉ được áp dụng cho những file có phần mở rộng là .php.
location ~ /\.ht {…}
Disable file .htaccess
Vì dùng nginx nên chúng ta khôn cần .htaccess, đây là chuỗi regular dùng để tự động vô hiệu hóa file .htaccess sinh ra trong quá trình cài wordpress.
Trên đây là những câu hình cần thiết nhất giúp bạn tự tạo cho mình trang web wordpress rồi. Mình cũng xin kết thúc Phần IV tại đây.
LEMP Server hiện đang hot với nhiều lợi thế hơn webserver chạy Apache (LAMP), tuy nhiên cấu hình hơi phức tạp một tí do cú phát khác với Apache theo mình bạn nên dùng thằng này gõ config vài lần là quen thôi.
Ai mà vẫn quyến luyến Apache thì đọc thêm trên site mình tài liệu hướng dẫn rất đầy đủ, hoặc tham khảo.
Nếu có khó khăn gì các bạn cứ đưa lên đây mình cùng trao đổi, hẹn gặp lại ở bài tiếp theo.
Bạn ơi, trong /etc/yum.repos.d/ mình có 2 file:
remi-php70.repos
remi-php71.repos
Như vậy là mình đã cài 2 phiên bản php à. Việc đó có ảnh hưởng gì ko? Muốn gỡ 1 cái ra thì làm thế nào nhỉ?
Chỉ dùng 1 bản thôi bạn, mặc định chỉ cài packets trong remi-php70.repos thôi còn remi-php71.repos bị disable rồi. Bạn có thể vào từng repo kiểm tra lại cho chắc, muốn disable chỉ cần set
enabled=1
thànhenabled=0
anh ơi sao e cài php7 trên ubuntu không dc giup e với
Bài này hướng dẫn cài php 7 trên centos bạn nhé, bạn cài trên ubuntu bản mấy
ubuntu 15 ạ
Bạn chạy lệnh sau để thêm gói cài php 7 cho Ubuntu 15
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0
Với các web site không phải wordpress, joomla, drupal thì cẩn thận vì php 7 bỏ đi một số hàm có thể web của bạn ko chạy đc.