Thủ thuật Website

Cài đặt Nginx, PHP 8.0, WordPress và MySQL trên Ubuntu

Cài đặt Nginx

Nginx đã trở thành phần mềm máy chủ web phổ biến nhất được sử dụng trên các máy chủ Linux, vì vậy bạn nên sử dụng nó hơn là Apache. Mặc dù kho lưu trữ gói chính thức của Ubuntu bao gồm các gói Nginx, nhưng chúng thường rất lỗi thời. Thay vào đó, tôi thích sử dụng kho lưu trữ gói do Ondřej Surý duy trì, bao gồm các gói ổn định Nginx mới nhất.

Đầu tiên, thêm kho lưu trữ và cập nhật danh sách gói:

sudo add-apt-repository ppa:ondrej/nginx -y
sudo apt update

Hiện tại có thể có một số gói có thể được nâng cấp, hãy làm điều đó ngay bây giờ:

sudo apt dist-upgrade -y

Sau đó cài đặt Nginx:

sudo apt install nginx -y

Sau khi hoàn tất, bạn có thể xác nhận rằng Nginx đã được cài đặt bằng lệnh sau:

nginx -v
ashley@pluto:~$ nginx -v
nginx version: nginx/1.20.0

Ngoài ra, khi truy cập Tên miền Đủ điều kiện (FQDN) trỏ đến địa chỉ IP máy chủ của bạn trong trình duyệt, bạn sẽ thấy trang chào mừng Nginx.

Chào mừng đến nginx

Bây giờ Nginx đã được cài đặt thành công, đã đến lúc thực hiện một số cấu hình cơ bản. Nginx mới ra mắt được tối ưu hóa khá tốt, nhưng cần thực hiện một số điều chỉnh cơ bản. Tuy nhiên, trước khi mở tệp cấu hình, bạn cần xác định số lượng lõi CPU của máy chủ và giới hạn tệp đang mở.

Nhập lệnh sau để nhận số lõi CPU mà máy chủ của bạn có sẵn. Hãy ghi lại con số vì chúng ta sẽ sử dụng nó sau một phút:

grep processor /proc/cpuinfo | wc -l

Chạy phần sau để nhận giới hạn tệp mở của máy chủ của bạn và lưu ý, chúng tôi cũng cần nó:

ulimit -n

Tiếp theo, mở tệp cấu hình Nginx, có thể tìm thấy tại /etc/nginx/nginx.conf:

sudo nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

Tôi sẽ không liệt kê mọi chỉ thị cấu hình nhưng tôi sẽ đề cập ngắn gọn đến những chỉ thị mà bạn nên thay đổi. Nếu bạn muốn xem toàn bộ nội dung cùng một lúc dễ dàng hơn, vui lòng tải xuống bộ cấu hình Nginx hoàn chỉnh ngay bây giờ.

Bắt đầu bằng cách đặt người dùng thành tên người dùng mà bạn hiện đang đăng nhập. Điều này sẽ làm cho việc quản lý quyền đối với tệp dễ dàng hơn nhiều trong tương lai, nhưng điều này chỉ được chấp nhận về mặt bảo mật khi chạy một máy chủ truy cập người dùng duy nhất.

Chỉ thị worker_processes xác định số lượng công nhân sẽ xuất hiện trên mỗi máy chủ. Nguyên tắc chung là đặt điều này thành số lõi CPU mà máy chủ của bạn có sẵn. Trong trường hợp của tôi, đây là 1.

Khối sự kiện chứa hai chỉ thị, worker_connections đầu tiên phải được đặt thành giới hạn tệp đang mở của máy chủ của bạn. Điều này cho Nginx biết có bao nhiêu kết nối đồng thời có thể được mở bởi mỗi worker_process. Do đó, nếu bạn có hai lõi CPU và giới hạn tệp mở là 1024, máy chủ của bạn có thể xử lý 2048 kết nối mỗi giây. Tuy nhiên, số lượng kết nối không tương đương trực tiếp với số lượng người dùng mà máy chủ có thể xử lý, vì phần lớn các trình duyệt web mở ít nhất hai kết nối cho mỗi yêu cầu. Chỉ thị multi_accept nên được bỏ ghi chú và được đặt thành bật. Điều này thông báo cho mỗi worker_process chấp nhận tất cả các kết nối mới tại một thời điểm, trái ngược với việc chấp nhận một kết nối mới tại một thời điểm.

Di chuyển xuống tệp bạn sẽ thấy khối http. Chỉ thị đầu tiên cần thay đổi là keepalive_timeout theo mặc định được đặt thành 65. keepalive_timeout xác định bao nhiêu giây một kết nối với máy khách nên được giữ mở trước khi đóng bởi Nginx. Chỉ thị này nên được hạ xuống vì bạn không muốn các kết nối không hoạt động ở đó trong tối đa 65 giây nếu chúng có thể được sử dụng bởi các máy khách mới. Tôi đã đặt của tôi thành 15.

Vì lý do bảo mật, bạn nên bỏ ghi chú chỉ thị server_tokens và đảm bảo nó được đặt thành tắt. Điều này sẽ vô hiệu hóa việc phát ra số phiên bản Nginx trong thông báo lỗi và tiêu đề phản hồi.

Bên dưới server_tokens thêm chỉ thị client_max_body_size và đặt điều này thành kích thước tải lên tối đa mà bạn yêu cầu trong Thư viện phương tiện WordPress. Tôi đã chọn giá trị là 64m.

Đi sâu xuống khối http, bạn sẽ thấy một phần dành riêng cho nén gzip. Theo mặc định, gzip được bật nhưng bạn nên tinh chỉnh thêm các giá trị này để xử lý các tệp tĩnh tốt hơn. Đầu tiên, bạn nên bỏ ghi chú chỉ thị gzip_proxied và đặt nó thành bất kỳ, điều này sẽ đảm bảo tất cả các phản hồi yêu cầu được ủy quyền đều được nén. Thứ hai, bạn nên bỏ ghi chú gzip_comp_level và đặt nó thành giá trị 5. Điều này kiểm soát mức độ nén của phản hồi và có thể có giá trị trong khoảng 1 – 9. Hãy cẩn thận không đặt giá trị này quá cao vì nó có thể có tác động tiêu cực đến việc sử dụng CPU. Cuối cùng, bạn nên bỏ ghi chú chỉ thị gzip_types, để nguyên các giá trị mặc định. Điều này sẽ đảm bảo rằng JavaScript, CSS và các loại tệp khác được nén cùng với loại tệp HTML.

Đó là cấu hình Nginx cơ bản được xử lý. Nhấn CTRL + X, sau đó nhấn Y để lưu các thay đổi.

Để Nginx phân phối chính xác PHP, bạn cũng cần đảm bảo chỉ thị fastcgi_param SCRIPT_FILENAME được đặt, nếu không bạn sẽ nhận được màn hình trắng trống khi truy cập bất kỳ tập lệnh PHP nào. Mở tệp fastcgi_params:

sudo nano /etc/nginx/fastcgi_params

Đảm bảo rằng chỉ thị sau tồn tại, nếu không thêm nó vào tệp:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

Để lưu tệp fastcgi_params, nhấn CTRL + X, sau đó nhấn Y.

Bạn phải khởi động lại Nginx để các thay đổi có hiệu lực. Trước khi làm như vậy, hãy đảm bảo rằng các tệp cấu hình không có lỗi bằng cách phát hành lệnh sau:

sudo nginx -t

Nếu mọi thứ đều ổn, hãy tiếp tục và khởi động lại Nginx:

sudo service nginx restart
ashley@pluto:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ashley@pluto:~$ sudo service nginx restart
 * Restarting nginx                                                           [ OK ]
ashley@pluto:~$

Cài đặt PHP 8.0

Cũng giống như với Nginx, kho lưu trữ gói chính thức của Ubuntu có chứa các gói PHP. Tuy nhiên, chúng không phải là cập nhật nhất. Một lần nữa, tôi sử dụng một cái do Ondřej Surý duy trì để cài đặt PHP. Thêm kho lưu trữ và cập nhật danh sách gói như bạn đã làm cho Nginx:

sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

Sau đó cài đặt PHP 8.0, cũng như tất cả các gói PHP mà bạn sẽ yêu cầu:

sudo apt install php8.0-fpm php8.0-common php8.0-mysql \
php8.0-xml php8.0-xmlrpc php8.0-curl php8.0-gd \
php8.0-imagick php8.0-cli php8.0-dev php8.0-imap \
php8.0-mbstring php8.0-opcache php8.0-redis \
php8.0-soap php8.0-zip -y

Bạn sẽ nhận thấy php-fpm trong danh sách các gói đang được cài đặt. FastCGI Process Manager (FPM) là một triển khai PHP FastCGI thay thế với một số tính năng bổ sung hoạt động thực sự tốt với Nginx. Đó là trình quản lý quy trình được khuyến nghị sử dụng khi cài đặt PHP với Nginx.

Sau khi quá trình cài đặt hoàn tất, hãy xác nhận rằng PHP đã được cài đặt chính xác:

php-fpm8.0 -v
ashley@pluto:~$ php-fpm8.0 -v
PHP 8.0.13 (fpm-fcgi) (built: Nov 22 2021 09:50:43)
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.13, Copyright (c), by Zend Technologies

Định cấu hình PHP 8.0 và PHP-FPM

Khi Nginx và PHP được cài đặt, bạn cần phải định cấu hình người dùng và nhóm mà dịch vụ sẽ chạy. Như đã đề cập trong phần giới thiệu loạt bài, thiết lập này không cung cấp cách ly bảo mật giữa các trang web bằng cách định cấu hình nhóm PHP, vì vậy chúng tôi sẽ chạy một nhóm PHP duy nhất trong tài khoản người dùng của bạn. Nếu cần cách ly bảo mật giữa các trang web, chúng tôi khuyên bạn không nên sử dụng phương pháp này mà thay vào đó hãy sử dụng SpinupWP để cung cấp máy chủ của bạn.

Mở tệp cấu hình nhóm mặc định:

sudo nano /etc/php/8.0/fpm/pool.d/www.conf

Thay đổi các dòng sau, thay thế dữ liệu www bằng tên người dùng của bạn:

user = www-data
group = www-data

listen.owner = www-data
listen.group = www-data

Tiếp theo, bạn nên điều chỉnh tệp php.ini của mình để tăng kích thước tải lên tối đa của WordPress. Cả chỉ thị này và chỉ thị client_max_body_size trong Nginx đều phải được thay đổi để giới hạn tải lên tối đa mới có hiệu lực. Mở tệp php.ini của bạn:

sudo nano /etc/php/8.0/fpm/php.ini

Thay đổi các dòng sau để khớp với giá trị bạn đã gán cho chỉ thị client_max_body_size khi định cấu hình Nginx:

upload_max_filesize = 64M
post_max_size = 64M

Nhấn CTRL + X và Y để lưu cấu hình. Trước khi khởi động lại PHP, hãy kiểm tra xem cú pháp tệp cấu hình có đúng không:

sudo php-fpm8.0 -t
ashley@server:~$ sudo php-fpm8.0 -t
[09-May-2021 09:07:00] NOTICE: configuration file /etc/php/8.0/fpm/php-fpm.conf test is successful

Nếu kiểm tra cấu hình thành công, hãy khởi động lại PHP bằng lệnh sau:

sudo service php8.0-fpm restart

Bây giờ Nginx và PHP đã được cài đặt, bạn có thể xác nhận rằng cả hai đều đang chạy dưới quyền người dùng bằng cách ra lệnh htop:

htop

Nếu bạn nhấn SHIFT + M, đầu ra sẽ được sắp xếp theo mức sử dụng bộ nhớ, điều này sẽ hiển thị các quy trình nginx và php-fpm8.0. Bạn sẽ nhận thấy một vài lần xuất hiện của cả nginx và php-fpm.

Cả hai quy trình sẽ có một phiên bản chạy dưới người dùng root. Đây là quá trình chính sinh ra từng công nhân. Phần còn lại sẽ chạy dưới tên người dùng bạn đã chỉ định.

top - 08:55:43 up 29 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  97 total,   1 running,  94 sleeping,   2 stopped,   0 zombie
%Cpu(s):  0.0 us,  6.2 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    981.2 total,    528.4 free,    129.4 used,    323.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    700.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    676 root      20   0  241232  35892  29620 S   0.0   3.6   0:00.11 php-fpm8.0
    680 root      20   0  630404  28408  15544 S   0.0   2.8   0:00.58 snapd
    675 root      20   0   29272  17952  10292 S   0.0   1.8   0:00.04 networkd-dispat
    341 root      19  -1   51464  13312  12308 S   0.0   1.3   0:00.11 systemd-journal
    760 ashley    20   0  241608  12916   6616 S   0.0   1.3   0:00.00 php-fpm8.0
    761 ashley    20   0  241608  12916   6616 S   0.0   1.3   0:00.00 php-fpm8.0
    888 root      20   0   13796   8916   7472 S   0.0   0.9   0:00.00 sshd
    863 root      20   0   12176   7408   6484 S   0.0   0.7   0:00.00 sshd
    566 systemd+  20   0   90228   6056   5292 S   0.0   0.6   0:00.03 systemd-timesyn
    998 ubuntu    20   0   13928   5992   4528 S   0.0   0.6   0:00.45 sshd
   1096 ashley    20   0   58988   5596   3756 S   0.0   0.6   0:00.00 nginx

Nếu không, hãy quay lại và kiểm tra cấu hình và đảm bảo rằng bạn đã khởi động lại cả dịch vụ Nginx và PHP-FPM.

Kiểm tra Nginx và PHP

Để kiểm tra xem Nginx và PHP có hoạt động cùng nhau không, hãy bật PHP trong cấu hình trang web Nginx mặc định và tạo tệp thông tin PHP để xem trong trình duyệt của bạn. Bạn có thể bỏ qua bước này, nhưng thường rất hữu ích khi kiểm tra xem các tệp PHP có thể được máy chủ web Nginx xử lý chính xác hay không.

Trước tiên, bạn cần bỏ ghi chú một phần trong cấu hình trang web Nginx mặc định được tạo khi bạn cài đặt Nginx:

sudo nano /etc/nginx/sites-available/default

Tìm phần điều khiển các tập lệnh PHP.

# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
#       include snippets/fastcgi-php.conf;
#
#       # With php-fpm (or other unix sockets):
#       fastcgi_pass unix:/run/php/php8.0-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
#}

Vì chúng tôi đang sử dụng php-fpm, chúng tôi có thể thay đổi phần đó thành như thế này:

# pass PHP scripts to FastCGI server

location ~ \.php$ {
       include snippets/fastcgi-php.conf;

       # With php-fpm (or other unix sockets):
       fastcgi_pass unix:/run/php/php8.0-fpm.sock;
}

Lưu tệp bằng cách sử dụng CTRL + X theo sau là Y. Sau đó, như trước đây, hãy kiểm tra để đảm bảo rằng tệp cấu hình đã được chỉnh sửa chính xác.

sudo nginx -t

Nếu mọi thứ có vẻ ổn, hãy tiếp tục và khởi động lại Nginx:

sudo service nginx restart

Tiếp theo, tạo một tệp info.php trong thư mục gốc của web mặc định, đó là / var / www / html.

cd /var/www/html
sudo nano info.php

Thêm mã PHP sau vào tệp info.php đó và lưu nó bằng cách sử dụng cùng một tổ hợp CTRL + X, Y.

<?php
phpinfo();
?>

Cuối cùng, vì bạn đặt chỉ thị người dùng trong tệp nginx.conf của mình cho người dùng mà bạn hiện đang đăng nhập, hãy cấp cho người dùng đó quyền đối với tệp info.php.

sudo chown ubuntu info.php

Bây giờ, nếu bạn truy cập tệp info.php trong trình duyệt của mình, sử dụng FQDN mà bạn đã thiết lập trong chương 1, bạn sẽ thấy màn hình thông tin PHP, có nghĩa là Nginx có thể xử lý tệp PHP một cách chính xác.

Màn hình thông tin PHP.

Khi bạn đã kiểm tra điều này, bạn có thể tiếp tục và xóa tệp info.php.

sudo rm /var/www/html/info.php

Cài đặt MySQL

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai.

Back to top button