[Nginx] open socket #3 left in connection 4 에러
개요
PHP 토이프로젝트 개발 중 php-curl 패키지를 설치해야할 상황이 생겨
리눅스에서 php-curl 패키지를 설치 후 nginx restart를 했는데..
????
갑자기 잘 되던 프로젝트가 404를 내뱉으면서 먹통이 되어버렸다.
원인
매우 당황스러웠지만 뭐가 문제일까 곰곰히 생각을 해보았다.
- curl 패키지 설치가 잘못됐나..?
- nginx 설정을 잘못만졌나? ( 근데 기억으로는 가장초반에 빼고 설정파일을 만진 기억이 없었다. )
- php-fpm이 망가졌나..?
- 뭐지뭐지뭐지뭐지뭐지뭐지주짐우밎오;롲디;롲미;롲ㄷ;ㅣ롲ㅁ;ㅣ롲;ㅑ리ㅗ;ㅣ
그래서 구글링을 하면서 해외, 국내 자료를 싹 다 뒤져가며 해결을 하려해봤다.
2021/10/27 10:14:17 [alert] 2225#2225: *35 open socket #3 left in connection 4
2021/10/27 10:14:17 [alert] 2225#2225: aborting
먼저 이 오류 자체의 뜻은 "소켓이 연결4에 남아있다." 라는 뜻인데..
그래서 소켓쪽이 잘못됐나? 하고 PHP에서 소켓을 담당하는 쪽이 망가진건가.. 싶어서
- php 재설치
- php-fpm 재설치
- php-curl 삭제
- php-curl 재설치
위 4가지를 해보고 nginx를 껐다 켜봐도 되지 않았다.
그래서 결국 nginx설정파일을 건드리기로 했다.
▼ 프로젝트 가장 초기에 nginx 설정을 건드렸던 부분은 아래 부분이다. ▼
location / {
}
여기서 요청 URL을 다른 서버로 트래픽을 전송하는데, 이 부분을 처음에는
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri index.php$is_args$args;
# rewrite ^(.*)$ /index.php?url=$1;
}
이런식으로 작성을 했었는데, 사실 Nginx 설정 관련한 부분은 프로젝트 세팅을 할 때 다른 포스팅을 참고해서 했던거라
정확히 이게 어떤 의미를 갖는지는 아직은 잘 모르겠다..
일단 뭐라도 해보자라는 생각으로 / 도 넣어보고 args도 바꿔보고.. 해서 결국
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?q=$uri&$args;
# rewrite ^(.*)$ /index.php?url=$1;
}
이렇게 바꿔봤는데 페이지 자체는 404가 뜨지않고 접속이 잘 된다!!!
그래서 안도의 한숨을 내쉬고 다시 테스트를 해보는데..
DB와 연관이 되어있는 모든 기능 자체가 에러를 내뱉는다.
이정도까지 왔으면 트러블슈팅을 하면 해결할 수 있을거라는 생각에 열심히 로그를 뒤져본 결과
php에서 mysqli 모듈을 못불러온다는 것을 파악했고 이 모듈들을 어떻게 하면 다시 불러올 수 있을지 자료를 찾아보았다.
결론부터 말하자면 php.ini 파일에서 모듈들을 불러오는 extension_dir 의 경로가 잘못 설정이 되어있던 것!
▲ 이렇게 되어 있어야하는게 맞는거였는데 ▲
▲ 이렇게 되어있었던 것! ▲
참고로 주석을 보면 알 수 있겠지만 아래 ext는 윈도우 기준인데 나의 OS는 리눅스였기 때문에 아래쪽이 아닌 위쪽 주석을 풀어줬어야 모듈들을 정상적으로 불러올 수 있었던 것이다.
결론
- 초기 프로젝트, 서버 세팅
- 설정파일 수정(Nginx, php.ini)
- Nginx 재시작
결국 초기 프로젝트를 세팅하고 잘되고 있던 와중에
내가 실수로 설정파일을 잘못만졌는데 그게 적용이 안되고 있었다가 이번에 재시작을 하고 나서 오류가 생겨버린 것!