[아파치 설치]
apt-get install apache2
#a2enmod rewrite
#a2enmod headers
#a2enmod ssl
#a2dismod -f autoindex
vi /etc/apache2/apache2.conf
<FilesMatch
"\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key)$"
>
Require all denied
<
/FilesMatch
>
<FilesMatch
"(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml)$"
>
Require all denied
<
/FilesMatch
>
<DirectoryMatch
"\.well-known/acme-challenge/"
>
Require all granted
<
/DirectoryMatch
>
[PHP 설치]
apt-get install php
apt-get install libapache2-mod-php
apt-get install php-mcrypt
apt-get install php-mbstring
apt-get install php-gd
apt-get install php-curl php-xml
apt-get install php-mysql php-mongodb
apt-get install libapache2-mpm-itk
vi /etc/php/7.0/apache2/php.ini 에 아래 두줄 추가
extension=mongodb.so
extension=mysqli.so
- 설정
vi /etc/apache2/mods-available/php7.0.conf
<FilesMatch
".+\.ph(p3|p4|p5|p7|t|tml)$"
>
Require all denied
<
/FilesMatch
>
vi /etc/php/7.0/apache2/php.ini
vi /etc/php/7.0/cli/php.ini
date.timezone = Asia/Seoul
/etc/init.d/apache2 restart
[MariaDB 설치]
apt-get install mariadb-server
/usr/bin/mysql_secure_installation
mysql
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
비밀번호가 틀렸다면
use mysql;
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('비밀번호');
exit;
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('turtle123');
-언어설정 추가 (중요)
vi /etc/mysql/mariadb.conf.d/50-server.cnf
character-
set
-server = utf8mb4
collation-server = utf8mb4_unicode_ci
/etc/init.d/mysql restart
이거 안했다고 route가 제대로 안되네...
/etc/apache2/sites-available/yoursite.conf
<VirtualHost *:80>
ServerAdmin youremail@yahoo.com
ServerName yoursite.com
ServerAlias www.yoursite.com
DocumentRoot "/var/www/yoursite.com/public"
<Directory /var/www/yoursite.com/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
SSL 설정
웹사이트 Apache 환경설정파일 작성
다음의 내용을 작성한다.
아래 예제에서는 사이트 환경설정파일명을 lael.be 로 가정하고 진행한다.
당신의 도메인, 사용자 아이디, 별도의 구분단어로 설정해서 사용하도록 하자.
#vi /etc/apache2/sites-available/lael.be.conf
/etc/apache2/sites-available/lael.be.conf 에 저장한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <VirtualHost *:80>
ServerName lael.be
ServerAlias www.lael.be
ServerAlias my-anotherdomain.com
DocumentRoot /home/myuser1/www/
<Directory /home/myuser1/www/ >
Options FollowSymLinks MultiViews
AllowOverride All
require all granted
< /Directory >
AssignUserID myuser1 myuser1
ErrorLog ${APACHE_LOG_DIR} /lael .be-error.log
CustomLog ${APACHE_LOG_DIR} /lael .be-access.log combined
< /VirtualHost >
|
ServerAlias 는 사용안하면 빼도 되는 줄이다.
#15.09.16 추가
당신이 만약 SSL(https) 를 적용하고자 한다면 lael.be.conf 파일 하단에 다음의 코드를 추가하세요. 즉 VirtualHost 영역을 하나 더 추가.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <VirtualHost *:443>
ServerName lael.be
ServerAlias www.lael.be
ServerAlias my-anotherdomain.com
DocumentRoot /home/myuser1/www/
<Directory /home/myuser1/www/ >
Options FollowSymLinks MultiViews
AllowOverride All
require all granted
< /Directory >
AssignUserID myuser1 myuser1
ErrorLog ${APACHE_LOG_DIR} /lael .be-error.log
CustomLog ${APACHE_LOG_DIR} /lael .be-access.log combined
Header always set Strict-Transport-Security "max-age=31536000"
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/myuser1/ssl/mysite_ssl.crt"
SSLCertificateKeyFile "/home/myuser1/ssl/mysite_ssl.key"
SSLCertificateChainFile "/home/myuser1/ssl/mysite_ssl.certchain.crt"
< /VirtualHost >
|
https://www.sslshopper.com/ssl-checker.html#hostname=blog.lael.be (SSL Chain test - 인증서가 올바르게 설치되어 있는지)
https://www.ssllabs.com/ssltest/analyze.html?d=blog.lael.be (SSL Algorithm test - 안전한 암호화 통신이 설정되어 있는지)
Chain test 는 모두 Valid 이어야하고, SSL Algorithm test 는 A 이상이면 정상적인 운영이 가능하다.
라엘이가 여러 설정 값에 대해서 테스트를 해 보았고, 최적의 권장설정 값을 위와 같이 적어두었으니 그대로 쓰면 된다.
위의 설정값으로 SSL을 설치하면 A+등급을 받을 수 있을 것이다.
.
인증서 적용 테스트는 위의 사이트를 이용하여라.
인증서 체인 파일이란 “인증서에 대한 인증서” 파일이다.
< 그림 : 이 블로그는 위의 단계를 거쳐 인증된다. 이것을 체인 인증 이라고 한다. >
대통령이 당신을 인증할 때 직권으로 인증하는 것이 아니라, 대통령 -> 서울시장 -> 강남구청장 -> 삼성동장 -> 당신 의 단계를 거친다. 검증하려면 모든 단계의 보증 증서를 제공해야 하는 것이다.
인증서 파일에는 삼성동장 -> 당신 의 정보가 들어있고, (암호화 통신시 공개됨)
인증서 키 파일에는 암호화 통신을 위한 정보가 들어있고 (은행 보안카드 로 비유. 외부에 공개되지 않음.)
인증서 체인 파일에는 대통령 -> 서울시장, 서울시장 -> 강남구청장, 강남구청장 -> 삼성동장 의 정보가 들어있다. (체인 인증이라고 한다. 연결고리 인증)
인증서 체인을 올바르게 작성하지 않으면 Firefox 브라우저와 Android Chrome 브라우저에서 “인증서 정보부족” 오류가 발생하게 된다.
14) 사이트 활성화 및 적용
명령어는
#a2ensite 사이트환경설정파일명
입니다.
#a2ensite lael.be
(참고로 사이트 비활성화는
#a2dissite lael.be
입니다.)
- 아파치 설정 다시 불러오기(적용을 위해)
#service apache2 reload
참조: https://blog.lael.be/post/73