Php trả về fpm

Lỗi 1897517 - php-fpm không thể ghi vào socket của redis

php-fpm không thể ghi vào ổ cắm của redis

Liên kếtHệ thốngIDRiêng tưPriorityTrạng tháiTóm tắtCập nhật lần cuốiRed Hat Bugzilla18751380mediumĐÓNG CỬAphp-fpm không thể ghi vào ổ cắm của redis (Fedora)Red Hat Product ErrataRHBA-2022. 76910 Không Không Không Không




Trong bài viết này, chúng ta sẽ tìm hiểu lý do tại sao sử dụng kết nối liên tục là một phương pháp hay và cách thiết lập khung Symfony để sử dụng kết nối liên tục trên máy chủ Redis

Tại sao sử dụng các kết nối liên tục?

Máy chủ Redis được thiết kế để xử lý nhiều thao tác mỗi giây khiến nó trở thành một ứng cử viên sáng giá cho công cụ lưu trữ bộ đệm dữ liệu

Nhưng kết nối với máy chủ là một hoạt động tốn kém và do đó tốc độ kết nối nên được giữ ở mức thấp nhất có thể

Một giải pháp là sử dụng proxy như Twemproxy hoặc bạn có thể sử dụng các kết nối liên tục để chúng được PHP sử dụng lại để phục vụ nhiều yêu cầu

Sử dụng các kết nối liên tục với PHP chỉ hoạt động nếu

  • bạn đang sử dụng PHP không an toàn theo luồng
  • quy trình PHP không bị hủy khi yêu cầu đã được phục vụ
Chủ đề PHP của tôi có an toàn hay không?

Điều này là bắt buộc nếu bạn đang sử dụng

Tính năng này không có sẵn trong các phiên bản luồng. Sau đó, pconnectpopen hoạt động giống như các giá trị tương đương không liên tục của chúng

Cái này dễ kiểm tra. Bạn có thể sử dụng CLI hoặc phương pháp phpinfo() để tìm hiểu. Bài viết StackOverflow này mô tả các phương pháp này. https. // stackoverflow. com/câu hỏi/5799843/find-if-the-install-php-is-threadsafe-or-nonthreadsafe

Quá trình PHP của tôi có bị hủy sau khi yêu cầu đã được phục vụ không?

Điều này phụ thuộc vào thiết lập của bạn. Về cơ bản, với Apache, bạn có thể đang sử dụng

  • mod_php (mặc định)
  • CGI
  • PHP-FPM

PHP-FPM là cái tôi thích nhất. Với thiết lập này, một nhóm các quy trình PHP được bắt đầu và mỗi quy trình chờ Apache gửi yêu cầu để xử lý. Khi yêu cầu đã được phục vụ, thì quá trình sẽ chờ một yêu cầu khác. Vì vậy, nó không bị giết và do đó có thể sử dụng các kết nối liên tục tới Redis

Cách thiết lập Symfony

Symfony cho phép bạn dễ dàng sử dụng Redis làm bộ điều hợp bộ đệm. Bạn chỉ cần đặt Redis DSN như được giải thích trong tài liệu. h

Nhưng cài đặt mặc định của bộ điều hợp này sử dụng các kết nối không liên tục theo giá trị mặc định của liên tục theo tài liệu. https. // giao hưởng. com/doc/current/components/cache/adapters/redis_adapter. html

Vì vậy, bạn cần sử dụng bộ điều hợp tùy chỉnh.

services:
app.my_custom_redis_provider:
class: Redis
factory: [‘Symfony\Component\Cache\Adapter\RedisAdapter’, ‘createConnection’]
arguments:
— ‘%env(REDIS_URL)%’
— {persistent: 1, timeout: 15}

Thời gian chờ 15 giây được coi là thời gian chờ tốt nhưng bạn có thể thay đổi thời gian này để phù hợp với nhu cầu của mình. Hãy cẩn thận với thời gian chờ bằng 0 vì nó có thể tạo ra sự cố (https. //github. com/phpredis/phpredis/issues/1265)

Và sau đó tạo một nhóm sử dụng nhà cung cấp này

framework:
cache:
pools:
cache.my_redis:
adapter: cache.adapter.redis
provider: app.my_custom_redis_provider

Nếu bạn muốn sử dụng thiết lập này cho nhóm mặc định cache.appcache.system thì bạn cần

framework:
cache:
app: cache.my_redis
system: cache.my_redis
Hãy cẩn thận

Sử dụng các kết nối liên tục đến Redis có nghĩa là kết nối không bị đóng cho đến khi quá trình PHP chết. Vì vậy, nếu nhóm PHP-FPM của bạn tạo ra nhiều quy trình PHP thì những quy trình này có thể tạo ra nhiều kết nối hơn so với khả năng xử lý của máy chủ Redis của bạn và điều này sẽ gây ra lỗi đạt được số lượng máy khách tối đa

Để cài đặt tiện ích mở rộng PECL cho nhiều phiên bản PHP, hãy lặp lại cài đặt tiện ích mở rộng PECL cho từng phiên bản PHP

Tiện ích mở rộng PHP này cung cấp cho khách hàng quyền truy cập vào máy chủ Redis. Bản thân nó không phải là Redis. Redis là một máy chủ cung cấp kho lưu trữ khóa/giá trị. Khi bạn cài đặt tiện ích mở rộng Redis PHP, nó sẽ cho phép PHP giao tiếp với máy chủ Redis. Đọc thêm về cách cài đặt máy chủ Redis

Cài đặt tiện ích mở rộng Redis trên PHP 7. X

Trong các ví dụ được hiển thị, thay thế "7. X" bằng phiên bản PHP của ứng dụng của bạn (ví dụ: "7. 0")

Để cài đặt tiện ích mở rộng PHP Redis trên PHP 7. 0, 7. 1, 7. 2, 7. 3 hoặc 7. 4, SSH vào máy chủ của bạn với quyền root và chạy các lệnh sau

sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo pecl7.X-sp install redis

Khi được nhắc với những điều sau đây

enable igbinary serializer support? [no] :
enable lzf compression support? [no] :

nhấn Enter để chấp nhận mặc định cả hai lần

Sau khi cài đặt, hãy tạo tệp cấu hình cho tiện ích mở rộng và khởi động lại PHP bằng cách chạy các lệnh sau với quyền root

Khi nói đến tốc độ, không có máy chủ Redis nào sánh kịp. Là một máy chủ cơ sở dữ liệu NoSQL, nó cung cấp tốc độ lưu trữ và truy xuất dữ liệu tuyệt vời. Bên cạnh đó, Redis có các chức năng nổi bật giúp làm việc liền mạch với các dữ liệu khác nhau, kể cả những dữ liệu phức tạp. Tính dễ sử dụng và các chức năng phức tạp của Redis không chỉ làm cho nó nổi bật mà còn cho phép tiêu chuẩn hóa ngày càng tăng của nó như một cơ sở dữ liệu chính cho người dùng cá nhân và doanh nghiệp

Dưới đây, chúng tôi sẽ hướng dẫn chi tiết các bước giúp bạn cài đặt Redis trên Ubuntu 20. 04 phần mềm. Trong hướng dẫn này, bạn sẽ nhận được tất cả thông tin cần thiết từ cài đặt đến định cấu hình máy chủ Redis bên ngoài để sử dụng làm trình xử lý phiên cho ứng dụng PHP chạy trên Ubuntu 20. 04

Bắt đầu

Để thực hiện các bước, bạn sẽ cần hai máy chủ cơ sở dữ liệu (giọt nhỏ) khác nhau nằm trong cùng một trung tâm dữ liệu có bật mạng riêng. Bao gồm các

  • Một máy chủ web PHP chạy LAMP và LEMP trên Ubuntu 20. 04 – chúng tôi sẽ gọi máy chủ này là web

  • Thứ hai, làm sạch Ubuntu 20. 04 nơi Redis sẽ được cài đặt – chúng tôi sẽ gọi máy chủ này là Redis

Bước 1 - Cài đặt Redis Server

Bước đầu tiên của chúng tôi là cài đặt máy chủ Redis trên Ubuntu 20. 04. Sau khi hoàn tất, hãy đảm bảo rằng máy chủ đang hoạt động trên Redis Droplet của chúng tôi

Trong hướng dẫn này, chúng tôi sẽ sử dụng Kho lưu trữ gói cá nhân (PPA). Chúng tôi thực sự khuyên bạn nên sử dụng PPA vì lý do bảo mật. So với các kho lưu trữ của bên thứ ba khác, PPA ổn định, dễ cài đặt và trên hết, kho lưu trữ được thiết kế cho người dùng Ubuntu. PPA cho phép bạn có sẵn phiên bản phần mềm mới nhất, ngay cả đối với phần mềm bạn không tìm thấy trong kho chính thức của Ubuntu

Sử dụng PPA từ một nguồn trái phép là một điều tối kỵ. Đảm bảo rằng bạn chỉ nhận được PPA từ các nguồn xác thực và đã được xác minh. Bạn có thể thêm kho lưu trữ PPA bằng lệnh

1

sudo add - apt - kho lưu trữppa. chris - lea / return - máy chủ

Nhấn phím Enter để xác nhận. Sau khi xác nhận, chúng tôi sẽ cập nhật bộ đệm của trình quản lý gói bằng lệnh sau

1

sudo apt - nhận cập nhật

Tiếp theo, chúng ta sẽ cài đặt Redis bằng lệnh

1

sudo apt - nhận cài đặt trả về - máy chủ

Khi bạn thực hiện lệnh, bạn sẽ cài đặt Redis trên máy chủ của mình. Hãy kiểm tra cài đặt bằng lệnh

1

return - cli ping

Khi bạn nhấn lệnh, bạn sẽ thấy một phiên bản Redis đang chạy trên máy chủ cục bộ trên cổng 6379. Ngoài ra, sẽ có một phản hồi tên là PONG. Nếu bạn thấy những điều này, điều đó có nghĩa là bạn đã hoàn thành bước đầu tiên thành công. Để có hướng dẫn chi tiết về cài đặt và bảo mật Redis, bạn có thể xem hướng dẫn của chúng tôi Cách cài đặt và bảo mật Redis trên Ubuntu 18. 04

Tiếp theo, hãy chuyển sang bước tiếp theo- định cấu hình Redis

Bước 2 - Trả lại cấu hình để chấp nhận kết nối bên ngoài

Mục tiêu chính của việc định cấu hình Redis là chấp nhận các kết nối đến từ bên ngoài. Tại sao? . Nói một cách đơn giản hơn, bạn sẽ có quyền truy cập từ bên trong máy chủ mà bạn đã cài đặt Redis. localhost, and there is a restriction to connect from anywhere else. In simpler terms, you´ll have access from inside the server where you have installed Redis.

Trước tiên, hãy xem thông tin chi tiết về giao diện mạng của bạn bằng cách sử dụng lệnh ifconfig .

1

sudoifconfig

Bạn sẽ nhận được đầu ra dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

eth0 Link encap. Ethernet HWaddr 04. 01. 63. 7e. a4. 01

         inet addr. 188. 166. 77. 33188.166.77.33 Truyền hình. 188. 166. 127. 255188.166.127.255 Mặt nạ. 255. 255. 192. 0

         inet6 addr. fe80. . 601. 63ff. fe7e. a401 / 64 Phạm vi. Liên kết

         LÊN PHÁT SÓNG CHẠY ĐA NĂNG MTU. 1500 Số liệu. 1

         RX gói. 3497 lỗi. 0 rớt. 0 bị tràn. 0 khung. 0

         TX gói. 3554 lỗi. 0 rớt. 0 bị tràn. 0 nhà cung cấp dịch vụ. 0

         va chạm. 0 txqueuelen. 1000

         RX byte. 4895060 (4. 8 MB) TX byte. 619070 (619. 0 KB)

 

eth1 Link encap. Ethernet HWaddr 04. 01. 63. 7e. a4. 02

         inet addr. 10. 133. 14. 9 Truyền hình. 10. 133. 255. 255 Mặt nạ. 255. 255. 0. 0

         inet6 addr. fe80. . 601. 63ff. fe7e. a402 / 64 Phạm vi. Liên kết

         LÊN PHÁT SÓNG CHẠY ĐA NĂNG MTU. 1500 Số liệu. 1

         RX gói. 8 lỗi. 0 rớt. 0 bị tràn. 0 khung. 0

         TX gói. 7 lỗi. 0 rớt. 0 bị tràn. 0 nhà cung cấp dịch vụ. 0

         va chạm. 0 txqueuelen. 1000

         RX byte. 648 (648. 0 B) TX byte. 578 (578. 0 B)

Tại giao diện eth1, bạn sẽ tìm thấy inet_addr . Ở đây chúng ta có 10. 133. 14. 9 . Chúng tôi sẽ sử dụng địa chỉ IP này trong các bước sắp tới để kết nối máy chủ redis từ máy chủ web.

Bước 3—Ràng buộc Localhost

Bạn có thể tự do sử dụng trình chỉnh sửa mã mà mình chọn (Atom và Visual Studio Code là những mã phổ biến nhất)

Bây giờ, hãy mở tệp / etc / return / trả về. conf và tìm dòng chứa định nghĩa bind . Bạn nên thêm địa chỉ IP mạng riêng của mình vào dòng.

1

sudo vim / vv / trả lại / trả lại. conf

/etc/returns/returns. conf

1

ràng buộc localhost 10. 133. 14

Bạn có thể thấy localhost , thay vì 127. 0. 0. 1 . Đừng lo, bạn chỉ cần thêm địa chỉ IP riêng của mình. Tiếp theo, khởi động lại dịch vụ Redis để áp dụng các thay đổi. Sử dụng lệnh bên dưới để khởi động lại máy chủ redis.

1

sudo dịch vụ trả về - máy chủ khởi động lại

Đối với những người dùng đã cài đặt Redis bằng ứng dụng một cú nhấp chuột, bạn sẽ thực hiện theo lệnh được đề cập bên dưới để khởi động lại máy chủ của mình

1

sudo dịch vụ return khởi động lại

Khi bạn khởi động lại máy chủ redis, bất kỳ máy chủ nào có trong cùng một mạng riêng sẽ tự động kết nối với phiên bản Redis này mà không cần phải thực hiện riêng lẻ

Bước 4— Thiết lập mật khẩu máy chủ trở lại

Bạn có thể bỏ qua bước này nếu đang sử dụng bản cài đặt Redis cho mục đích thực hành hoặc đào tạo. Tuy nhiên, bạn nên thiết lập mật khẩu cho máy chủ redis nếu muốn thêm một lớp bảo mật bổ sung cho cài đặt Redis của mình. Hãy để chúng tôi sửa đổi tệp cấu hình giống như chúng tôi đã làm ở bước trước. Sử dụng lệnh để chỉnh sửa

1

sudo vim / vv / trả lại / trả lại. conf

Bỏ ghi chú dòng chứa requirepass và đặt mật khẩu mạnh.

/etc/returns/returns. conf

1

requirepassStrongPassword

Khởi động lại dịch vụ Redis để phản ánh những thay đổi bạn đã thực hiện. Sử dụng lệnh để khởi động lại

1

sudo dịch vụ trả về - máy chủ khởi động lại

Bước 5 - Trả lại kết nối và kiểm tra xác thực

Trong bước này, chúng tôi sẽ kết nối với dịch vụ Redis từ bên trong máy redis để đảm bảo rằng tất cả các thay đổi được thực hiện đều hoạt động trơn tru như mong đợi. Để kết nối, sử dụng lệnh bên dưới

1

return - cli - h 10. 133. 14. 9

Ở đây, ngay cả khi bạn bỏ qua việc đề cập đến tên máy chủ, nó vẫn sẽ chạy. Mục đích chính của chúng tôi là đảm bảo dịch vụ Redis chấp nhận các kết nối một cách liền mạch

1

10. 133. 14. 9. 6379>

Có thể bạn gặp lỗi AUTH khi cố truy cập dữ liệu từ mật khẩu đã xác định.

1

10. 133. 14. 9. 6379> phím *

Đầu ra của bạn sẽ trông giống như thế này

1

2

ĐẦU RA.

(lỗi) NOAUTH Xác thực bắt buộc.

Để xác thực, hãy chạy lệnh AUTH cùng với mật khẩu bạn đã xác định trong /< /a> etc / return / return< /a>. Tệp conf .

1

10. 133. 14. 9. 6379> AUTH StrongPassword

Tiếp theo, chạy lại lệnh

1

10. 133. 14. 9. 6379> phím *

Lần này, bạn sẽ nhận được phản hồi OK thay vì lỗi. Bạn sẽ nhận được đầu ra như dưới đây

1

2

ĐẦU RA.

(trống danh sách hoặc đặt)

Đầu ra danh sách trống hoặc đặt có nghĩa là máy chủ Redis trống. Đó là bởi vì chúng tôi chưa định cấu hình máy chủ web dưới dạng trình xử lý phiên.

Ghi chú. Trước khi tiếp tục, hãy đảm bảo phiên SSH được mở và kết nối với redis-cli. Trong các bước sắp tới, chúng tôi sẽ quay lại lời nhắc redis-cli để xác minh xem dữ liệu phiên có được lưu trữ đúng cách hay không sau khi chúng tôi thực hiện các thay đổi cần thiết đối với máy chủ web

Bước 6 - Cài đặt Redis Extension trên Web Server

Các bước tiếp theo sẽ được thực hiện trên máy chủ web. Chúng ta cần cài đặt PHP Redis extension cho PHP để kết nối với Redis server

Trước tiên, hãy cập nhật bộ đệm của trình quản lý gói của bạn bằng cách chạy lệnh

1

sudo apt - nhận cập nhật

Tiếp theo, cài đặt gói php5 - redis .

1

sudo apt - nhận cài đặt php5 - return

Bạn đã sẵn sàng để kết nối với Redis

Bước 7 - Quay lại Thiết lập làm Trình xử lý phiên mặc định trên Máy chủ Web

PHP có trình xử lý phiên mặc định. Trong bước này, chúng tôi sẽ chỉnh sửa php. ini trên máy chủ web để thay đổi cài đặt mặc định. php. ini vị trí tệp phụ thuộc vào ngăn xếp hiện tại.

  • Đối với ngăn xếp LAMP trên Ubuntu 20. 04, sử dụng. / vv / php5 / apache2 / php. trong .

  • Đối với ngăn xếp LEMP trên Ubuntu 20. 04, đường dẫn thường là / etc / php5 / fpm / php. trong .

Nếu bạn không chắc chắn về vị trí của php chính của mình. ini , hãy sử dụng hàm phpinfo() . Đặt đoạn mã sau vào tệp có tên info. php bên trong thư mục gốc web của bạn.

1

2

<?php

phpinfo();

Khi bạn đang cố truy cập tập lệnh từ trình duyệt của mình, hãy tìm kiếm hàng chứa "Tệp cấu hình đã tải. ”Bạn sẽ tìm thấy vị trí chính xác của php chính. Đã tải ini . Đảm bảo xóa thông tin. php vì tệp này có tất cả nội dung nhạy cảm trong môi trường của bạn.

Sau đó, mở php. ini và tìm dòng chứa phiên. save_handler . Giá trị mặc định sẽ là tệp , đảm bảo thay đổi thành redis .

Trên môi trường LAMP

1

$ sudo vim / vv / php5 / apache2 / php. ini

Trên môi trường LEMP

1

$ sudo vim / vv / php5 / fpm / php. ini

/etc/php5/fpm/php. TRONG

1

phiên. save_handler = return

Tiếp theo, bỏ ghi chú phiên. save_path và sửa đổi giá trị để chứa chuỗi kết nối Redis. Nội dung phải theo định dạng bên dưới.

1

tcp. //IPADDRESS. PORT?auth=REDISPASSWORD

/etc/php5/fpm/php. TRONG

1

phiên. save_path = "tcp. //10. 133. 14. 9. 6379?auth=yourverycomplexpasswordhere"

Sử dụng mật khẩu chúng tôi đã thiết lập trong trường hợp bạn không sử dụng mật khẩu đã thiết lập, hãy cung cấp tham số auth khi định cấu hình Redis. Bây giờ, hãy lưu tệp và khởi động lại dịch vụ php trên cả hai môi trường.

Trên môi trường LAMP

1

sudo dịch vụ apache2 khởi động lại

Trên môi trường LEMP

1

sudo dịch vụ php5 - fpm khởi động lại

Bước 8 - Kiểm tra Xử lý phiên Redis

Ở bước cuối cùng, chúng tôi cần một tập lệnh hoặc ứng dụng PHP để đảm bảo rằng các phiên của bạn hiện được xử lý bởi Redis. Chúng tôi sẽ sử dụng một tập lệnh đơn giản triển khai bộ đếm – mỗi lần bạn tải lại trang, số lượng bản in sẽ tăng lên

Tạo tệp có tên demo. php trên máy chủ web và giữ nó bên trong thư mục gốc tài liệu của bạn.

1

sudo sudo vim / usr / chia sẻ / nginx / html / kiểm tra. php

Sau đó, thay đổi / usr / chia sẻ< /a> / nginx / html để phản ánh đường dẫn gốc tài liệu của bạn.

/usr/share/nginx/html/demo. php

1

2

3

4

5

6

7

<?php

// bộ đếm đơn giản cho các phiên kiểm tra. sẽ tăng lên trên mỗi lần tải lại trang

 

session_start();

$đếm = đặt($_SESSION['count']) ? $_SESSION[ a> a> a> a>'đếm'] . 1;

echo $count;

$_SESSION['count'] = ++ $đếm;< /a>

Tiếp theo, bạn phải trỏ trình duyệt của mình tới http. //web/demo. php để truy cập tập lệnh. Chương trình sẽ tăng số mỗi khi bạn tải lại trang.

Bây giờ bạn sẽ có thông tin phiên được lưu trữ trên máy chủ Redis. Để xác minh, bạn phải quay lại phiên SSH của mình trên máy redis bằng cách sử dụng redis - clicli - a> cli - a> cli - a> cli - a> . Lấy lại nội dung bằng phím * .

1

10. 133. 14. 9. 6379> phím *

Bạn sẽ thấy đầu ra bên dưới

1

2

ĐẦU RA.

1) "PHPREDIS_SESSION. j9rsgtde6st2rqb6lu5u6f4h83"

Đầu ra xác minh rằng tất cả thông tin được lưu trữ an toàn trên máy chủ redis. Nếu bạn muốn kết nối các máy chủ web bổ sung, bạn có thể làm theo cách tương tự

Phần kết luận

Redis là cơ sở dữ liệu NoSQL cho phép lưu trữ nhiều dữ liệu phi cấu trúc. Rất ít cơ sở dữ liệu có thể so sánh với các chức năng và sự đơn giản của máy chủ redis. Mức độ phổ biến ngày càng tăng của nó liên tục khiến nó trở thành sản phẩm bắt buộc phải có với ít sản phẩm thay thế so với các tính năng rộng rãi của nó

Để nâng cao kiến ​​thức của bạn về các ứng dụng PHP và cách sử dụng chúng, bạn có thể xem các hướng dẫn sau từ blog của chúng tôi

Làm cách nào để sử dụng Redis trong PHP?

php // Đang kết nối với máy chủ Redis trên localhost $redis = new Redis(); . 0. 0. 1', 6379); . "

Đâu là sự khác biệt giữa Predisvà Phpredis?

PhpRedis là một phần mở rộng PHP để giao tiếp với bộ lưu trữ Redis. Predis là giải pháp thay thế cho PhpRedis trên PHP thuần túy và không yêu cầu bất kỳ phần mở rộng C bổ sung nào theo mặc định, nhưng nó có thể được ghép nối tùy chọn với phpiredis

Làm cách nào để cài đặt tiện ích mở rộng PHP Redis trên Windows?

Tải xuống php_redis. dll từ PECL libs. .
Sao chép php_redis. dll và dán vào thư mục sau trong thư mục tiện ích mở rộng của XAMPP Server (D. \XAMPP\php\ext )
mở php. .
Khởi động lại máy chủ XAMPP
Mở phpinfo() của XAMPP server và search Redis, nếu tìm thấy tức là bạn đã tích hợp Redis với PHP thành công

Làm cách nào để cài đặt Phpredis trên Linux?

Cài đặt phpredis trên CentOS 8 .
Cài đặt tiện ích yum. .
Bước 2 – Kích hoạt và cài đặt repo EPEL trên CentOS 8. .
Bước 3 – Cài đặt remi repo cho PHP 7. 4 và php74-php-pecl-redis5. .
Bước 4 – Đặt phiên bản PHP mặc định. .
Bước 5 – Tìm kiếm gói phpredis trên CentOS 8. .
Bước 6 – Cài đặt phpredis trên CentOS 8