별도의 PHP-FPM 풀 세션 ID 충돌 가능성

별도의 PHP-FPM 풀 세션 ID 충돌 가능성

저는 Debian 8.10에서 nginx 1.12.2 및 PHP 7.0.27이 설치된 서버를 실행하고 있으며, 각 사이트가 실행하는 별도의 PHP 애플리케이션마다 별도의 PHP-FPM 풀이 있는 두 개의 웹 사이트를 실행하고 있습니다. 각 PHP-FPM 풀과 각 PHP 앱은 www-data로 실행되는 nginx를 사용하여 자체 사용자로 실행됩니다.

때때로(로드가 높은 시기라고 생각합니다) 세션 파일을 권한에 따라 읽고 쓰는 문제에 대해 PHP에서 엄청난 오류가 발생합니다. 예를 들면 다음과 같습니다.

2018/02/21 02:07:19 [error] 11723#11723: *804992 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: open(/var/lib/php/sessions/sess_<session id here>, O_RDWR) failed: Permission denied (13) in Unknown on line 0 PHP message: PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/sessions) in Unknown on line 0" while reading upstream, client: 34.242.193.225, server: example.org, request: "GET /somepage HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm-site-app.sock:", host: "example.org"

내가 알 수 있는 한, 두 PHP 사용자의 폴더에서 세션을 볼 때 권한이 정확하다는 것을 알 수 있습니다.

로그 파일에 표시된 직후 오류 메시지에 제공된 파일 이름에 대해 ls -alF를 실행하면 파일은 거기에 있지만 다른 사이트의 사용자가 소유합니다(다음 사이트의 세션용임을 암시하는 내용 포함). 다른 사이트) 이는 별도의 도메인에서 실행되는 두 앱이 모두 동일한 세션 ID를 생성했으며 하나는 해당 파일을 성공적으로 기록하고 다른 하나는 다른 사이트 사용자가 소유한 파일이 존재하기 때문에 실패한다는 것을 의미합니다. 내가 이해하는 바에 따르면 두 사이트가 동일한 세션 ID를 생성하는 것은 거의 불가능합니다.

각 풀에 대해 별도의 세션 경로를 설정하여 증상을 해결할 수 있다고 생각하지만, 이것이 서버에서 아직 발견하지 못한 다른 문제를 일으킬 수 있는 근본적인 문제를 해결할 수는 없다고 생각합니다.

답변1

이것은 실제로 소프트웨어 문제이지 nginx또는 이 문제가 아니며 php-fpm두 프로세스에서 동일한 소프트웨어를 실행하는 경우 충돌이 발생하는 것이 불가능하지 않습니다. 문서를 잠깐 살펴보면 단일 애플리케이션에 대한 충돌 감지가 있지만 서로 다른 사용자 공간에 있는 두 개의 개별 프로세스에서는 이를 수행하지 않는다는 것을 알 수 있습니다. 가장 간단한 수정은 session.save_path풀마다 다르게 구성하는 것입니다.

관련 정보