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

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

Điều này vô tình gây bất lợi cho bạn nếu VPS của bạn có nhiều trang web vì nếu bạn làm như vậy, toàn bộ trang web sẽ sử dụng cùng một người dùng để thực thi PHP-FPM, vì vậy nếu người dùng nginx có bất kỳ vấn đề bảo mật nào. thì tất cả các trang web chia sẻ cùng một người dùng nginx sẽ bị ảnh hưởng.

Trong bài viết này, tôi sẽ hướng dẫn bạn cách cấu hình tất cả các trang web sử dụng cùng một người dùng để chạy worker_process nhưng sẽ sử dụng một người dùng riêng biệt để thực thi PHP-FPM cho nhiều trang web khác nhau.

Làm thế nào nó hoạt động

Đầu tiên, hãy mở tệp php.conf trong thư mục /etc/nginx/conf.d/ Sau đó, bạn sẽ thấy đoạn sau:

fastcgi_pass    127.0.0.1:9000;

Điều này có nghĩa là chúng tôi sẽ chuyển các tệp .php tới proxy CGI thông qua cổng 9000 và hiện tại chúng tôi đang áp dụng cổng 9000 trên toàn bộ trang web trên VPS.

Tham số này sẽ khớp với tham số listen = 127.0.0.1:9000 trong tập tin /etc/php-fpm.d/www.conf.

Vì vậy, để sử dụng những người dùng riêng biệt cho mỗi trang web để thực thi các tệp PHP, chúng ta phải thiết lập mỗi trang web sử dụng một proxy khác nhau (ví dụ: 9001, 9002, 9003, …) và mỗi người dùng sẽ chịu trách nhiệm quản lý. quản lý proxy (theo mặc định, chúng tôi đã thiết lập người dùng nginx và nhóm nginx để quản lý proxy 9000).

Bạn tiếp tục mở tệp cấu hình chính của PHP-FPM với tư cách /etc/php-fpm.conf và nhìn gần đầu tệp, bạn 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 tôi sử dụng các tệp cấu hình của riêng mình nằm trong thư mục /etc/php-fpm.d/ như tệp www.conf là tệp cấu hình riêng mặc định mà nó tạo cho chính nó.

Sau đó chúng ta sẽ làm gì? Đó là chúng ta sẽ tạo các tệp cấu hình của riêng mình được đặt trong thư mục /etc/php-fpm.d/ có cùng nội dung với tệp www.conf và chỉ sửa cổng proxy và người dùng / nhóm sở hữu nó.

Lưu ý trước khi đặt

Trong bài viết này, chúng tôi chỉ tạo thêm người dùng / nhóm sở hữu proxy PHP-FPM.

Để xem NGINX có người dùng nào, hãy mở tệp nginx.conf trong dòng đầu tiên bạn sẽ thấy user nginxtức là người dùng nginx sở hữu NGINX.

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

Tạo người dùng mới

Để làm điều này, bạn cần tạo một người dùng mới. Mặc định khi tạo sẽ nằm trong nhóm riêng (trùng tên).

Ví dụ: bây giờ tôi muốn tạo một người dùng có tên thachpham sau đó gõ lệnh sau:

[bash]useradd thachpham[/bash]

Vì người dùng này sẽ xử lý PHP, chúng tôi không cần đặt mật khẩu cho nó.

xem thêm: Quản lý người dùng trên Linux VPS.

Thêm máy chủ ảo

Đầu tiên chúng ta tạo thêm 1 Virtual Host cho VPS, cách thêm Virtual Host mình đã đề cập ở bài trước nhưng mình sẽ thực hiện lại.

Ở đây mình muốn thêm Virtual Host với tên miền botay.com, trước tiên hãy tạo một thư mục cho Virtual Host.

[bash]mkdir -p /home/nginx/botay.com/log
chạm vào /home/nginx/botay.com/log/error.log
mkdir -p /home/nginx/botay.com/public_html[/bash]

Tiếp theo, sao chép tệp cấu hình VirtualHost của một miền nhất định mà bạn có trong / etc / nginx / domains /. Ví dụ: nếu tôi có sẵn tệp cấu hình abcxyz.com.conf, tôi sẽ sao chép nó từ tệp này và đổi tên thành botay.com.conf.

[bash]cp /etc/nginx/domains/abcxyz.com.conf /etc/nginx/domains/botay.com.conf[/bash]

Kiểm tra ai sở hữu thư mục bằng cách chạy lệnh sau:

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

Tạo thêm proxy PHP-FPM

Như tôi đã nói ở trên, tệp mặc định /etc/php-fpm.conf tự động tải cấu hình của tất cả các tệp kết thúc bằng .conf trong thư mục /etc/php-fpm.d/ vì vậy bây giờ bạn chỉ cần tạo một tệp .conf với bất kỳ tên nào trong đó. Ví dụ: tôi sẽ tạo một tệp có tên là /etc/php-fpm.d/botay.conf.

Nội dung của tệp mà bạn đưa đoạn này vào:


[botay.com]
listen = 127.0.0.1:9002
user = thachpham
group = thachpham
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-botay.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 tôi đã in đậm cần bạn chỉnh sửa. Đặc biệt:

  • listen: Bạn chỉ cần thay đổi cổng của nó, bạn có thể đổi sang cổng bất kỳ, miễn là nó không va chạm với cổng của các ứng dụng khác. Ví dụ: tôi đặt cổng proxy cho nó là 9001.
  • user: tên người dùng sở hữu proxy này.
  • group: tên nhóm sở hữu proxy này.

Lưu tệp này.

Định cấu hình lại tệp VirtualHost

Bây giờ mở tệp botay.com.conf, tìm dòng:

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

Thay đổi 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à bạn cần sửa lại, bạn vui lòng sửa lại cổng cho đúng với cổng bạn đã thiết lập cho file /etc/php-fpm.d/botay.conf.

Đừng quên sửa 2 đoạn văn nữa server_nameroot để thiết lập đường dẫn cho VirtualHost này.

Bây giờ nộp hồ sơ /etc/nginx/domains/botay.com.conf Của tôi là như thế này (nếu bạn hỏi tại sao tôi đặt lắng nghe là cổng 8080 cho VirtualHost, thì hãy xem lại bài đăng Varnish):

[bash]

người phục vụ {
nghe 8080;
server_name www.botay.com botay.com;

#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log chính;
error error_log /home/nginx/botay.com/log/error.log;

root /home/nginx/botay.com/public_html;

địa điểm / {
try_files $ uri $ uri / /index.php?$args;
}

vị trí ~ * .php $ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9002;
#fastcgi_pass unix: /var/run/php-fpm/php-fpm.sock;
bao gồm fastcgi_params;
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
fastcgi_param SCRIPT_NAME $ fastcgi_script_name;

# Đặt thời gian chờ cho proxy
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_bạc_bộ_chỉ 512k;
fastcgi_bạc 512 16k;
fastcgi_bộ_chân_cấp 512k;
fastcgi_temp_file_write_size 512k;
fastcgi_intercept_errors trên;
}
bao gồm /etc/nginx/conf.d/staticfiles.conf;
bao gồm /etc/nginx/conf.d/block.conf;
bao gồm /home/nginx/abcxyz.com/public_html/nginx.conf;
}
[/bash]

Bây giờ khởi động lại NGINX và PHP-FPM.

[bash]khởi động lại dịch vụ nginx
khởi động lại dịch vụ php-fpm[/bash]

Để kiểm tra xem nó có hoạt động hay không, chỉ cần đặt một tệp .php đơn giản vào thư mục public_html của miền này và chạy nó. Nếu nó có thể xử lý nó thì ok.

Đây là một mẫu tệp PHP rất đơn giản.


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

Và một điều rất quan trọngnó là một cấp quyền sở hữu thư mục /home/nginx/botay.com/ cho người dùng thachpham và nhóm thachpham.

[bash]chown -R thachpham: thachpham /home/nginx/botay.com[/bash]

Sau đó chạy tập tin này, nếu tập tin PHP này được xử lý thành công là bạn đã thực hiện thành công. Gõ lệnh đồng thời netstat -ntlup để kiểm tra các cổng đang được thực thi, bạn sẽ thấy cổng 9002 đang chạy.

[[email protected] ~]# netstat -ntlup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      6403/nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      3795/varnishd
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      866/sshd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      942/master
tcp        0      0 127.0.0.1:6082              0.0.0.0:*                   LISTEN      3794/varnishd
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      6420/php-fpm
tcp        0      0 127.0.0.1:9001              0.0.0.0:*                   LISTEN      6420/php-fpm
tcp        0      0 127.0.0.1:9002              0.0.0.0:*                   LISTEN      6420/php-fpm
tcp        0      0 :::80                       :::*                        LISTEN      3795/varnishd
tcp        0      0 :::22                       :::*                        LISTEN      866/sshd
tcp        0      0 ::1:25                      :::*                        LISTEN      942/master
tcp        0      0 :::3306                     :::*                        LISTEN      4295/mysqld

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

Đánh giá nội dung này

Tiếp tục đọc trong bộ truyện