본문으로 바로가기

[Ubuntu] 우분투 PHP-APC 설치

category 리눅스/Ubuntu 2013. 7. 31. 23:26

과거에 PHP에서 APC가 기본으로 포함될 것이라 했는데 무슨 이유인지 PHP5.5가 발표된후 ZendOptimizerPlus 캐쉬가 APC를 대체하게 되었습니다. 하지만 PHP 5.3을 사용한다면 APC만 한 것이 없기 때문에 설치법을 알아봅니다.

APC 설치

PHP가 설치된 환경에서 APC를 설치하는 방법은 두가지로 나뉜다.

우분투 패키지를 이용한 설치

우분투 12.04에서는 php-apc 3.1.7-1 버전을 지원한다.

sudo apt-get install php-apc
sudo service apache2 restart

설치확인

자신의 웹사이트에 phpinfo()를 작성해 APC 관련 정보를 확인한다.

sudo vi /var/www/phpinfo.php

<?php phpinfo(); ?>

APC 관리

우분투에서 apt-get으로 apc를 설치했다면 /usr/share/doc/php-apc 디렉토리에 apc.php.gz 파일이 존재한다. 이 파일안에는 apc.php 파일이 존재하는데 이 파일을 복사해 운영하는 웹사이트에 저장해두고 웹브라우저로 접근하면 그래프를 이용한 캐쉬관련 정보들을 얻을 수 있다(경우에 따라 /usr/share/php/apc.php에 위치할 수도 있다).

원하는 사이트의 위치에 복사한다.

sudo cp /usr/share/doc/php-apc/apc.php.gz /var/www

압축을 해제

sudo gzip -d /var/www/apc.php.gz

아파치 재시작

sudo service apache2 restart

웹브라우저로 접속

http://IP주소/apc.php

APC 보안

apc.php는 각종 서버정보가 기록되어 있으니 이를 .htpasswd로 보안관리한다. 이는 아파치서버단에서 할 수 있는 보안일뿐 php를 사용한다면 웹페이지를 이용해 세션을 사용한 인증을 많이 사용한다.

우선 apc.php 파일을 /var/www/apc 와 같이 제어가능한 디렉토리를 생성하여 .htaccess를 허용 한다.

sudo mkdir /var/www/apc
sudo cp /usr/share/doc/php-apc/apc.php.gz /var/www/apc
sudo gzip -d /var/www/apc/apc.php.gz

apc는 내부로그인이 존재하는데 이를 비활성화 시킨다.

sudo vi /var/www/apc/apc.php

  defaults('USE_AUTHENTICATION',1);    // 1의 값을 0으로 변경한다

이미 내부로그인이 존재하지만 이미 서버정보를 뿌린후에 로그인을 하는 이상한 과정? 그래서 이를 비활성화한다.

.htaccess 파일의 생성 및 인증체계 구축

sudo vi /var/www/apc/.htaccess

  # 인증창에 나타날 제목
  AuthName "APC Authorization"  

  # 인증방법
  AuthType Basic   

  # .htpasswd는 웹으로 접근 가능한 경로에 두지않음
  AuthUserFile /home/unclepapa/.htpasswd 

  AuthGroupFile /dev/null
  require valid-user 

apc 디렉토리에서 .htaccess 사용 허가

sudo vi /etc/apache2/sites-available/default

  <Directory /var/www/apc>
    AllowOverride All
  </Directory>

위의 구문을 추가하면 .htaccess 파일이 사용허가된다. 위의 /etc/apache2/sites-available/default는 아파치 기본사이트경로이고, 자신이 원하는 사이트의 경로에 위의 구문을 그곳에 추가하면 되는 것이다.

.htpasswd 파일 생성

최초 생성시는 -c 옵션을 사용, admin은 원하는 사용자ID입력

htpasswd -c /home/unclepapa/.htpasswd admin

( 명령어    최초생성       생성될 경로            사용자ID )

위의 명령을 입력한후 암호 입력

New password: 
Re-type new password: 
Adding password for user admin

.htpasswd에 사용자 추가시

htpasswd /home/unclepapa/.htpasswd 추가할사용자명

아파치 재시작

sudo service apache2 restart

접속확인

http://IP주소/apc/apc.php

APC 설정

apc 설정 옵션들을 보려면 http://php.net/manual/en/apc.configuration.php을 방문하면 된다.

우분투에서는 apc 설정파일이/etc/php5/conf.d/apc.ini 에 위치하므로 아래에 설명하는 값들을 원하는 값으로 설정하여 추가하면 된다.

apc.stat

기본값은 1로서, apc는 php 파일이 수정되면 이를 지켜보다가 reload 한다. 이 값을 0으로 설정하면, 성능면에서 향상되지만 php 파일을 수정하였더라도 반영되지 않고 기존의 캐쉬된 파일들을 실행시키므로 그때마다 아파치를 재시작해야 한다.

apc.shim_size

캐쉬된 결과를 저장하는 메모리의 사이즈를 설정한다. apc는 캐쉬된 메모리가 가득 찰 경우 사용된지 오래된 캐쉬들을 삭제하므로 이 횟수가 늘어날수록 성능은 떨어지게 된다.

Cache full count를 참고해서 적당한 수치가 되게끔 조절하는 것이 좋으며 기본값은 32M 이다.

apc.shm_size=128M

apc.max_file_size

apc가 캐쉬로 저장할 수 있는 하나의 파일의 최대크기로 기본값이 1M 이다.

apc.max_file_size=5M 

apc.num_files_hint

apc가 저장할 수 있는 op-code 갯수로 기본값이 1000 이다.

apc.num_files_hint=4000

apc.user_entries_hint

apc가 정할 수 있는 데이터항목의 갯수로 기본값이 4096 이다.

apc.user_entries_hint=10000

apc.cache_by_default

VirtualHost 를 사용하여 여러개의 웹사이트를 운영하고 있다면 이 값이 문제가 될 수 있다. 기본값이 1로(On) 되어 있기 때문에 모든 웹사이트에 대해 적용되고 이는 엄청난 메모리 부하를 유발한다. 고로 필요로하는 웹사이트에서만 값을 1로 설정하도록 한다.

apc.cache_by_default=0

원하는 VirtualHost 에서만 APC 사용

1) 우선 아래의 값을 설정하여 apc가 캐쉬하지 않도록 설정한다.

sudo vi /etc/php5/conf.d/apc.ini

  apc.cache_by_default=0

2) 캐시되기 원하는 VirtualHost 에 웹루트 폴더에 .htaccess 파일을 만들고 아래의 내용을 추가

php_flag apc.cache_by_default On

혹은 캐시되길 원하는 VirtualHost 의 아파치설정안에 아래와 같이 내용 추가

12<IfModule mod_php5.c>
  php_flag apc.cache_by_default On
</IfModule>

반대의 경우로 기본으로 APC는 활성화인 상태에서 캐시되지 않길 바라는 virtualhost의 웹사이트에는 php_flag apc.cache_by_default Off와 같이 내용을 수정한다.

APC 성능측정

ab -n 1000 -c 100 http://localhost/index.html
  • -n (requests) : 성능을 검사하기 위해 보내는 요청수
  • -c (concurrency) : 동시에 요청하는 요청수
  • http:// 에 측정을 원하는 사이트주소

워드프레스 APC 설정값 참고할 만한 것

http://gregrickaby.com/the-perfect-apc-configuration/