에러모음

[Nginx] open socket #3 left in connection 4 에러

정민교 2021. 11. 11. 13:46

개요

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에서 소켓을 담당하는 쪽이 망가진건가.. 싶어서

  1. php 재설치
  2. php-fpm 재설치
  3. php-curl 삭제
  4. php-curl 재설치

위 4가지를 해보고 nginx를 껐다 켜봐도 되지 않았다.

그래서 결국 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는 리눅스였기 때문에 아래쪽이 아닌 위쪽 주석을 풀어줬어야 모듈들을 정상적으로 불러올 수 있었던 것이다.


결론

  1. 초기 프로젝트, 서버 세팅
  2. 설정파일 수정(Nginx, php.ini)
  3. Nginx 재시작

결국 초기 프로젝트를 세팅하고 잘되고 있던 와중에

내가 실수로 설정파일을 잘못만졌는데 그게 적용이 안되고 있었다가 이번에 재시작을 하고 나서 오류가 생겨버린 것!