본문 바로가기

Development/Servers

아파치 웹서버를 엔진엑스로 교체하기

## CENT OS 6 에 엔진엑스 설치


기존 APM 으로 돌아가던 사이트의 웹서버를 nginx 로 교체

정확히 테스트 하지 않았지만 반응속도 빨라진게 느껴진다. (기분 탓일 수도 있다)


`추가작업`


아파치에서 접속자의 IP 를 제대로 가져오지 못하는 문제가 있습니다. 하단에 추가 기록을 남김.



# 작업 목표 


웹서버 를 엔진엑스로 교체하고 기존 PHP 가 돌아가던 아파치를 그대로 프록시 서버로 사용.



# 작업 과정


1. 8080 포트 확인

netstat -tnl 


으로 8080 이 어떤 상태인지 확인


2. iptables 수정


vi /etc/sysconfig/iptables


필요한 포트를 열어주자


/etc/init.d/iptables restart


재시작해주고 열렸는지 확인


3. 라이브 서버라 웹페이지가 죽으면 곤란하기 때문에 8080 포트로 nginx 를 구동하고 임시 페이지들을 생성하여 테스트


4. nginx 의 리버스 프록싱이 잘되는지 서브도메인을 하나 따서 접속해본다


server_name nginx.testsite.com:8080;


proxy_pass http://testsite.com:80/;


  8080 도메인으로 접속했을 때 기존의 APM 으로 구동되던 80 포트 사이트가 정상접속해 줘야 다음으로 진행 가능하기 때문에 꼼꼼히 테스트...


5. 아파치의 포트를 변경해준다. 


listen 80 을 listen 8080 으로 변경 및 버추얼 호스트의 도메인에 8080 추가


# httpd.conf


Listen 8080

ServerName testsite.com:8080

NameVirtualHost *:8080


# vhost.conf


<VirtualHost *:8080>

ServerName onweekend.co.kr:8080

</VirtualHost>


6. 엔진엑스의 포트를 변경한다. 엔진엑스를 죽인다.


/etc/init.d/nginx stop


7. 재빠르게 두 서버를 시작 및 재시작 해준다.


/etc/init.d/httpd restart && /etc/init.d/nginx start


8. 테스트 좀 해보고 엔진엑스 튜닝(그냥 구굴링해서 정당히 세팅해주면 사이트가 빨라져보인다). 파일 오픈 리미트도 좀 더 늘려주면 좋다.

ulimit  -n 65536


9. 8080 테스트가 끝났으니 8080 포트를 닫아둔다.


10. 엔진엑스를 리버스프록시로 두다보니 아파치가 사용자의 IP 값을 정확히 가져오지 못하는 문제가 있음


리버스프록시에 대응하는 아파치 모듈을 추가해야 함. 보통 함께 컴파일 되지 않은 경우가 많음.


Cent 계열은 아래 링크를 참고

http://stderr.net/apache/rpaf/

http://thegioinguonmo.com/os/linux/howto-install-modrpaf-apache-22.html


우분투 계열은 아래 링크를 참고

http://chrismorris.org/passing-ip-from-nginx-to-apache/

http://www.daveperrett.com/articles/2009/08/10/passing-ips-to-apache-with-nginx-proxy/


소스를 받아 설치


wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

tar xvfz mod_rpaf-0.6.tar.gz

cd mod_rpaf-0.6

sed -ie 's/apxs2/apxs/' Makefile

make rpaf-2.0

make install-2.0


설치를 마치고 아파치 conf 를 수정

추가된 세팅 값은 하단에 기록


아파치를 리스타트 하고 아이피가 잘 들어오는지 확인    




엔진엑스 세팅값


노드 코드를 돌릴 때와 같은 방식으로 파라미터는 세팅하였다.

단, 기존 NAMED 버추얼 서버 세팅에서 메인 사이트만 로컬도메인으로 세팅하여 도메인 룩업 타임을 줄여보자라고 생각하여 메인 사이트는 로컬 도메인으로 프록시 세팅.

나머지 잡다한 서브도메인들은 그냥 사용하던 도메인+8080포트로 매핑


user  nginx;

worker_processes  4;


error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;



events {

        use epoll;

    worker_connections  2048;

}


http {

    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;


    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';


    #access_log  /var/log/nginx/access.log  main;

    access_log off;


    sendfile       on;

    tcp_nopush     on;


    keepalive_timeout  30;


    gzip  on;

    gzip_min_length 10240;

        gzip_proxied expired no-cache no-store private auth;

        gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;

        gzip_disable "MSIE [1-6]\.";


    include /etc/nginx/conf.d/*.conf;

}




# for legacy site damn it php


server {

    server_name testsite.com www.testsite.com;

    root        /home/testsite/major;


        location / {

                proxy_set_header X-Real-IP $remote_addr;

                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_set_header Host $http_host;

                proxy_set_header X-NginX-Proxy true;

                proxy_pass http://127.0.0.1:8080/;

                proxy_redirect off;

        }

}



server {

    server_name minor.testsite.com;

    root        /home/testsite/minor;


        location / {

                proxy_set_header X-Real-IP $remote_addr;

                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_set_header Host $http_host;

                proxy_set_header X-NginX-Proxy true;

                proxy_pass http://minor.testsite.com:8080/;

                proxy_redirect off;

        }

}



추가된 아파치 conf 세팅


# Use apache behind nginx proxy


LoadModule rpaf_module modules/mod_rpaf-2.0.so


RPAFenable On

RPAFsethostname On

RPAFproxy_ips 127.0.0.1

RPAFheader X-Forwarded-For




'Development > Servers' 카테고리의 다른 글

프로세스 관리  (0) 2013.08.04
Nginx 프록시 모드 세팅 점검  (0) 2013.05.15
로컬 개발환경 세팅  (0) 2013.05.02
엔진엑스nginx 에 SSL 세팅하기  (0) 2013.03.19
mongoDB 사용자 계정 관련  (0) 2013.02.13