SOHOA24H.NET

LEMP [Phần 7] – Sử dụng nhiều user cho PHP-FPM

sohoa24h.net – Trong các bài trước, các bạn có thể thấy mỗi khi tạo VirtualHost thì phải dùng lệnh chown để cho user nginx và group nginx sở hữu thư mục đó, đồng thời chỉnh lại user và group có quyền thực thi PHP-FPM trong file www.conf.

Việc này vô tình gây bất lợi cho bạn nếu như Linux của bạn có nhiều website bởi vì nếu làm như vậy, toàn bộ website sẽ sử dụng chung một user để thực thi PHP-FPM nên nếu user nginx có vấn đề gì về bảo mật thì toàn bộ các website có dùng chung user nginx đều bị ảnh hưởng.

Ở bài này, mình sẽ hướng dẫn bạn cách cấu hình tất cả các website sử dụng chung một user để chạy worker_process nhưng sẽ dùng user riêng để thực thi PHP-FPM cho nhiều website khác nhau.

Mục lục nội dung

Cách thức hoạt động

Lưu ý trước khi thiết lập

Hướng dẫn thiết lập

Tạo một user mới

Thêm Virtual Host

Tạo thêm PHP-FPM Proxy

Cấu hình lại file VirtualHost

Cách thức hoạt động

Trước tiên, bạn hãy mở file php.conf trong thư mục /etc/nginx/conf.d/ lên thì sẽ thấy đoạn sau:

fastcgi_pass    127.0.0.1:9000;

Điều này có nghĩa là chúng ta sẽ truyền các file .php vào một proxy của CGI thông qua cổng 9000, và hiện tại chúng ta đang áp dụng cổng 9000 trên toàn bộ website có trên VPS.

Tham số này sẽ trùng với tham số listen = 127.0.0.1:9000 trong file /etc/php-fpm.d/www.conf.

Như vậy, để sử dụng user riêng cho từng website để thực thi file PHP thì chúng ta phải thiết lập mỗi website sẽ sử dụng một proxy khác nhau (ví dụ như 9001, 9002, 9003,…) và mỗi user sẽ đảm nhận quản lý 1 proxy (mặc định chúng ta đã thiết lập user nginx và group nginx quản lý proxy 9000).

Bạn tiếp tục mở file cấu hình chính của PHP-FPM là /etc/php-fpm.conf và nhìn gần đầu file sẽ thấy đoạn này:

include=/etc/php-fpm.d/*.conf

Điều đó có nghĩa là PHP-FPM cho phép chúng ta sử dụng các file cấu hình riêng được đặt trong thư mục /etc/php-fpm.d/ như file www.conf là file cấu hình riêng mặc định nó tự tạo cho.

Vậy thì chúng ta sẽ làm sao? Đó là chúng ta sẽ tạo ra các file cấu hình riêng đặt trong thư mục /etc/php-fpm.d/ có nội dung giống như file www.conf và chỉ cần sửa lại cổng proxy và user/group sở hữu mà thôi.

Lưu ý trước khi thiết lập

Ở bài này, chúng ta chỉ tạo thêm user/group sở hữu proxy của PHP-FPM.

Để xem user nào mà NGINX đang sở hữu, thì mở file nginx.conf ở dòng đầu tiên bạn sẽ thấy user nginx, tức là user nginx đang sở hữu NGINX.

Hướng dẫn thiết lập

Tạo một user mới

Trước tiên để làm được thì bạn cần tạo ra một user mới. Mặc định khi tạo ra nó sẽ nằm trong group của chính nó (trùng tên).

Chẳng hạn bây giờ mình muốn tạo ra 1 user tên là sohoa24h thì sẽ gõ lệnh sau:

useradd sohoa24h

Do user này sẽ xử lý PHP nên chúng ta không cần thiết lập password cho nó đâu.

Xem thêm: Quản lý user trên VPS Linux.

Thêm Virtual Host

Trước tiên, chúng ta tạo thêm một Virtual Host cho Nginx, cách thêm Virtual Host mình đã nói ở bài trước rồi nhưng mình cũng sẽ làm lại.

Ở đây mình muốn thêm một Virtual Host với domain là sohoa24h.net thì đầu tiên là tạo thư mục cho Virtual Host.

mkdir -p /home/nginx/sohoa24h.net/log
touch /home/nginx/sohoa24h.net/log/error.log
mkdir -p /home/nginx/sohoa24h.net/public_html

Kế tiếp là copy file cấu hình VirtualHost của một domain nào đó mà bạn đang có trong /etc/nginx/domains/. Chẳng hạn mình đang có sẵn file cấu hình abcxyz.com.conf thì sẽ copy từ file này và đổi tên nó thành sohoa24h.net.conf.

cp /etc/nginx/domains/abcxyz.com.conf /etc/nginx/domains/sohoa24h.net.conf

Hãy kiểm tra lại ai đang sở hữu thư mục đó bằng cách chạy lệnh sau:

ls -al /home/nginx

Tạo thêm PHP-FPM Proxy

Như mình đã nói ở trên, mặc định file /etc/php-fpm.conf tự nạp cấu hình của toàn bộ file có đuôi là .conf trong thư mục /etc/php-fpm.d/ nên bây giờ bạn chỉ cần tạo một file .conf tên bất kỳ trong đó. Chẳng hạn mình sẽ tạo một file là/etc/php-fpm.d/sohoa24h.conf.

Nội dung file đó bạn đặt đoạn này vào:

[sohoa24h.net]
listen = 127.0.0.1:9002
user = sohoa24h
group = sohoa24h
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-sohoa24h.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Những dòng mình in đậm là cần các bạn sửa lại. Cụ thể:

- listen: Bạn chỉ cần đổi cái port của nó, bạn có thể đổi sang 1 port bất kỳ, miễn là không va chạm với các port của những ứng dụng khác. Ví dụ mình thiết lập port proxy cho nó là 9001.

- user: tên user sở hữu proxy này.

- group: tên group sở hữu proxy này.

Lưu lại file này.

Cấu hình lại file VirtualHost

Bây giờ hãy mở file botay.com.conf ra, tìm dòng:

include /etc/nginx/conf.d/php.conf;

Thay thành

location ~* .php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9002;
    #fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    # Thiết lập timeout cho proxy
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 512k;
    fastcgi_buffers 512 16k;
    fastcgi_busy_buffers_size 512k;
    fastcgi_temp_file_write_size 512k;
    fastcgi_intercept_errors on;
}

Chỗ mình in đậm là cần bạn sửa, hãy sửa lại port cho trùng với port mà bạn đã thiết lập cho file /etc/php-fpm.d/sohoa24h.conf.

Đừng quên sửa luôn 2 đoạn server_name  root để thiết lập đường dẫn cho VirtualHost này nhé.

Bây giờ file /etc/nginx/domains/sohoa24h.net.conf của mình là như thế này (nếu hỏi tại sao mình đặt listen là port 8080 cho VirtualHost thì xem lại bài Varnish):

server {
    listen       8080;
    server_name  www.sohoa24h.net sohoa24h.net;
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
        error_log        /home/nginx/sohoa24h.net/log/error.log      error;
        root   /home/nginx/sohoa24h.net/public_html;
    location / {
       try_files $uri $uri/ /index.php?$args;
    }
location ~* .php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9002;
    #fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    # Thiết lập timeout cho proxy
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 512k;
    fastcgi_buffers 512 16k;
    fastcgi_busy_buffers_size 512k;
    fastcgi_temp_file_write_size 512k;
    fastcgi_intercept_errors on;
}
        include /etc/nginx/conf.d/staticfiles.conf;
        include /etc/nginx/conf.d/block.conf;
        include /home/nginx/sohoa24h.net/public_html/nginx.conf;
}

Bây giờ thì hãy restart lại NGINX và PHP-FPM.

service nginx restart
service php-fpm restart

Để kiểm tra xem nó có hoạt động hay không, bạn cứ thử đặt 1 file .php đơn giản vào thư mục public_html của domain này rồi chạy. Nếu nó xử lý được thì oke.

Đây là 1 mẫu file PHP cực đơn giản.

<?php
        for ($i = 1; ; $i++) {
                if ($i > 10) {
                        break;
                }
                echo $i;
        }
?>

Và một việc vô cùng quan trọng, đó là cấp quyền sở hữu thư mục /home/nginx/sohoa24h.net/ cho user sohoa24h và group sohoa24h.

chown -R sohoa24h:sohoa24h /home/nginx/sohoa24h.net

Sau đó chạy file này, nếu file PHP này xử lý thành công thì bạn đã làm thành công. Đồng thời gõ lệnh netstat -ntlup để kiểm tra các port đang được thực thi, bạn sẽ thấy port 9002 đang chạy.

Và sau này để tránh bị lỗi phân quyền, nếu cần sửa hay thao tác tập tin trong này thì bạn hãy đăng nhập bằng user mà nó đang sổ hữu thư mục này (ví dụ trong bài này là sohoa24h). Chỉ vậy thôi, cũng dễ mà đúng không?

Chỉnh sửa : Ping

Nguồn : Web

Lượt xem: 1260

Vài Nét Về Tác Giả "Ping"

Tôi đam mê công nghệ nhất là về mảng Network và System . Tôi thích tìm hiểu học hỏi chuyên sâu về Linux và Windows . Sau vài năm làm việc ngoài bôn ba , tôi đã cùng 2 anh chị thân lập nên web sohoa24h.net để chia sẻ kinh nghiệm kiến thức tới những ai đam mê IT .

Gửi Phản Hồi