오늘 PHP를 5.3.28에서 5.3.29로 업그레이드했는데 웹사이트를 열 수 없어 "502 잘못된 게이트웨이" 메시지가 표시되었습니다. 정적 리소스에 액세스할 수 있지만 PHP 파일에 액세스하면 502가 발생합니다.
사실 저는 이 문제를 이전에도 발견했지만 해결책을 찾지 못해 PHP를 5.3.28 버전으로 유지하고 있습니다.
이전 성격에 따르면 모든 소프트웨어는 최신 안정 버전을 받아야 하지만 PHP와 같은 소프트웨어는 예외입니다. 버전이 높을수록 많은 프로그램이 호환되지 않기 때문입니다. 상대적으로 말하면 5.3이 가장 좋은 버전 중 하나입니다. 1. 물론 5.2도 사용 가능합니다.
저는 강박장애를 정말 참을 수 없습니다. 관계자는 5.3.29가 5.3의 마지막 버전이라고 말했습니다. 이 문제가 마지막 버전에서 나타났는데 해결되지 않았다는 사실이 안타깝습니다.
온라인으로 검색해 보니 아무도 이 문제를 겪지 않았습니다. 5.3.25부터 5.3.28까지 모든 컴파일 및 구성 프로세스는 제가 작성한 것과 동일한 업그레이드 스크립트를 사용했습니다. 버전 시리즈에서는 동일한 컴파일 및 구성 프로세스를 수행하므로 문제가 없습니다.
5.3.25에서 5.3.28까지는 문제가 없는데 5.3.29 이후에는 문제가 없는 이유는 무엇인가요?
오늘 드디어 문제의 원인을 찾았고, 저도 술에 취해버렸습니다...
추가 포트를 점유하고 싶지 않아서 항상 Nginx와 PHP-FPM 사이에 Unix 소켓을 사용해왔는데, 이 방법이 더 효율적이라고 합니다.
PHP를 5.3.29로 업그레이드한 후 502 오류가 발생했는데, 웹페이지를 열자마자 해당 오류가 보고되었습니다. PHP 실행 시간 초과로 인한 Nginx 프롬프트 502와는 달리 PHP-FPM이 비정상적으로 종료되는 것과 비슷했습니다. 또는 Ngxin이 fastcgi에 전혀 연결되지 않았습니다.
PHP-FPM을 사용하는 로그도 답답합니다. 로그를 명확하게 활성화하고 로그 경로를 설정했지만 여전히 로그가 생성되지 않습니다.
이전 아이디어에서 추론된 이유를 바탕으로 문제를 찾아보겠습니다.
1.PHP-FPM이 작동을 시작하자마자 비정상적으로 종료되었습니다.
2.Ngxin은 fastcgi에 전혀 연결되어 있지 않습니다.
첫 번째 가능성은 502 오류가 발생하면 백그라운드 PHP-FPM 프로세스가 종료되지 않고 여전히 살아 있기 때문에 직접적으로 제거됩니다.
그렇다면 아마도 두 번째 가능성일 것입니다. Nginx와 PHP-FPM의 구성 파일을 수정하여 전통적인 "주소:포트" 형식으로 변경했습니다.
PHP-FPM 구성 파일에서:
듣기 = 127.0.0.1:1234
Nginx 구성 파일에서:
fastcgi_pass 127.0.0.1:1234
서비스를 다시 시작한 후 웹 사이트가 성공적으로 열렸습니다.
Nginx가 PHP-FPM에 연결되지 않은 것 같은데 무엇이 문제인가요? 5.3.29에서는 Unix 소켓 연결 방법이 제거되었나요? 업데이트 로그를 확인해 보니 관련 프로젝트가 없는 것 같아요.
Nginx와 PHP-FPM의 구성 파일을 다시 변경했습니다.
PHP-FPM 구성 파일에서:
듣기 = /tmp/php-cgi.sock
Nginx 구성 파일에서:
fastcgi_pass unix:/tmp/php-cgi.sock;
서비스를 다시 시작하고 즉시 502를 다시 가져옵니다.
우선 권한을 확인해볼까 하는 생각이 들었기 때문에 아무 말도 없이 PHP-FPM의 sock 파일의 권한을 777로 변경해 봤습니다.
chmod 777 /tmp/php-cgi.sock
웹페이지를 직접 열면 열 수 있어요!
좋아요, 권한 문제입니다. 서비스를 다시 시작하고 php-cgi.sock의 권한을 확인하세요
-rwx------.1 루트 루트 663 9월 18일 00:16 php-cgi.sock
이것. . . 그 이유는 매우 분명합니다. Nginx가 PHP-FPM에 연결할 수 없는 것은 당연합니다. php-cgi.sock의 권한은 실제로 700입니다.
그러나 여기에 질문이 있습니다. 왜 동일한 컴파일 및 구성 프로세스가 5.3.28 이전 버전에서 잘 작동합니까? 5.3.29로 업그레이드되지 않은 다른 서버를 확인했습니다:
srw-rw-rw- 1 루트 루트 0 9월 16일 21:11 php-cgi.sock
권한이 666인 것을 확인했는데... 이해할 수 없습니다... 왜 5.3.28의 기본 권한 구성은 666인데 5.3.29에서는 700이 되나요?
해결책을 찾으려면 PHP 문서를 확인하세요
PHP-FPM에 구성 파일을 추가합니다. 처음 두 항목은 php-cgi.sock의 소유자 및 사용자 그룹을 지정하는 것이고 마지막 항목은 파일 권한을 지정하는 것입니다.
Listen.owner = www
Listen.group = www
Listen.mode = 0666
서비스를 다시 시작하면 문제가 해결됩니다.