본문 바로가기

카테고리 없음

웹 서버(NGINX)와 데이터베이스 서버(MYSQL) 독립 구성

반응형

*생활코딩의 "egoing"님의 강의를 참고하여 서버를 구성하려다가 계획을 바꾸어 구성한 서버 구축 방법이다.

(http://opentutorials.org/module/384/4332#config_example 中 3번 동영상 'TCP CONNECTION') 



왜 이런 방식으로 구성하는가에 대한 답변

TCP CONNECTION  OR  UPSTREAD MODULE  두가지 방식은

"독립된 웹서버"
한대는 NGINX, 한대는 PHP-FPM

->웹서버와 PHP가 동작하는 서버를 분리해서 웹서버가 더 많은 부하를 견뎌낼수 있다.


사진의 구성에서                                                                  [서버 환경]

1.NGINX + PHP-FPM                                                          NGINX

2.DATABASE (MYSQL)                                                        PHP5

로 변경하여 구성하였다. (두 대의 PC 서버 사용)                 MYSQL   



정말 많은 삽질을 하였다..(대략 10시간..-_-)

자세한 설정은 각자 찾아보는 것이 좋을 것 같다.

결과부터 이야기 하자면, 설정은 다음과 같다.

1. 웹서버에서 /etc/nginx/sites-available/default               ->  fastcgi_pass unix:/var/run/php5-fpm.sock; 기본방 
   식 설정
2. 디비서버에서 /etc/mysql/my.cnf                                ->  bind-address = 0.0.0.0 설정
                                                                                      db 포트는 기본값인 3306사용
3. 추가적으로 방화벽 예외 처리(ufw 명령어 사용)

추가적으로 원래 구상대로 구성 할 땐....(TCP CONNECTION)

1. 웹서버에서 /etc/nginx/sites-available/default               ->  fastcgi_pass를 php5-fpm서버의 ip로 해주어야 한다.
2. php5-fpm서버에서 /etc/php5/fpm/pool.d/www.conf    ->  listen 설정을 자신의 ip로 해주어야 한다.

1,2번을 통하여 웹서버가 php엔진에 작업처리를 위임할 수 있게 한다. 
클라이언트가 접속하는 서버는 웹서버 주소이지만 실제 php파일은 php5-fpm서버에 있는 것.




파란 박스에 있는 설정이 현재 내가 구축한 서버환경이다. 정말 별 것 없어보이지만 그렇지 않다는 것을 오늘에서야 깨달았다. 
설정값들이 의미하는 바와, 변경했을 때 생기던 여러가지 문제들.. 

(데이터베이스 sock(2) 오류..) 을 다시 잡는 데 많은 시간을 투자하였다.  기존에 코딩하였던 PHP파일로 테스트를 하다가 잘못된 SQL문을 사용했기 때문에 GET/POST방식으로 데이터베이스와 연동할 때마다 DB SOCK(2)에러가 발생하는 신박한 일이...
이것은 PHP를 바르게 고치고 데이터베이스 설정 또한 기존의 되던 설정값으로 복구 한 후에 sudo service mysql restart 와 sudo /etc/init.d/mysql restart 로 해결

error.log에 upstream 어쩌고 하는 에러메시지가 출력 될 경우 그것은 nginx와 php5-fpm의 ip/port 할당이 잘못되었을 확률이 높다. 적어도 나는 그랬다. nginx와 php5-fpm의 포트번호를 같게 지정해줘서...-ㅁ- (삽질의 날)
    







반응형