아파치 (Apache )2015. 12. 25. 00:11

♣ 아파치 접속이 느려졌을때 일반적으로 참고할 부분
 
1.해당 서버로 ping test를 한다.
time 값이 20이하면 네트워크는 이상이 없다.
(참고) ping test시 ping이 안 될 경우도 있다.
이럴때는 네트워크 이상일 수도 있지만 해당서버에서 ICMP를 차단해 놓았기 때문일 수도
있다.
이런 경우에는 서버관리자에게 문의해 본다.
예) ping yahoo.co.kr

 
2. 아파치 웹로그를 살펴본다
경로 : /usr/local/apache/logs

 
웹로그는 최대 생성할 수 있는 크기가 2G이며, 웹 로그의 크기가 커질수록 로그 파일을 읽어서 제일 하단에 로그를 쌓아야 하므로 로그파일이 클수록 웹 접속속도가 떨어지며, 사이트 접속자가 많은 경우에는 아예 웹사이트 자체에 아예 접속이 되지 않기도 한다.
따라서, 정기적으로 아파치 로그파일을 관리해주어야 한다.
 
⑴ 로그 파일이 쌓였을 때 삭제하는 방법.

 
? 명령어 : rm-rf access_log -> access_log 파일을 삭제.
        rm-rf error_log  -> error_log 파일을 삭제.

 
⑵ 아파치 로그파일이 쌓이지 않게 설정하는 법
로그파일이 쌓이지 않게 설정하기 전에 먼저 아파치 로그파일을 삭제 후 설정한다.
ln -s /dev/null /usr/local/apache/logs/access_log
ln -s /dev/null /usr/local/apache/logs/error_log

 
수정 후 아파치를 다시 시작해 준다.
 명령어 : apachectl restart

 
3. 현재 80번 포트를 사용해서 웹에 접속중인 사용자들의 현황을 살펴본다.
netstat -nap | grep :80 | grep EST | wc -l  등의 명령을 사용하면 현재 웹에 접속되어 있는 프로세서 수를 확인할 수 있다. 이 수가 httpd.conf에서 설정한 Maxclient와 가깝거나 혹은 더 많지는 않은지 살펴본다.
 
max client 256 -> 1024 (아파치 동시접속자 수를 256에서 1024로 늘림)

 

수정후 아파치를 다시 시작해 준다.
 
apachectl restart
 
httpd -V 로 확인 (정상적으로 수정되었는지 확인)

4. top 명령으로 현재 cpu의 사용률이나, 메모리 사용량 등을 체크해본다.
아파치 데몬으로 오랜시간 동안 접속이 유지되어있는 좀비 프로세서가 있는지 확인하다.
있을 경우 해당 프로세서를 강제 종료한다.
명령어 : top
빠져 나올 때 : Ctrl 키 + c 키

프로세서 강제 종료하는 법
명령어 : kill -KILL ‘PID Number’

 
예) top 프로세서를 강제종료 할 경우.
 kill -KILL 13917

 
※ 위의 점검을 위해서는 기본적으로 아파치 데몬 실행명령어에 익숙해야 한다.
? apachectl 이란?
apachectl - 아파치 웹서버 조절 인터페이스.
apachectl은 아파치 하이퍼텍스트 전송 프로토콜 (HTTP) 서버의 앞단이다.
이 프로그램은 관리자가 아파치 httpd 데몬을 조정하도록 돕는다.
 
apachectl command
 
옵션
-start
아파치 httpd 데몬을 시작한다. 이미 실행중이라면 오류를 낸다. apachectl -k start와 같다.
명령어 : apachectl start

 
-stop
아파치 httpd 데몬을 중단한다. apachectl -k stop과 같다.
명령어 : apachectl stop

 
 
 
-restart
아파치 httpd 데몬을 재시작한다. 데몬이 실행중이 아니라면, 시작한다. 데몬이 재시작시 실패하지 않음을 확인하기 위해 재시작 전에 자동으로 configtest 명령과 같이 설정파일을 검사한다. apachectl -k restart와 같다.
 
명령어 : apachectl restart

 
-graceful
아파치 httpd 데몬을 점잖게(gracefully) 재시작한다. 데몬이 실행중이 아니라면, 시작한다. 일반적인 재시작과 달리 현재 열려있는 연결을 끊지 않는다. 또, 이전 로그파일을 즉시 닫지 않는다. 즉, 로그순환 스크립트에서 이 명령을 사용한다면, 이전 로그파일을 처리하기전에 로그파일을 닫혔음을 보장하기 위해 상당히 기다려야 한다. 아파치가 재시작시 실패하지 않음을 확인하기위해 재시작 전에 자동으로 configtest 명령과 같이 설정파일을 검사한다. apachectl -k graceful과 같다.
 
명령어 : apachectl graceful

 
 
-configtest
설정파일의 문법을 검사한다. 설정파일을 읽고 Syntax Ok 혹은 특정 설정오류에 대한 자세한 정보를 알려준다. apachectl -t와 같다.
아래 옵션을 사용할 수 있지만, 앞으로 사라질 것이다.
 
명령어 : apachectl configtest

 
- help : 옵션에 대한 도움말을 보여준다.

Posted by 랩퍼우
아파치 (Apache )2015. 12. 25. 00:11

httpd.conf 파일에서 브라우저 접속 제한하기 ( Directory 지시자 )

[ 개 요 ]

일반적으로 apache 웹서버를 운영하다보면 관리자페이지와 같은 관리자 만이 접속을 해야한다
거나 회사내에서만 접속을 해야만 하는 웹사이트가 존재할 수있습니다. 이때 간단하게 사용할
수 있는 것이 httpd.conf 파일을 수정하여 접속을 제한 하고자하는 사이트의 디렉토리를 설정할
수 있습니다.

만약, 접속을 제한하고자하는 사이트의 웹문서 디렉토리가 /usr/local/apache/htdocs/admin 이
란 디렉토리라고 가정하겠습니다.

[ 설 정 ]

[root@soma]# vi /usr/local/apache/conf/httpd.conf

<Directory /usr/local/apache/htdocs/admin/>

     Options FollowSymLinks includes ExecCGI
     AllowOverride  AuthConfig
     Order deny,allow
     deny from all
     allow from  192.168.0.123

</Directory>

[ 설 명 ]

다른 지시어에대한 설명은 생략하도록 하겠습니다.

     Order : 정책의 순서를 나타낸다.

     Order deny,allow : deny 정책을 먼저 수행하고 allow 정책을 수행한다.

     deny from : 접속을 제한할 대상을 설정한다.

     deny from all : 외부에서의 모든 접속을 제한한다.
     deny from 192.168.0.111 : 192.168.0.111으로 부터의 접근 제한
     deny from resoma.com : redsoma.com 으로 부터의 접근 제한
     deny from 192.168.0.0/255.255.255.0 : 192.168.0 의 네트워크대에서의 접속 제한 

     allow from : 접속을 허용할 대상을 정의한다.

     allow from 192.168.0.123 : 192.168.0.123 이란 아이피를 가진곳에서만 접속을 허용한다.
     allow from all : 외부에서의 모든 접속을 허용한다.
     allow from 192.168.0.111 : 192.168.0.111으로 부터의 접근 허용
     allow from resoma.com : redsoma.com 으로 부터의 접근 허용
     allow from 192.168.0.0/255.255.255.0 : 192.168.0 의 네트워크대에서의 접속 허용

Posted by 랩퍼우
아파치 (Apache )2015. 12. 25. 00:10

apache 1.3.x 버전 대를 제외한 (1.3은 max값 1024으로 설정)

apache 2.0.x, apache 2.2.x 에서는 max client 가 기본설정값인 150 으로 설정되어 있습니다.

따라서 max 값을 변경하고자 할 경우 다음과 같이 환경설정 파일에서 수정하면 됩니다.

※ apache 2.0.x, 2.2.x 서버는 worker 방식으로 동작하며, 컴파일시 자동으로 max 값은 패치되어 있습니다.


1. apache 2.0.x

/usr/local/apache/conf/httpd.conf 에서 수정합니다.


〈IfModule worker.c>
StartServers         2
MaxClients         150 -> 1024 or 2048 값으로 수정 (max: 2048)
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25 -> 64 값으로 수정
MaxRequestsPerChild  0
〈/IfModule>

수정후 apache 데몬 재시작


2. apache 2.2.x

먼저 /usr/local/apache/conf/httpd.conf 에서
419번째 줄쯤 Include conf/extra/httpd-mpm.conf 주석해제후 저장합니다.

/usr/local/apache/conf/extra/httpd-mpm.conf 수정합니다.


〈IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150 -> 1024 or 2048 값으로 수정 (max: 2048)
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25 -> 64 값으로 수정
    MaxRequestsPerChild   0
〈/IfModule>


수정후 apache 데몬 재시작

Posted by 랩퍼우
아파치 (Apache )2015. 12. 25. 00:09

윈도우 환경에 APMSETUP 을 설치해서 운영하는 서버에서 나타날수 있는 문제입니다.

 

증상 : 사이트가 매우 느려지는 현상. Apache 를 재시작해도 얼마 가지못해서 느려짐.

 

로그 : D:\neulwon\services\APM_Setup\Server\Apache\logs\error.log

[warn] (OS 64)지정된 네트워크 이름을 더 이상 사용할 수 없습니다.  : winnt_accept: Asynchronous AcceptEx failed.

 

해결 : 해외 사이트나 국내 사이트 어디를 둘러보아도 마땅히 해결책이 없으며 아래와 같은 원인만 찾아볼수 있습니다.

 

CPU 점유율과 느린 반응의 원인이 MS 환경 (Win32- xp,2000 서버) 의 멀티 프로세스 모듈과 어우러진 아파치의 버그로 MS 계열에서만 나타나는것으로 보여집니다.
'PHP와 Apache2.2를 WIndows기반하에서 운영할 경우에 발생할 수 있는 Bug'
 

해결책으로는 httpd.conf 파일에 아래 설정을 해놓으라고 하지만 에러 로그만 나타나지 않을뿐 현상은 해결되지 않음.

D:\neulwon\services\APM_Setup\Server\Apache\conf\httpd.conf

 

<IFModule mpm_winnt_module>
Win32DisableAcceptEx
</IFModule>

 

제 경험으로는 위 증상이 발견된 서버를 점검했을때 access 로그가 많아서 (당시 4.8G) 이름을 바꿔주고

아파치를 재시작하여 새파일로 생성하니 위와 같은 증상이 없어졌습니다.

> access 로그 삭제

Posted by 랩퍼우
아파치 (Apache )2015. 12. 25. 00:09

아파치 버전에 따라


For 2.2:
 Win32DisableAcceptEx
 EnableSendfile off
 EnableMMAP off


For 2.4:
 AcceptFilter http none
 AcceptFilter https none
 EnableSendfile off
 EnableMMAP off

Posted by 랩퍼우
아파치 (Apache )2015. 12. 25. 00:08

[Apache] httpd.conf - 주소창 디렉토리 직접 접근 설정

Description: 아파치가 접근할 수 있는 각 디렉토리에 대하여 어떤 서비스와 기능을 허용할 것인지 거부할 것인지 여부를 설정할 수 있다. 디렉토리에 대한 설정 내용은 그 하부 디렉토리에도 영향을 미친다.
Syntax: <Directory directory-path> ... </Directory>


 <Directory> tag에 의하여 각 directory마다 적절하게 permission을 걸수가 있다.

<Directory />
 Options FollowSymLinks
 AllowOverride None
 </Directory>

 DocumentRoot 값으로 변경

<Directory "/home/httpd/html">

지정할수 있는  옵션의 예이다.
None 어떤 옵션도 이용할 수 없다.
 All 지정한 directory에서 모든 명령을 이용할 수 있다.
Indexes URL에 지정된 디렉토리에 (index.html 같은) 지정된 파일이 없을 경우 디렉토리의 파일 목록을 보여주는 옵션.
Includes 서버측의 추가적인 정보를 제공할 수 있게 한다.
IncludesNoExec 서버측의 추가적인 정보를 제공할 수 있게 하지만, 어떠한 실행 파일을 실행하는 것을 방지한다. 
FollowSymLinks  디렉토리상의 심볼릭 링크를 사용가능하게 한다.
ExecCGI CGI 스크립트를 실행할 수 있게 한다.
MultiViews  All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용한다.

AllowOverride None
.htaccess파일은 서버의 각 디렉토리에 만들어서 각 디렉토리에 대한 접근을 제어하기 위한 것으로 디렉토리에 .htaccess파일이 있으면, 서버 전체에 작용하는 access.conf 보다 우선권을 가진다.

.htaccess파일에 대한 Override에 대한 옵션이다.
None .htaccess파일을 읽을 수 없게 한다.
All 모든 지정에 대해 가능하게 한다.
Options 규정된 디렉토리 형식을 콘트롤하는 지정의 사용을 허락한다.
FileInfo 문서형식을 콘트롤하는 지정의 사용을 허용한다.
AuthConfig  사용자 인증 지정의 사용을 허용한다. 사용자 인증 변수를 사용한다.
Limit 호스트 접근을 콘트롤하는 지정을 허용한다.

서버로부터 자료를 얻어갈 수 있는 위치를 제어한다.
Order allow,deny
 Allow from all
 Deny from env=no_access

Limit에 관련된 부분을 설정을 한다.

order : 서버가 access control을 수행하는 순서를 나타낸다. 여기서는 allow기능을 먼저 수행하고, deny기능을 수행하라는 것이다.

deny, allow - deny 지시자 부터 검사하고 allow 지시자를 검사
allow, deny - allow 지시자 부터 검사하고 deny 지시자를 검사
mutual-failure - allow목록에 없는 모든 host에게 접속을 거부

allow from : 나열되는 주소들에 대한 access control을 가능하게 한다. 
사용 가능한 주소는 도메인 네임, 호스트 이름 주소, 호스트 ip 주소, ip 주소의 앞부분 3바이트, 모든 주소에 해당하는 all이 있다.
deny from : allow from과 반대되는 개념이다.
 </Directory>

ex1)


<Directory "/www/n">
    Options FollowSymLinks MultiViews
     AllowOverride None
     Order allow,deny
     Allow from all
 </Directory>


ex2)


<Directory /a/service/html/>
     Options FollowSymLinks MultiViews Includes
     AllowOverride None

    Order allow,deny
     Allow from all
 </Directory>

<Directory />
     Options FollowSymLinks
     AllowOverride None
 </Directory>

Posted by 랩퍼우
아파치 (Apache )2015. 12. 24. 19:52

Apache2 에서 SSL 적용하기 (apache2 에서는 기본으로 mod_ssl 이 설치되어 있다)

 

1. Openssl 설치 확인

find / -name openssl

 

없으면 설치

 

2. mod_ssl 모듈 설치 확인
statically linking module 로 설치된 mod_ssl 모듈확인
[root@web1 root]# $APACHE/bin/httpd -l
Compiled-in modules:
 ...
 mod_ssl.c
 ...
[root@web1 root]#

웹서버에 설치된 모듈중에 mod_ssl.c 을 확인합니다.

 DSO module 로 설치된 mod_ssl 모듈확인
[root@web1 root]# $APACHE/bin/httpd -l
Compiled-in modules:
 ...
 mod_so.c
 ...
[root@web1 root]# ls $APACHE/module
(1.3.29 이전 버전은 $APACHE/libexec 확인)
mod_ssl.so ...
[root@web1 root]#
 

없으면 설치

 

3. 개인키(비밀키) 생성

[root@web1 root]# cd $SSL_KEY_STORE
[root@web1 ssl]# openssl genrsa -des3 -out ssl_test.key 2048
Generating RSA private key, 2048 bit long modulus
.............++++++
...++++++
e is 65537 (0x10001)
Enter pass phrase for ssl2007.key: ******
Verifying - Enter pass phrase for ssl2007.key: ******
[root@web1 ssl]#
 

4. 개인키 확인

[root@web1 ssl]# openssl rsa -noout -text -in ssl_test.key
Enter pass phrase for ssl.key: ******
Private-Key: (2048 bit)
modulus:
    00:da:bf:f3:39:d7:c6:1f:bd:6f:a7:b8:aa:67:f2:
...
coefficient:
    6b:26:51:9e:fb:77:cf:7e:d4:2a:a6:d2:7f:21:fa:
    42:e4:7c:54:2e:5e:e9:fb:03:a6:25:d0:6a:fc:e9:
    e1:1b:45:82:61:c0:35:a9:50:25:0a:75:2a:f8:cc:
    87:10:30:9d:bd:36:8e:4b:f6:55:0d:08:30:e8:55:
    e4:00:3b:ec
[root@web1 ssl]#

 

5. CSR 생성

[root@web1 ssl]# openssl req -new -key ssl2007.key -out ssl_test.csr
Enter pass phrase for ssl.key: ******
...
Country Name (2 letter code) [KR]:kr
State or Province Name (full name) [Berkshire]:Seoul
Locality Name (eg, city) [Newbury]:Songpa
Organization Name (eg, company) [My Company Ltd]:Dotname Korea
Organizational Unit Name (eg, section) []:Digital Certificate Team
Common Name (eg, your name or your server's hostname) []:www.도메인명.co.kr
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ******
An optional company name []:회사명
[root@web1 ssl]#

 

Country Name (국가코드) : KR
State or Province Name (시/도) : Seoul
Locality Name (구/군) : Songpa
Organization Name (회사명) : Dotname Korea
Organizational Unit Name (부서명) : Digital Certificate Team
Common Name (인증 받을 도메인 주소) : www.도메인.co.kr
Email Address :
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password :
An optional company name : 회사명

 

이와 같이 입력한다.

 

6. CSR 확인

[root@web1 ssl]# openssl req -noout -text -in ssl_test.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=kr, ST=Seoul, L=Songpa, O=Dotname Korea,
        OU=Digital Certificate Team, CN=www.anycert.co.kr
...
[root@web1 ssl]#

 

7. 개인키 백업 및 복사

cp ssl_test.key /usr/local/apache/conf/

cp ssl_test.csr /usr/local/apache/conf/

 

8. 사설 인증서 생성

openssl x509 -req -days 1280 -in ssl_test.csr -signkey  ssl_test.key -out  ssl_test.crt


 

9. 개인키에서 패스워드 삭제하기  (안하면 아파치 시작하거나, 리부팅시 패스워드를 넣어서 start 시켜줘야 한다)

openssl rsa -in ssl_test.key -out ssl_test.key.insecure

10. 아파치 httpd.conf  수정

# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf

이부분의 include 주석을 해제한다.

 

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

 

11. httpd_ssl.conf 수정

<VirtualHost _default_:443>

#   General setup for the virtual host
DocumentRoot "/usr/local/apache-2.2.17/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog "/usr/local/apache-2.2.17/logs/error_log"
TransferLog "/usr/local/apache-2.2.17/logs/access_log"

위 부분을

<VirtualHost *:443>

#   General setup for the virtual host
#DocumentRoot "/usr/local/apache-2.2.17/htdocs"
DocumentRoot "/home/prod/webroot/sso"
ServerName 도메인:443
ServerAdmin 관리자이메일주소@

ErrorLog "/usr/local/apache-2.2.17/logs/ssl_error_log"
TransferLog "/usr/local/apache-2.2.17/logs/ssl_access_log"

<Directory "/home/prod/webroot/sso">
    Options FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from All
</Directory>

 

이런식으로 바꿔주고. Directory 설정에 Allow from All 을 넣어줘야 403 에러가 나지 않는다.

 

SSLCertificateFile "/usr/local/apache-2.2.17/conf/server.crt"
위 주소를 변경한다. 만들어놓은것과 같게

SSLCertificateFile "/usr/local/apache-2.2.17/conf/ssl_test.crt"

 

SSLCertificateKeyFile "/usr/local/apache-2.2.17/conf/server.key"
이것도 변경한다

SSLCertificateKeyFile "/usr/local/apache-2.2.17/conf/ssl_test.key"

아파치 재시작

 

※ 만일 아래 에러가 나올경우
Invalid command 'SSLPassPhraseDialog', perhaps misspelled or defined by a module not included in the server configuration


mod_ssl 이 적용되지 않아 나오는 메시지
아파치를 컴파일 할 때  ssl 관련 옵션을 사용하지 않았거나
아파치 컴파일시 다음 옵션 추가
--enable-ssl
--with-ssl=DIR (DIR => open ssl path)

ex ) ./configure --prefix=/usr/local/apache-2.2.17 --enable-ssl --with-ssl=/usr/bin/openssl --enable-so -with-mpm=worker --enable-rewrite --enable-headers

 


httpd.conf 파일에서 해당 모듈인 mod_ssl.so 을 로드 하지 않았거나

(아파치 1 버전대에선 so 파일을 추가해야 한다. 2 버전에는 built in 되어 있으므로 위에 configure 만 다시 해주고 make && make install 까지 해줘야 설치된다.)
LoadModule ssl_module modules/mod_ssl.so

Posted by 랩퍼우