개발자의 하루

APM설치-Apache (CentOS 6.9) 본문

Server

APM설치-Apache (CentOS 6.9)

단독질주 2017. 6. 2. 13:30
반응형



하이엔드급이 아닌 일반적인 사이트에서 자주 사용하는 웹서버는 Apache, Lighttpd, Nginx 등이 있습니다.

최근에는 node.js를 이용해 네트워크 응용프로그램 웹서버를 사용하기도 합니다.


https://news.netcraft.com/archives/category/web-server-survey/


netcraft 웹서버 통계를 보면 꾸준하게 사랑받던 apache는 점점 사용이 줄어드는 방면 Nginx는 꾸준하게 사랑받고 있는 듯 합니다. 

Nginx 설치 및 운영은 나중에 포스팅하고 오늘은 APM에 맞게 apahce를 설치하도록 하겠습니다.



1. Apache 설치

[root@testserver ~]# yum install httpd -y    // apache 설치

Loaded plugins: fastestmirror

Setting up Install Process

Loading mirror speeds from cached hostfile

 * base: centos.mirror.cdnetworks.com

 * extras: centos.mirror.cdnetworks.com

 * updates: centos.mirror.cdnetworks.com

base                                                                                                         | 3.7 kB     00:00     

extras                                                                                                       | 3.4 kB     00:00     

updates                                                                                                      | 3.4 kB     00:00     

Resolving Dependencies

--> Running transaction check

---> Package httpd.x86_64 0:2.2.15-59.el6.centos will be installed

--> Processing Dependency: httpd-tools = 2.2.15-59.el6.centos for package: httpd-2.2.15-59.el6.centos.x86_64

--> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-59.el6.centos.x86_64

--> Processing Dependency: /etc/mime.types for package: httpd-2.2.15-59.el6.centos.x86_64

--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.2.15-59.el6.centos.x86_64

--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.2.15-59.el6.centos.x86_64

--> Running transaction check

---> Package apr.x86_64 0:1.3.9-5.el6_2 will be installed

---> Package apr-util.x86_64 0:1.3.9-3.el6_0.1 will be installed

---> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will be installed

---> Package httpd-tools.x86_64 0:2.2.15-59.el6.centos will be installed

---> Package mailcap.noarch 0:2.1.31-2.el6 will be installed

--> Finished Dependency Resolution


Dependencies Resolved


====================================================================================================================================

 Package                          Arch                      Version                                   Repository               Size

====================================================================================================================================

Installing:

 httpd                            x86_64                    2.2.15-59.el6.centos                      base                    834 k

Installing for dependencies:

 apr                              x86_64                    1.3.9-5.el6_2                             base                    123 k

 apr-util                         x86_64                    1.3.9-3.el6_0.1                           base                     87 k

 apr-util-ldap                    x86_64                    1.3.9-3.el6_0.1                           base                     15 k

 httpd-tools                      x86_64                    2.2.15-59.el6.centos                      base                     79 k

 mailcap                          noarch                    2.1.31-2.el6                              base                     27 k


Transaction Summary

====================================================================================================================================

Install       6 Package(s)


Total download size: 1.1 M

Installed size: 3.7 M

Downloading Packages:

(1/6): apr-1.3.9-5.el6_2.x86_64.rpm                                                                          | 123 kB     00:00     

(2/6): apr-util-1.3.9-3.el6_0.1.x86_64.rpm                                                                   |  87 kB     00:00     

(3/6): apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm                                                              |  15 kB     00:00     

(4/6): httpd-2.2.15-59.el6.centos.x86_64.rpm                                                                 | 834 kB     00:00     

(5/6): httpd-tools-2.2.15-59.el6.centos.x86_64.rpm                                                           |  79 kB     00:00     

(6/6): mailcap-2.1.31-2.el6.noarch.rpm                                                                       |  27 kB     00:00     

------------------------------------------------------------------------------------------------------------------------------------

Total                                                                                               2.2 MB/s | 1.1 MB     00:00     

Running rpm_check_debug

Running Transaction Test

Transaction Test Succeeded

Running Transaction

  Installing : apr-1.3.9-5.el6_2.x86_64                                                                                         1/6 

  Installing : apr-util-1.3.9-3.el6_0.1.x86_64                                                                                  2/6 

  Installing : httpd-tools-2.2.15-59.el6.centos.x86_64                                                                          3/6 

  Installing : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                                                                             4/6 

  Installing : mailcap-2.1.31-2.el6.noarch                                                                                      5/6 

  Installing : httpd-2.2.15-59.el6.centos.x86_64                                                                                6/6 

  Verifying  : httpd-tools-2.2.15-59.el6.centos.x86_64                                                                          1/6 

  Verifying  : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                                                                             2/6 

  Verifying  : httpd-2.2.15-59.el6.centos.x86_64                                                                                3/6 

  Verifying  : apr-1.3.9-5.el6_2.x86_64                                                                                         4/6 

  Verifying  : mailcap-2.1.31-2.el6.noarch                                                                                      5/6 

  Verifying  : apr-util-1.3.9-3.el6_0.1.x86_64                                                                                  6/6 


Installed:

  httpd.x86_64 0:2.2.15-59.el6.centos                                                                                               


Dependency Installed:

  apr.x86_64 0:1.3.9-5.el6_2                     apr-util.x86_64 0:1.3.9-3.el6_0.1      apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1     

  httpd-tools.x86_64 0:2.2.15-59.el6.centos      mailcap.noarch 0:2.1.31-2.el6         


Complete!

[root@testserver ~]# chkconfig httpd on    // 부팅시 자동 시작

CentOS 6.9에서는 v2.2.15가 설치 되네요.


[root@testserver ~]# sed -i "s/ServerTokens OS/ServerTokens Prod/g" /etc/httpd/conf/httpd.conf

[root@testserver ~]# sed -i "s/ServerSignature On/ServerSignature Off/g" /etc/httpd/conf/httpd.conf

웹서버 종류나 버전이 공개되면 보안에 위협이 될수 있으니 숨기는 것이 좋겠죠.


설치가 끝났으니 일단 실행을 해보시다.

[root@testserver ~]# service httpd start

httpd (을)를 시작 중 : httpd: apr_sockaddr_info_get() failed for testserver

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

                                                           [  OK  ]

[root@testserver ~]# netstat -nlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      4203/mysqld         

tcp        0      0 0.0.0.0:12345               0.0.0.0:*                   LISTEN      4249/sshd           

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1280/sendmail       

tcp        0      0 :::80                       :::*                        LISTEN      5921/httpd          

tcp        0      0 :::12345                    :::*                        LISTEN      4249/sshd           

Active UNIX domain sockets (only servers)

Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path

unix  2      [ ACC ]     STREAM     LISTENING     27547  4203/mysqld         /var/lib/mysql/mysql.sock

unix  2      [ ACC ]     STREAM     LISTENING     10043  1/init              @/com/ubuntu/upstart

unix  2      [ ACC ]     STREAM     LISTENING     12647  1255/saslauthd      /var/run/saslauthd/mux

unix  2      [ ACC ]     STREAM     LISTENING     16959  1971/sshd           /tmp/ssh-Owtekq1971/agent.1971

unix  2      [ ACC ]     STREAM     LISTENING     27918  4320/sshd           /tmp/ssh-gxXkel4320/agent.4320

뭔가 에러는 뜨지만 80포트는 잘 뜨고 잘 실행됩니다.



브라우저에서 apache가 설치된 서버 주소를 치면 정상적으로 apache가 뜨는 모습이 확인 가능합니다.


그럼 아까 데몬 실행시 발생했던 에러 아니 에러를 잡도록 하겠습니다.


1. apr_sockaddr_info_get()

이는 호스트에 도메인이 등록되어 있지 않아 발생되는 에러입니다.

[root@testserver ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 testserver

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

xxx.xxx.xxx.xxx abc.com

127.0.0.1 뒤에 해당 서버 호스트를 추가 하면 쉽게 해결됩니다.

또한 공인 IP가 있고 연결할 도메인이 있다면 아래쪽 줄에 xxx.xxx.xxx.xxx abc.com 추가 해주면 더 좋습니다.


[root@testserver ~]# service httpd restart

httpd 를 정지 중:                                          [  OK  ]

httpd (을)를 시작 중 : httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName                                        [  OK  ]

apr_sockaddr_info_get() 에러는 잡았고 다음 에러를 잡아줍니다.


2. Could not reliably determine the server's fully qualified domain name, using 127.0.0.1

이는 httpd.conf 환경 파일에서 ServerName이 주석처리 되어 발생되는 현상입니다.


httpd 환경 파일 위치 : /etc/httpd/conf/httpd.conf


[root@testserver ~]# ll /etc/httpd/

합계 16

drwxr-xr-x.  4 root root 4096 2017-06-02 11:29 ./

drwxr-xr-x. 68 root root 4096 2017-06-02 11:50 ../

drwxr-xr-x.  2 root root 4096 2017-06-02 11:34 conf/

drwxr-xr-x.  2 root root 4096 2017-06-02 11:29 conf.d/

lrwxrwxrwx.  1 root root   19 2017-06-02 11:29 logs -> ../../var/log/httpd/

lrwxrwxrwx.  1 root root   29 2017-06-02 11:29 modules -> ../../usr/lib64/httpd/modules/

lrwxrwxrwx.  1 root root   19 2017-06-02 11:29 run -> ../../var/run/httpd/

[root@testserver ~]# vi /etc/httpd/conf/httpd.conf

...

...

ServerName localhost

...

...

기본 환경파일에서 ServerName을 찾아 주석을 해제하고 해당 서버의 호스트나 실제 도메인이 있으면 도메인을 입력 후 저장합니다.


[root@testserver ~]# service httpd restart

httpd 를 중지 중 :                                          [  OK  ]

httpd (을)를 시작 중 :                                      [  OK  ]

에러 없이 잘 작동됩니다~



2. 가상 호스트 만들기

가상 호스트를 만들기 전 httpd 기본 디렉토리는 "/var/www/html" 로 되어 있습니다.

기본을 두고 사용하셔도 되지만 해당 부분을 그대로 부면 웹서버 종류나 버전등이 고스란히 노출되기 때문에 조금 수정해 줍니다.

[root@testserver ~]# echo "" > /var/www/html/index.html

빈 index.html파일을 만들어 기본 apache 페이지를 숨겨줍니다.


직접 환경파일에 작성해도 되지만 가상 호스트 파일을 만들어 관리해 주는 편이 관리가 용이합니다.

[root@testserver ~]# vi /etc/httpd/conf.d/vhost.conf

NameVirtualHost *


<VirtualHost *>

ServerAdmin abc@abc.com    // 관리자 e-mail주소

DocumentRoot /work/index    // 홈디렉토리

ServerName abc.com    // 접속 도메인

ErrorLog logs/abc.com_error_log    // 에러로그

CustomLog logs/abc.com_access_log common    // 엑세스 로그

</VirtualHost>


<VirtualHost *>

ServerAdmin abc@abc.com

DocumentRoot /work/secure/www

<Directory /work/secure/www>

AllowOverride none

Order allow,deny

Allow from 192.168.29.100    // 특정 IP에서만 접근 가능

SecRuleEngine Off    // 추후 설치할 ModSecurity 활동 금지 (주의) ModSecurity가 설치 전이면 삭제합니다.

</Directory>

ServerName secure.abc.com

ErrorLog logs/secure_error_log

CustomLog logs/secure_access_log common

</VirtualHost>


<VirtualHost *>

ServerAdmin abc@abc.com

DocumentRoot /work/homepage/www

ServerName www.abc.com

Serveralias abc.com    // abc.com으로 접근시 www.abc.com과 동일하게 처리


AddOutputFilterByType DEFLATE text/html    // AddOutputFilterByType gzip을 이용해 압축 전송

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE application/x-httpd-php

AddOutputFilterByType DEFLATE application/x-javascript


ErrorLog logs/homepage_error_log

CustomLog logs/homepage_error_log_access_log common

</VirtualHost>


<IfModule mod_expires.c>

ExpiresActive On


ExpiresByType image/bmp "access plus 3 month"    // 각각의 확장자에 따른 캐시 설정 

ExpiresByType image/cgm "access plus 3 month"

ExpiresByType image/gif "access plus 3 month"

ExpiresByType image/jpeg "access plus 3 month"

ExpiresByType image/png "access plus 3 month"

ExpiresByType image/jpeg "access plus 3 month"

ExpiresByType image/tiff "access plus 3 month"

ExpiresByType image/png "access plus 3 month"


ExpiresByType video/mpeg "access plus 1 month"

ExpiresByType video/quicktime "access plus 1 month"

ExpiresByType video/x-msvideo "access plus 1 month"

ExpiresByType video/x-ms-wmv "access plus 1 month"


ExpiresByType audio/basic "access plus 1 month"

ExpiresByType audio/midi "access plus 1 month"

ExpiresByType audio/mpeg "access plus 1 month"

ExpiresByType audio/x-aiff "access plus 1 month"

ExpiresByType audio/x-mpegurl "access plus 1 month"

ExpiresByType audio/x-pn-realaudio "access plus 1 month"

ExpiresByType audio/x-wav  "access plus 1 month"


ExpiresByType application/x-javascript "access plus 3 month"

ExpiresByType text/css "access plus 3 month"

</IfModule>

가상 호스트가 작동하면 ip접근시 제일 첫번째 VirtualHost 로 접근하게 됩니다.


위 샘플은 3개의 도메인에 대한 가상호스트를 설정한 것입니다. 각가 자신의 서버에 맞게 수정하여 사용하시면 됩니다.

SecRuleEngine 옵션의 경우 ModSecurity가 설치되지 않았다면 삭제해주세요 (추후 ModSecurity 설치 방법을 포스팅할 예정입니다)


가상호스트 환경파일 작업이 끝났으면 httpd를 재시작하여 적용하시면 됩니다.

재시작 전 혹시나 문법이 틀리거나 잘못된 설정은 httpd -t 를 이용하여 체크해줍니다.


[root@testserver ~]# httpd -t

Syntax OK

[root@testserver ~]# service httpd restart

httpd 를 중지 중 :                                          [  OK  ]

httpd (을)를 시작 중 :                                      [  OK  ]


실제 운영 중인 서버에서 재시작이 필요한 경우 httpd는 2가지 방식을 제공합니다.

[root@testserver ~]# service httpd restart

httpd 를 중지 중 :                                          [  OK  ]

httpd (을)를 시작 중 :                                      [  OK  ]

[root@testserver ~]# service httpd graceful

[root@testserver ~]# 



Tip. httpd 재시작


service httpd restart    : 모든 httpd 프로세서를 죽이고 재시작 (kill -HUP)

service httpd graceful    : 현재 접속된 컨넥션은 유지하고 그외 httpd 모든 프로세스를 죽이고 재시작 (kill -USR1)

서비스 운영중에 restart를 해버리면 완벽한 재시작은 되지만 서비스가 잠시 중지 되고 세션이 끊겨 로그아웃이 될수 있습니다.

graceful로 해버리면 세션이 그대로 살아 있어 사용자 입장에서는 서비스 재시작을 알기 힘듭니다.


다만 몇몇 모듈이나 설정 파일은 graceful로 적용안되는 경우도 종종 있습니다.





반응형

'Server' 카테고리의 다른 글

.htaccess: RewriteEngine not allowed here  (0) 2017.06.08
예전 PHP 파일 다운받기  (0) 2017.06.05
robots.txt를 쉽게 만드는 법  (0) 2017.06.01
APM설치-MySQL (CentOS 6.9)  (0) 2017.06.01
logwatch 설치 - 시스템 로그  (0) 2017.05.31