wiki는 버린다. 데이터는 남겨둔다.
기본적인 설치 방법
$sudo apt-get install apache2 $sudo apt-get install php5 libapache2-mod-php5 $sudo apt-get install mysql-server $sudo apt-get install phpmyadmin $sudo /etc/init.d/apache2 restart
apache2를 설치하고 php5와 php5에 대한 apache2 모듈을 설치하고, mysql-server를 설치한다. phpmyadmin의 경우 사용자의 편의에 따라 설치하지 않아도 되며 mysql-server의 경우 설치 도 중 mysql root의 비밀번호를 설정하게 된다. apaceh2가 가동되면 http://주소/phpmyadmin 으로 phpmyadmin 페이지에 접속할 수 있다.
/etc/apache2 (apache2 설정 경로)
/etc/apache2/apache2.conf (아파치 설정 파일)
/etc/apache2/mods-available (모듈 설정 파일 경로)
/etc/apache2/mods-enabled (모듈 설정 파일 enabled 경로, mods-available 경로의 실제 모듈 설정 파일을 심볼릭 링크파일로 걸어놓아야 작동됨)
/etc/apache2/conf.d (아파치 conf 파일 경로, charset, phpmyadmin.conf, security)
/etc/apache2/sites-available (site 설정 경로, virtualhost 설정도 여기에 파일로 생성)
/etc/apache2/sites-enabled (site 설정 enabled 경로, sites-available 설정 파일을 심볼릭 링크 파일을 sites-enabled 경로에 만들어놔야 작동됨)
ubuntu 9.10에서 apt-get install로 apache2를 설치하면 기본적으로 rewrite 모듈이 활성화되어있지 않으므로 load하여 활성화 시켜주어야 rewrite 모듈을 사용 할 수 있다.
$a2enmod rewrite
또는
$ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
$sudo /etc/init.d/apache2 restart
$sudo vi /var/www/phpinfo.php <?php phpinfo(); ?>
브라우저에서 http://주소/phpinfo.php 로 접속하여 apache2handler 항목에서 mod_rewrite가 있는지 확인한다.
예전에 서버 세팅 할 당시에는 Virtualhost를 사용하지 않고, 한 서버에서 default로 한대의 도메인만 설정하여 사용하는 방법으로만 세팅을 해왔었지만, 여러 도메인을 사용하기 위해서는 Virtualhost를 사용하여야 하며 최근에는 기본적으로 한개의 도메인을 사용하여도 virtualhost 방식으로 설정하게끔 되어 있다.
Name-based vs. IP-based Virtual Hosts
IP기반 가상호스트는 연결한 IP 주소를 가지고 서비스할 가상호스트를 결정한다. 그래서 각 호스트는 서로 다른 IP 주소를 가져야 한다. 이름기반 가상호스트의 경우 클라이언트가 HTTP 헤더에 호스트명을 서버으로 전달하여야 한다. 이런 방법으로 한 IP 주소로 여러 다른 호스트를 서비스할 수 있다. 여기서는 한 IP에서 여러 도메인을 사용할 것이므로 이름 기반 호스트를 사용한다.
/etc/apache2/sites-available/ 경로를 보면 기본적으로 default, default-ssl 파일이 존재한다. 해당 파일은 그대로 보관한다. default 파일의 경우 var/www 경로를 Root로 인식하고 도메인이 아닌 IP로 접근하는 경우 해당 페이지를 보여주게 된다. 기본적으로 It’s Work 페이지를 보여주지만, 관리자 메일 주소정도 적어놔도 나쁘지 않다.
도메인별 설정 파일을 생성한다.
$sudo vi /etc/apache2/sites-available/rain9.com
<VirtualHost *:80> ServerAdmin darkhi@gmail.com DocumentRoot /home/darkhi/http/www <Directory /home/darkhi/http/www> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ServerName rain9.com ServerAlias www.rain9.com ErrorLog /var/log/apache2/rain9.com-error_log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/rain9.com-access_log common </VirtualHost>
$sudo vi /etc/apache2/sites-available/wiki.rain9.com
<VirtualHost *:80> ServerAdmin darkhi@gmail.com DocumentRoot /home/darkhi/http/wiki <Directory /home/darkhi/http/wiki> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ServerName wiki.rain9.com ServerAlias www.wiki.rain9.com ErrorLog /var/log/apache2/wiki.rain9.com-error_log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/wiki.rain9.com-access_log common </VirtualHost>
$a2ensite rain9.com $a2ensite wiki.rain9.com
apache2 재시작
$sudo /etc/init.d/apache2 restart
ln -s 원본파일경로 심볼릭링크파일명(ex:ln -s /etc/apache2/sites-available/rain9.com rain9.com)
a2ensite 사용법 : a2ensite rain9.com /etc/apache2/sites-available 경로에 있는 rain9.com 설정 파일에 대한 심볼릭 링크파일을 /etc/apache2/sites-enabled 경로에 생성한다.
a2dissite 반대로 /etc/apache2/sites-enabled의 심볼릭 링크파일을 제거한다.
a2enmod, a2dismod 위와 동일한 기능을 mods-available, mods-enabled 경로로 실행한다.
사용하는 DNS에서 ip를 해당 서버 ip로 설정해 놓으면 된다.
PHP의 속도 향상을 위해서 다양항 가속 프로그램이 존재한다. Zend Optimizer, APC (Alternative PHP Cache), eAccelerator, XCache, 등의 다양한 가속 프로그램이 존재하며 Zend Optimizer는 과거에 많이 쓰였고, APC는 free이며 PHP6에 default로 들어가게 될 정도로 안정적이며, eAccelerator는 APC보다 빠르지만 APC보다 인정은 덜 받는 상황이며, XCache는 빠르지만(벤치마크를 보니 APC나 eAccelerator보다) Lighttpd에 대하여 최적화되어져 개발되어지고 있는 상황이다. 그러므로 apaceh2를 사용한다면 APC나 eAccelerator를 사용하고, Lighttpd를 쓴다면 XCache를 추천한다. 이는 개인적인 생각이다.
$sudo apt-get install php-apc $sudo /etc/init.d/apache2 restart
/var/log/apache2/
apache2 작동에 문제가 생겼을 경우 로그 확인을 하여야 한다. 해당 경로로 접근이 가능한지 확인 한 후, 접근이 불가능 할 경우, 디렉토리 소유권을 확인하여야 한다.
root adm 권한으로 되어 있다면, adm 그룹에 현재 유저를 넣어주고 세션을 다시 시작하면 정상적으로 접근이 가능하며, 그룹에 추가 하기 위해서는 아래 명령어를 사용한다.
$usermod -G 그룹 -a 사용자계정명
또는
$sudo vi /etc/group
에서 해당 group에 직접 사용자계정명 추가.
소유권 그룹에 추가하지 않고 직접 파일을 액세스 하는 방법도 있다. 비소유그룹에 대한 권한 설정과 직접 경로 액세스 방법.
$sudo tail -f /var/log/apache2/access.log $sudo tail -f /var/log/apache2/error.log
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
/etc/apache2/httpd.conf 파일은 빈 파일이고, 해당 파일에 ServerName을 추가한다. 꼭 httpd.conf 파일은 아니어도 된다.
$sudo vi /etc/apache2/httpd.conf
ServerName 127.0.0.1
127.0.0.1 대신 localhost 일 수 도 있고, loopback이 아닌 IP라면 /etc/hosts에 기록된 서버의 hosts명을 적어도 된다. 본인은 IP로 나와서 호스트명을 적었다.
ServerRoot "/etc/apache2" # 서버의 Root 디렉토리 지정 LockFile /var/lock/apache2/accept.lock # 아파치 LockFile의 경로 지정을 위한 설정. 동기화(Serialize)와 관련됨. PidFile ${APACHE_PID_FILE} # apache2 시작될 때 자신의 프로세스번호를 기록하는 파일 Timeout 300 # 클라이언트와 서버 간에 정보 연결 유지 시간(초단위). # 페이지 로딩후 다음 페이지 로딩 작업이 300초 내에 이루어지면 # 대기중이던 쓰레드(또는 프로세스)로 처리하게 되고, 300초가 지나면 해당 대기중이던 쓰레드(또는 프로세스)는 다른 일을 하게 됨. KeepAlive On # 프로세스가 특정 사용자의 한가지 작업 요청을 처리하고 소멸할 것인지, 아니면 특정 사용자의 다른 요청도 처리할 것인지 결정하는 요소. # 프로세스 생성과 소멸은 부하가 생기는 작업이므로 작업이 있다면 더 처리하는 것이 효율적이다. MaxKeepAliveRequests 100 # KeepAlive On일때 유효 # 프로세스가 특정 사용자의 요청을 100번까지 처리하게 되면 해당 자식 프로세스는 소멸하고 다른 프로세스가 100번 이후의 요청을 처리하게 된다. # 무한적으로 요청을 처리하게 할려면 0으로 설정 KeepAliveTimeout 15 # KeepAlive On일때 유효 # 특정 사용자의 지속적인 요청이 지정된 시간(초단위)안에 없을 경우 연결을 끊는다. <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> # Ifmodule 지시자 # mpm_prefork : 전통적인 처리 방식(프로세스) # StartServers # 아파치 데몬이 시작될 때 자식 프로세스 개수 설정 # MinSpareServers, MaxSpareServers # 유휴상태(Idle) 자식프로세스가 MinSpareServers의 개수보다 적을 경우 추가로 생성하게 되고, 유후(Idle) 자식프로세스가 MaxSpareServers의 개수보다 많을 경우 소멸시킨다. <IfModule mpm_worker_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> # mpm_worker 쓰레드 처리 방식 # StartServers # 아파치 데몬이 시작될 때 자식 프로세스 개수 설정 # MaxClients 동시 연결 가능한 클라이언트 최대 개수 # MinSpareThreads, MaxSpareThreads # 유후상태(Idle) 쓰레드가 MinSpareThreads의 개수보다 적을 경우 추가로 생성하게 되고, 유후상태(Idle) 쓰레드가 MaxSpareThreads의 개수보다 많을 경우 소멸시킨다. User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} # 아파치 자식 프로세스들의 실행 소유자와 소유 그룹 AccessFileName .htaccess # 디렉토리 접근 제어 정보 파일 명칭 # Directory 지시자와 관련있음(AllowOverride) <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> # .htaccess 파일 접근 DefaultType text/plain # 정의되어있지 않은 파일 형식에 대한 요청을 받았을 때 응답 방법 mime type으로 설정 HostnameLookups Off # Off일때는 로그에 방문자의 IP로 기록, On일때 방문자의 IP에 해당하는 도메인을 DNS에 조회하여 있을 경우 도메인으로 기록, 해당 도메인이 없는 경우에는 IP로 기록 # DNS 조회는 속도와 관련이 있으므로 Off ErrorLog /var/log/apache2/error.log # apache2 서버 에러 로그 파일 위치 LogLevel warn # 에러 로그 기록 레벨 결정 # emerg가 가장 적은 양의 로그, debug가 가장 많은 양의 로그를 남기게 된다. # default 권장은 notice or warn이며 warn을 추천. # emerg : 최상위, 매우위험한 상황의 메시지, 전체공지가 요구되는 메시지, 매우 위급한 상황, 시스템을 사용할 수 없는 상황 # alert : 즉각적인 조치를 취해야하는 상황의 메시지로 즉시 행동이 취해져야하는 상황 # crit : 급한 상황은 아니지만 치명적인 시스템문제발생 상황 메시지 # error : 에러가 발생한 상황의 메시지 # warn : 주의를 요하는 메시지 # notice : 에러가 아닌 알림에 관한 메시지 # info : 단순한 프로그램에 대한 정보 및 통계관련 메시지 # debug : 최하위로 디버깅 관련 메시지 Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf Include /etc/apache2/httpd.conf Include /etc/apache2/ports.conf LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent # CustomLog 지시자에서 사용할 로그 형식 # %h 호스트명 # %l 리모트 로그 이름 # %u 사용자 인증에 사용된 유저명 # %t 시간 # %r 요청한 내용의 첫 번째 줄 # %s 서버 상태 # %b 전송량 (헤더 포함) # %{헤더} 요구된 헤더 내용 # %U 요구한 URL CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined # common : 공통 로그 형식 # Combined : 결합된 로그 형식 Include /etc/apache2/conf.d/ Include /etc/apache2/sites-enabled/
ServerAdmin : 해당 가상호스트의 관리자 메일 주소
DocumentRoot : 해당 가상 호스트의 홈디렉토리위치 지정
ServerName : 해당 가상 호스트의 도메인명
ServerAlias : ServerName에 지정한 도메인에 대한 별칭 지정
ErrorLog : 에러로그 파일의 위치 지정
CustomLog : 로그 파일의 위치 지정
로그형식 http://bluebreeze.textcube.com/176
이름 기반 호스트 http://httpd.apache.org/docs/2.2/vhosts/name-based.html
Apache HTTP Server Version 2.2 문서 http://httpd.apache.org/docs/2.2/ko/
SULINUX를 웹서버로 사용하기 1편 http://blog.daum.net/stock-chart/129
Ubuntu Server Guide > HTTPD – Apache2 Web Server https://help.ubuntu.com/9.10/serverguide/C/httpd.html
PHP Accelerators http://www.ducea.com/2006/10/30/php-accelerators/