Apache 환경설정

리눅스 2014. 8. 14. 06:22
728x90

Apache 2.X 버전이 기존의 아파치 1.3 버전과의 가장 큰 차이점은 멀티스레딩이 지원이다.

기존의 아파치 1.3 버전에서는 클라이언트의 요청 하나를 하나의 프로세스가 담당하는 프로세스 기반의 동작방식이었다. 이 방식은 웹 서버의 접속자 수가 많아지면 처리를 위한 프로세스의 수도 같이 증가하는 문제점이 있었다. Apache 2.X 버전에서는 스레드(Thread) 기능을 추가하였는데, 스레드는 하나의 프로세스가 다수의 클라이언트 요청을 처리하는 방법이다. Apache 에서는 이러한 방식은 MPM(Multi-processing Module)이라고 부른다.


Apache 환경설정


CentOS 6.X 환경에서 설치한 아파치 환경설정 파일 위치

/etc/httpd/conf/httpd.conf


수정은 VI 에디터로 들어가서 수정해도 되고, Secure FTP 로 접속해서 파일을 수정해도 된다.


아파치 웹 서버 재시작하기

아파치 환경설정 파일 httpd.conf 파일을 수정하고 나면 아피치 웹 서버 데몬을 다시 띄워야 변경된 설정으로 웹서버를 운영할 수 있다.

현재 설정된 User/Group 을 phpinfo 를 통해서 확인해봤다.



아파치 서버를 재기동 했다.

다시 설정상태를 확인해봤다.



Web서버 프로세스의 계정의 경우 반드시 로그인할 수 없는 계정(shell이 없는 계정)으로 설정하여야 한다.
일반적으로 사용자 ID 와 그룹으로 nobody 계정을 사용한다.


이제 httpd.conf 파일 내용을 간략하게 살펴보고 나중에 확인하기 위해 적어둔다.


[ httpd.conf ] 파일 내용설명


ServerRoot "/etc/httpd"

ServerRoot는 웹 서버에 관련된 환경설정 파일, 에러와 로고 파일들이 존재하는 디렉토리 위치를 지정하는 부분이다. RPM 바이너리 설치시 기본 ServerRoot 디렉토리는 /etc/httpd 이고, 소스 컴파일시는 /usr/local/apache 이다.


Timeout 60

Web 브라우저에서 타임아웃 신호를 보낼 때까지 기다리는 시간으로 단위는 초(sec)이다.

300 정도로 설정해 두면 된다.


KeepAlive Off

지속적인 접속 즉 한번 연결에 대하여 한번 이상의 요청을 허용할 것인가 아닌가 여부를 결정한다.

이 기능을 정지시킨 상태로 두려면 Off 를 선택한다.


MaxKeepAliveRequests 100

지속적인 접속 동안에 허용할 최대 요청 횟수를 지정한다.

0 으로 설정하면 제한을 두지 않지만 많은 사용으로 서버에 무리를 줄 수도 있다.

최대의 성능을 위하여 이 값을 높게 설정하는 것이 좋다.


MaxClients         300

클라이언트(PC)들이 동시에 최대로 접속했을 때 실행 가능한 최대 서버의 수를 지정한다.

너무 작게 설정하면 클라이언트들이 무작정 기다리는 상태가 될 수 있다는 점이다.

만일 동시에 접속할 수 있는 최대 클라이언트 수를 증가하기 위해서는 이 값만 증가시켜 주어서는 안된다.


User nobody
Group nobody
apache를 설치하면 User apache, Group apache 로 기본 설정되어 있다.

웹서버를 실행할 때 소유권을 갖게 되는 사용자와 그룹명을 지정한다.

사용자 소유권을 root 로 하게 되면 보안상 위험하기 때문에 nobody 로 설정해야 한다.

shell 이 없는 계정인 nobody 로 설정 변경한다.


DocumentRoot "/var/www/html"

웹 시작 문서인 index.html 파일이 위치할 디렉토리

변경하여 사용하려면 /home/httpd/html 과 같이 다른 디렉토리로 변경한다.


DocumentRoot "/usr/local/apache/htdocs"
<Directory "/usr/local/apache/htdocs">
    Options IncludesNOEXEC
    AllowOverride None
    Require all granted
</Directory>

아파치 서버가 접근하는 각 디렉토리에 어떠한 서비스와 기능들을 허용하고 또는 삭제할 것인가를 설정하는 부분이다.

불필요한 권한을 부여함으로써 발생되는 보안문제를 막기 위하여 기본값으로 매우 제한적인 상태로 설정한다.

Options 는 디렉토리의 특성을 설정한다.

디렉토리 리스팅 방지 : 웹 브라우저에서 사용자가 URL을 입력했을 경우, Web 파일이 없는 경우 기본적으로 디렉토리 리스트를 보여주는 것을 방지해야 한다. 기본으로 설정된 Options Indexes 를 제거한다.

FollowSymLinks  : 웹 서버에 심볼릭 링크를 이용해서 기존의 웹 문서 이외의 파일 시스템에 접근하는 것이 가능하나 심각한 보안 문제를 야기할 수 있으니 제거한다.

IncludesNOEXEC : SSI 사용은 허용하지만 #exec 와 #include 는 허용되지 않는다.


AllowOverride None : 디렉토리 인증 관련 설정으로 None (어떤 인증도 참고하지 않는다).

- All : 모든 액세스 정보를 참고한다.


웹서버에 사용자의 접근을 제한하고자 한다면 AllowOverride All 로 정책을 준 후 .htaccess 파일을 만들어 놓으면 된다.

HTML 에서 PHP 코드가 인식되게 해준다.


<IfModule dir_module>
DirectoryIndex index.html index.php   =>index.php추가
</IfModule>


//아래 두줄을 <IfModule mime_module>에 추가
    AddType application/x-httpd-php .php .html
    AddType application/x-httpd-php-source .phps

<IfModule mime_module>
    #PHP Enable
    AddType application/x-httpd-php .php .html
    AddType application/x-httpd-php-source .phps
</IfModule>


# 업로드 디렉토리에서 PHP 실행권한 OFF 처리,

# 강제로 파일 업로드하고 해당경로 파일 시행하면 그냥 다운로드됨

<Directory "/usr/local/apache/htdocs/uploads">
    <IfModule sapi_apache2.c>
        php_admin_flag engine off
    </IfModule>
    <IfModule mod_php5.c>
        php_admin_flag engine off
    </IfModule>
</Directory>

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    # 그림 이미지, css, js는 기록하지 않게 처리
    SetEnvIfNoCase Request_URI "\.(jpg|png|gif|css|ico|js|swf)$" notloglist

    #CustomLog "logs/access_log" common
    #CustomLog "logs/access_log" combined
    #CustomLog "|/아파치 설치 경로/bin/rotatelogs /로그를 저장할 경로/파일명 %Y%m%d%H 86400 +540" combined
    # 날짜별로 로그기록 남기기
    CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log_%Y%m%d 86400 +540" combined env=!notloglist
</IfModule>

퍼미션 설정 및 점검
# 일반계정 유출 등에 의해 파일이 변조될 수 있으므로 확인하여 조치한다.
# Apache and PHP 환경설정 파일 퍼미션 변경
# httpd.conf 파일의 경로 찾기
find / -name httpd.conf
chmod 640 /usr/local/apache/conf/httpd.conf
chown root:root /usr/local/apache/conf/httpd.conf
chmod 640 /usr/local/apache/conf/php.ini
chown root:root /usr/local/apache/conf/php.ini
# Document Root 디렉토리 설정 확인 및 변경
# Document Root 디렉토리는 755, 파일은 644로 되어 있는지 확인하고 변경
cd /usr/local/apache/htdocs
# 가능하면 home/httpd/ 하위 디렉토리에 Document Root 가 설정되도록 변경(httpd.conf 파일내에서)
chown 작성자(nobody) /usr/local/apache/htdocs
chgrp 작성자그룹 /usr/local/apache/htdocs
chmod 755 /usr/local/apache/htdocs


파일 업로드 권한을 줘야 하는 디렉토리는

chmod 707 /usr/local/apache/htdocs/uploads



웹서버에서 특정 디렉토리 접근을 특정 IP에게만 허용하고 싶은 경우가 있을 수 있다.

접근을 제어할 디렉토리 경로 지정하고 접속 허용할 IP를 등록한다.

<Directory 디렉토리 경로>
    Order Allow, Deny
    Deny from all
    Allow from 192.168.0.5 192.168.0.6
</Directory>


728x90
블로그 이미지

Link2Me

,