ubuntu 웹서버 셋팅

웹 서버의 구성

우분투 버전을 선택한다. 여기서는 서비스 수명이 긴 14.04 버전을 선택하도록 하겠다.
구성가능한 서버 방식은 다음과 같다.

  • Nginx + PHP-FPM

이 방식을 사용하여 설정을 잘 하면 가장 월등한 동접처리가 가능하다. 다만 일부 범용 프로그램에서 호환이 안된다. nginx는 가벼운 대신 모듈이 많지 않다. nginx는 .htaccess 파일을 해석할 수 없다.

  •  Apache + PHP-FPM

apache 는 아주 많은 확장 모듈이 있다. 기본 내장된 mod_proxy 모듈을 사용해서 nginx와 동일한 역할을 할 수 있도록 할 수 있다.

다만 기본으로 처리하는 것이 많아서 nginx 보다 약간은 느리다.

  • Apache + mod_php

Apache와 PHP 프로그램을 따로 구동하지 않고 Apache에 PHP 해석 모듈을 로드하게 한다.

Apache + mod_php

Apache의 설치

vi /etc/hostname

호스트이름을 확인하고 적절한 이름으로 변경한다.

hostname -F /etc/hostname

위와 같이 변경된 이름을 적용할 수 있다.

apt-get install apache2
apache2 -v

apache 2.x를 설치하고 버전을 체크해 본다. 설치 완료후 파이어폭스등의 브라우저에서 http://자신의 아이피 혹은 localhost 를 사용해 웹 서버가 구동되는지 확인한다.

주로 사용하는 모듈과 필요없는 모듈을 비활성화 한다.

# a2enmod rewrite
# a2enmod headers
# a2dismod autoindex
# service apache2 restart

 

PHP 5.x의 설치

apt-get install php5

자동으로 아파치 중단시키고  설정파일에 php를 등록시키고 재 구동되어 바로 적용된다.

apt-get install php5-cli

콘솔에서 php를 실행시키기 위해서 위와 같이 추가 패키지를 설치한다.

apt-get install php5-mcrypt
apt-get install php5-gd
apt-get install php5-curl

주로 사용하는 암호화, 이미지, 원격지 정보 읽기등을 설치한다. 추가로 설치하고 싶은 모듈이 있는 경우 다음과 같이 검색하여 설치한다.

apt-cache search php5-
service apache2 restart
php -v

아파치 서비스를 재시작하고 php의 버전을 확인해 본다.

PHP 5.5.9-1ubuntu4 (cli) (built: Apr  9 2014 17:11:57)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

 

Mysql의 설치 (또는 MariaDB 설치)

mysql과 mariaDB는 호환된다. mysql이 오라클로 인수되면서 나온 개발자들이 따로 mariaDB를 만들었다. 여기서 mariaDB를 설치하도록 하겠다.

apt-get install mariadb-server-5.5

루트 사용자로 지정할 암호를 넣어준다.

apt-get install mariadb-client-5.5
apt-get install php5-mysql
mysql -V

클라이언트 프로그램과 연동 모듈을 설치하면 mariaDB가 사용 가능하다. 여기서 mysql과 동일한 인터페이스이므로 mysql 모듈을 설치해도 상관 없다.

기본 언어셋의 설정

DB가 기본적으로 latin1으로 생성되어 있으므로 이부분을 변경한다.

vi /etc/mysql/my.cnf
[mysqld]
#
# * Basic Settings
#
...
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
...
max_allowed_packet  = 256M

기존의 모든 utf8과 호환되는 utf8mb4 속성을 사용한다. 한행의 제한을 늘리기 위해 max_allowed_packet 속성을 조정한다. [mysqldump] 항목에도 존재한다.

service mysql restart

변경사항을 적용한다. 웹 서비스 구동시 발생할 수 있는 Nobody 퍼미션 관련 문제를 해결하기 위해 관련 프로그램을 설치한다. 이 세팅을 하면 shell의 권한과 sftp의 권한과 web의 권한이 동일하게 취급되며 보안도 좋게된다.

apt-get install apache2-mpm-itk
chmod 711 /home
chmod -R 700 /home/*

 

PHP 실행 확장자 변경

php .php3 .php4 .php5 .pht .phtml  확장자 파일이 php를 해석할 수 있게 되어있다. 웹 페이지에서 이 확장자 파일을 제대로 막자주지 못하면 사이트가 위험하게 된다.

vi /etc/apache2/mods-available/php5.conf

.php를 제외한 나머지의 접근을 차단 한다.

<FilesMatch ".+\.ph(p3|p4|p5|t|tml)$">
Order Deny,Allow
Deny from all
</FilesMatch>

 

PHP Default timezone 설정

이 값을 설정하지 않으면 시스템의 timezone을 사용한다.

vi /etc/php5/apache2/php.ini

date.timezone 값을 찾아서 주석을 제거하고 시간을  Asia/Seoul 설정한다.

service apache2 restart

항상 값 변경뒤엔 서비스를 재시작 한다.

 

계정 생성 및 테스트

adduser kildong
su -l kildong
mkdir www
exit

 

아파치 환경 설정 파일 작성

/etc/apache2/sites-available/kildong.conf 에 저장한다.

<VirtualHost *:80>
    #main domain
    ServerName edu-vm
 
    #additional domain
    ServerAlias www.edu-vm.com
#    ServerAlias my-anotherdomain.com
 
    #document Root
    DocumentRoot /home/kildong/www/
 
    #additional setting
    <Directory /home/kildong/www/>
        Options FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        # 14.04 rules
        require all granted
    </Directory>
 
    AssignUserID kildong kildong
 
</VirtualHost>

SSL을 적용하고자 한다면 다음 라인을 추가한다.

<VirtualHost *:443>
    #main domain
    ServerName edu-vm
 
    #additional domain
    ServerAlias www.edu-vm.com
#    ServerAlias my-anotherdomain.com
 
    #document Root
    DocumentRoot /home/kildong/www/
 
    #additional setting
    <Directory /home/kildong/www/>
        Options FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        # 14.04 rules
        require all granted
    </Directory>
 
    AssignUserID kildong kildong
 
    SSLEngine on
 
    SSLProtocol all -SSLv2 -SSLv3
 
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
 
    SSLHonorCipherOrder on
 
    SSLCertificateFile "/home/kildong/ssl/mysite_ssl.crt"
    SSLCertificateKeyFile "/home/kildong/ssl/mysite_ssl.key"
    SSLCertificateChainFile "/home/kildong/ssl/mysite_ssl.certchain.crt"
 
</VirtualHost>

인증서 적용 결과는 아래 사이트에서 확인해 볼 수 있다.

https://www.sslshopper.com/ssl-checker.html#hostname=forum.phple.com

 

사이트의 활성화

a2ensite kildong
a2dissite kildong   -> 사이트 비활성화

service apache2 restart

 

youngdeok's picture

Language

Get in touch with us

"If you would thoroughly know anything, teach it to other."
- Tryon Edwards -