일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 다날
- 플로티노스
- 크세노크라테스
- mysl
- A2000UA
- 아낙시만드로스
- httpd
- RaiDrive
- 알키비아데스
- 소도마
- Server
- NetDrive
- short_open_tag
- 서버
- 윈도우10
- 아베로에스
- 프톨레 마이오스
- 고르기아스
- php
- bridged
- 아이스키네스
- 아낙사고라스
- ExpanDrive
- 피론
- 디아고라스
- PG
- 아리스티포스
- CentOS
- 히파티아
- VMware
- Today
- Total
개발자의 하루
APM설치-Apache (CentOS 6.9) 본문
하이엔드급이 아닌 일반적인 사이트에서 자주 사용하는 웹서버는 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 |