한번에 끝내는 Ubuntu 웹서버세팅 (우분투 서버세팅)

HYEONG HWAN, MUN/ 10월 18, 2014/ 미분류/ 323 comments

https://blog.lael.be/post/73

Last updated : 2018-05-18

Ubuntu 18.04 LTS 에서 설치하는 방법은 이곳에 : https://blog.lael.be/post/7264
Ubuntu 14.04 LTS 에서 설치하는 방법은 이곳에 : https://blog.lael.be/post/4518비밀번호ubuntu 입니다.
 이 글은 Ubuntu 16.04 LTS 에 맞추어 작성되었습니다.

#16.10.04 무료 보안인증서(SSL) 적용방법이 추가됨

무료 보안인증서 설치방법이 추가되었습니다. HTTPS 사용을 원하신다면, 본문을 다 읽으신 후 다음의 글로 이동해주세요.

https://blog.lael.be/post/5107


이 문서는 2010년 4월 12일에 처음 쓰여졌으며, 주기적으로 업데이트/유지보수 되고 있습니다.

이 문서는 항상 최신버전(Edge Version)의 세팅법을 설명합니다.

 


이 글에서는 자동화되고 유지보수 관리되는 설치방법을 설명하고 있습니다.

아래의 방법대로 설치한 후에 언제든지


apt-get update


apt-get upgrade

명령을 사용하면, 항상 빠르고 안전한 최신버전의 서버 소프트웨어를 사용하실 수 있습니다.


* 이 글은 Ubuntu 에 PHP 웹서버를 세팅하는 방법을 소개하고 있습니다.

* PHP를 최신버전으로 구축하고 싶다면 https://blog.lael.be/post/2600 글로 이동하세요. (Nginx + PHP7-FPM + MariaDB)

- CentOS 에서 PHP 를 구축하고 싶다면 https://blog.lael.be/post/1721 (Apache + PHP + MariaDB)

* Ubuntu 에서 JSP 웹서버 세팅을 원하시면 https://blog.lael.be/post/858 글로 이동하세요.

* Ubuntu 에서 PHP와 JSP를 동시 구동하고 싶으시면 https://blog.lael.be/post/1023 글로 이동하세요.

* Ubuntu 가상서버호스팅을 찾는 중이라면 https://blog.lael.be/post/44 글로 이동하세요.


현재 배포된 Ubuntu 버전은 아래와 같습니다.

img_ubuntu_1604
운영체제의 수명이 긴 LTS 버전을 설치하도록 합시다. (버전숫자가 높다고 더 좋다는 뜻은 아님)

Ubuntu 운영체제에 관해서는 http://en.wikipedia.org/wiki/Ubuntu_(operating_system) 를 참조하세요.

 

이 문서에서 설치는 Ubuntu 16.04 LTS를 기준으로 합니다. (14.04 와는 패키지가 약간 다를 수 있음)

참고로
Ubuntu 14.04 LTS 다운로드 이미지는 http://releases.ubuntu.com/14.04/ubuntu-14.04.5-server-amd64.iso 이며,
Ubuntu 16.04 LTS 다운로드 이미지는 http://releases.ubuntu.com/16.04/ubuntu-16.04.4-server-amd64.iso 입니다.

 

일반 사업체 및 실무 서비스에서 사용할 수 있는 안정적인 세팅법을 알려드리겠습니다.

 


0) root 권한으로 변경

기본으로 주어진 계정이 root 가 아닐 경우에만 0번을 따라하세요.
본문의 모든 명령어는 root 의 권한에서 실행해야합니다. 자신에게 주어진 계정이 root 계정이 아니라면 다음의 명령어로 root 로 전환해 주도록 합시다.

자신의 계정 보기

# whoami

sudo 명령어 실행. root 권한으로 root 로 로그인하는 명령어를 실행한다.

# sudo su

자신의 계정 보기

# whoami

b6

기본 계정의 UserID 는 그림과 다를 수 있음. 위 예시에서 기본 아이디는 ubuntu 이다.

sudo 명령어를 사용할 수 있는 계정은 root 와 동급이니 비밀번호 관리에 신중해야한다. 기본 계정의 비밀번호를 매우긴 어려운 것으로 변경해주도록 하자.

# passwd ubuntu

b7

 

1) 리눅스 버전체크

#uname -a
Linux Lael-ubuntu-xenial 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

2) Ubuntu 버전체크

#cat /etc/issue
Ubuntu 16.04.1 LTS \n \l

조금 더 자세하게 운영체제 버전정보를 알아보고 싶다면

# lsb_release -a

해당 명령어는 Ubuntu 에서는 기본적으로 설치되어 있지만 CentOS 계열에서는 기본패키지가 아니니 사용하려면 다음 명령어로 설치해주어야 합니다.

# yum install redhat-lsb-core

3) 하드용량체크

#df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           396M  6.2M  390M   2% /run
/dev/vda1        85G  3.6G   77G   5% /
tmpfs           2.0G  192K  2.0G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           396M   92K  396M   1% /run/user/1000
tmpfs           396M     0  396M   0% /run/user/0

대략 다 더하면 90G가 나온다.

 

4) 메모리 체크

#free -m
              total        used        free      shared  buff/cache   available
Mem:           3951         770        2262          10         918        3116
Swap:          4093           0        4093

3951M의 전체메모리중 현재 770M을 사용하고 있고 3116M가 비어있다.

 

4-1) CPU 코어수 확인

cpu정보 프로세스를 읽어서 processor 항목이 몇개인지 갯수를 셉니다.

#cat /proc/cpuinfo | grep processor | wc -l

g3

위의 사진은 6 core 를 뜻합니다.

한번 정도는 다음의 명령어를 확인해 보세요.

#cat /proc/cpuinfo | grep processor
#cat /proc/cpuinfo

 



5) 현재 서버에 설치된 패키지 최신버전으로 업그레이드

APT 목록 갱신

APT란 Advanced Packaging Tool 을 뜻합니다.
우리는 apt 라는 우분투에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.

 

패키지 목록 갱신.

#apt-get update

 

현재 운영체제에 설치되어있는 프로그램 최신버전패치

#apt-get upgrade

6) 시스템 시간 설정

이것을 하지 않으면 영국 시간을 불러올 것이다.

물론 초기 설치할 때 Asia/Seoul 을 설정했다면 이 작업을 할 필요는 없다. 하지만 또 한다고 해서 문제되지는 않는다.

- 데비안 패키지 재설정 TimeZone Data 를 실행한다.

#dpkg-reconfigure tzdata

GUI 환경이 나올 텐데, 순서대로 Asia - Seoul 을 선택하면 된다.

 

g4

ubuntu_timezone_1604

 

7) Hostname 설정

이 서버에 이름을 정하는 것이다. 이름을 잘 정해 두어야 나중에 다중 서버작업을 할 때 헷갈리지 않는다.

g6

위의 뜻은 “li599-115 서버에 root 사용자” 라는 뜻이다.

서버 이름은 FQDN(Fully Qualified Domain Name)을 쓰는 것이 좋다.

참고로 라엘이의 이 블로그 서버의 hostname은 blog.lael.be 이다.

 

#vi /etc/hostname

빈 파일일 건데(또는 기존 hostname이 쓰여있을것임.) 원하는 이름으로 바꾼다.

권장하는 단어는 이 서버에 연결될 대표 도메인이다. 예를 들어 blog.lael.be 같은 것.

 

적용한다.

#hostname -F /etc/hostname

 

서버에 재 접속하면 적용된 것을 확인 할 수 있을 것이다.

g7

hostname 값은 서버작업자에게 서버이름을 알려주는 역할을 하며, 아무 의미없는 글자를 적어도 된다.

일부 sendmail 같은 프로그램에서 다른 서버와 통신시 사용하기도 한다.

 

- hostname 을 FQDN 으로 설정하는 것을 권장하지만, 외부와 연결이 없는 서버이거나 자신이 쓰고 싶은 이름이 있다면 (팀명이나, 회사명, 서비스명 등) 그것으로 해도 된다.

예를 들어 myserver1, new1111 같이 자신이 하고 싶은대로 정했다고 한다면, 서버의 /etc/hosts 에 해당 이름을 등록해두도록 하자.

hostname 이 유효한 도메인 네임일 경우에는 이 작업(/etc/hosts)을 건너뛰세요.

127.0.0.1    myserver1

g8

 

추가) 메일 발송프로그램 설치하기

많은 프로그램에서 mail() 함수를 사용한다. 이 함수는 서버의 sendmail 프로그램에게 메일발송을 요청한다.

메일문의, 가입시 환영메일, 비밀번호 찾기 메일, 이메일인증 등 널리 사용된다. 서버가 메일 발송을 할 수 있게 sendmail 을 설치하자.

# apt-get install sendmail

이것은 오직 웹사이트에서 메일을 보내기 위한 것이다.

아이디@당신의도메인.com 같은 것을 하고 싶다면 절대로 직접 구축하려고 하지 말고 구글앱스, 도메인 구입처, 클라우드서버 업체의 메일호스팅, 서버호스팅업체의 메일호스팅 을 사용하도록 하자.

 

# vi /etc/mail/local-host-names

qv3

localhost 를 제외하고 나머지 항목은 지운다. 이곳에 쓰여진 도메인은 sendmail 발송시 목적 메일서버조회(mx record query)를 하지않고 로컬로 보낸다.

 

8) Apache2 설치

#apt-get install apache2

16.04 LTS 에서는 apache 2.4.x 가 설치된다. (2016년 4월 21일 현재 최신버전은 Apache 2.4.18 이다.)

가끔씩 apt-get updateapt-get upgrade 를 실행하면 아무런 문제없이 최신버전으로 업데이트 될 것이다.
설치가 완료되면 자동적용 및 시작된다.

버전체크

apache2 -v

apache_1604
확인해본다.
http://256.123.213.213 (서버의아이피)
웹브라우져에 기본 설명페이지가 뜨면 성공.
(참고로 기본으로 보여지는 파일은 /var/www/html/index.html 이다.)
기본 파일을 지운다.

#rm /var/www/html/index.html

기타 주로 사용되는 모듈을 활성화, 필요없는 모듈은 비활성화 한다.
아래 모듈에 대한 자세한 설명은… 생략한다.
사용에 문제가 발생하지 않는 최상의 방식이라고 이해하면 된다.

#a2enmod rewrite
#a2enmod headers
#a2enmod ssl
#a2dismod -f autoindex

 


#추가 보안패치. (.git, .svn, .env 등 dot로 시작하는 파일 및 폴더 보호, Web Access가 되어서는 안될 파일들의 접근 제어)

# vi /etc/apache2/apache2.conf

파일 중간의 <FilesMatch “^\.ht”> 구문 다음에 추가한다.

# deny file, folder start with dot
<DirectoryMatch "^\.|\/\.">
    Require all denied
</DirectoryMatch>
 
# deny (log file, binary, certificate, shell script, sql dump file) access.
<FilesMatch "\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key|yml|lock|gitignore)$">
    Require all denied
</FilesMatch>
 
# deny access.
<FilesMatch "(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml|access_log|error_log|gruntfile\.js|bower\.json|changelog\.md|console|legalnotice|license|security\.md|privacy\.md)$">
    Require all denied
</FilesMatch>

# Allow Lets Encrypt Domain Validation Program
<DirectoryMatch "\.well-known/acme-challenge/">
    Require all granted
</DirectoryMatch>

apache2-conf-161022-2



 

9) PHP 7.0 설치

PHP 5 를 설치하고 싶으시면 Ubuntu 14.04 LTS 를 설치하세요.

--

#apt-get install php

ubuntu_1604_php7

16.04 에서는 PHP 7.0.x 가 설치된다.

 

PHP-아파치 연동모듈 설치

#apt-get install libapache2-mod-php7.0

 

기타 주로 사용되는 모듈을 설치한다.
- 암호화 모듈

#apt-get install php-mcrypt

 

- 다국어 처리모듈

#apt-get install php-mbstring

 

- 이미지처리 모듈

#apt-get install php-gd

 

- 원격지 정보 불러는 모듈 (워드프레스, 드루팔 등에서 쓰임)

#apt-get install php-curl php-xml

 

-추가로 설치하고 싶은 모듈이 있으면

#apt-cache search php-

라고 입력해서 설치가능한 패키지를 검색후 install 하도록 하자.
ubuntu_1604_aptcache

 

- 아파치 재시작(적용을 위해서)

#service apache2 restart
버전체크
#php -v

PHP 7.0.4-7ubuntu2 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

7.0.4 버전이다. (당신이 설치한 버전은 이것보다 높을 것이다.)

 

10 - 1) MariaDB 설치

mysql 과 mariadb 는 완전 API 호환된다.

 

#apt-get install mariadb-server

MariaDB 10.0.24 이 설치된다.

 

MariaDB 초기화.

14.04 LTS까지는 자동으로 처리되던 작업인데.. 분리되었다.

아무튼 데이터베이스 초기화 작업을 하도록 하자.

다음의 명령어 실행하자.

/usr/bin/mysql_secure_installation

모르면 엔터 누르면 된다. (비밀번호만 설정하고 나머지는 엔터)

잘못한 것 같으면 위 명령어를 다시 실행하면 된다.

 

 

:: root 의 인증 플러그인 정보 제거하기

MySQL에 플러그인이라는 개념이 생겼다. 그 중 하나가 서버사이드 인증이다.

예를들어 Linux의 myuser1 사용자와 MySQL(MariaDB)의 myuser1 과 연결이 되는 경우이다. (비밀번호 필요없이 쉘인증)

root 사용자가 기본값으로 unix_socket Auth Plugin 이 설정되어 있는데… 이건 실 사용에 많은 불편함을 준다.  기존과 같이 비밀번호 인증 방식으로 바꾸도록 하자.

Linux root 사용자로 로그인한 상태에서

# mysql

(현재는 unix_socket 인증방식이라서 Linux root 사용자는 MySQL(MariaDB) root 계정에 비밀번호 없이 로그인 할 수 있다)

mysql_1604

use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

 

-----------

 

#apt-get install php-mysql

DB 연동모듈 설치. 완전 호환되기 때문에 mysql 이라고 해도 mariadb 사용가능.

 

MYSQL 콘솔 클라이언트 버전체크
#mysql -V
mysql  Ver 15.1 Distrib 10.0.24-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

 

 

10 - 2) 기본 언어셋 설정(중요)

이 단계를 건너뛰면 DB가 latin1 으로 생성되며 추후 DB작업에 문제가 생길 수 있다.

#vi /etc/mysql/mariadb.conf.d/50-server.cnf

 

(vi 에디터 사용방법을 모른다면 ftp 클라이언트를 사용하여 서버에 로그인 후 해당파일을 수정하고 덮어쓰기한다.)

 

[mysqld] 항목에 다음 2 줄을 추가한다.

2015년도 부터는 아래와 같이 utf8mb4 속성을 사용하세요.

이 속성은 utf8확장입니다. 기존의 모든 utf8과 상위 호환됩니다. (utf8 에서 utf8mb4 로의 변환은 손실이 일어나지 않습니다.)

 

utf8mb4 속성은 스마트폰 이모티콘 문자(emoji)를 저장할 수 있습니다.

자세한 설명은 이곳에(https://blog.lael.be/post/917) 있습니다.

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

 

q14

 

변경사항 적용

#service mysql restart

 

11) PHP 권한 설정

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

# apt-cache search mpm-itk

libapache2-mpm-itk - multiuser module for Apache

mpm_1604

 

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

(/home/* 안에 아무파일도 없을 경우 마지막 구문은 에러가 날 수 있다. 에러가 나면 무시하도록 하자.)

 

11-1) PHP 실행확장자 변경

 

php 를 해석하는 확장자가 꽤 많이 있다.

#vi /etc/apache2/mods-available/php7.0.conf

xenial_0630

.php .php3 .php4 .php5 .php7 .pht .phtml  확장자 파일이 기본적으로 php를 해석할 수 있게 되어있다.

웹페이지에서 파일업로드 구현시 이 확장자 파일을 제대로 막아주지 못하면 사이트가 위험하게 된다.

 

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

 


<FilesMatch ".+\.ph(p3|p4|p5|p7|t|tml)$">
    Require all denied
</FilesMatch>

php-security-1604

 

--------------------------------------------

적용을 위해서 아파치 재시작

#service apache2 restart

 



11-2) PHP Default timezone 설정하기.

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

PHP Default timezone 을 설정하는 것은 필수는 아니지만 매우 권장하는 작업입니다. 설정해주세요.

동일한 작업2개의 파일에 적용해 주어야 합니다.
이건 Apache2 - PHP 일때 참조하는 설정파일입니다.

#vi /etc/php/7.0/apache2/php.ini

이건 Cron이나 Console에서 PHP를 직접실행할때 참조하는 설정파일입니다.

#vi /etc/php/7.0/cli/php.ini

 

date.timezone 값을 찾아서 주석을 제거하고 시간을 설정해주세요.

q17

이 값을 찾아서

 

q18

이렇게 변경.

 

#service apache2 restart

 

나중에 mytest.php 파일을 만들고 웹브라우져에서 실행시킨 뒤 위와 같이 설정되어 있으면 정상이다.

<?php phpinfo(); ?>

Default timezone 이 설정되어 있으면 정상.

 

 

12) 계정생성 및 동작테스트

원래 표준명령어는 useradd 이지만    ubuntu는 사용하기 좋게 adduser 를 지원한다.
리눅스 관련 서적을 보면 둘다 계정생성용 명령어라고 되어있다.
쉬운 설정을 위해 adduser를 사용

#adduser myuser1

(참고로 위와 반대동작을 하는 계정삭제 명령어는 - 계정을 삭제하고 홈디렉토리도 삭제함 -

#userdel -r myuser1

입니다.)

보통 웹루트는 홈디렉토리에 하지 않습니다.
저는 주로 www 디렉토리를 사용합니다.사용자변경 후 www 디렉토리를 생성하고 빠져나오기

#su -l myuser1
#mkdir www
#exit

13) 웹사이트 Apache 환경설정파일 작성

#16.12.20 설정 가이드가 추가됨

환경설정을 쉽게하도록 도와주는, 환경설정 생성기가 추가되었습니다.

https://webmaster.cafe/tools/apache-conf-generator/

다음의 내용을 작성한다.
아래 예제에서는 사이트 환경설정파일명을 lael.be 로 가정하고 진행한다.
당신의 도메인, 사용자 아이디, 별도의 구분단어로 설정해서 사용하도록 하자.

#vi /etc/apache2/sites-available/lael.be.conf

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

<VirtualHost *:80>
    #main domain
    ServerName lael.be

    #additional domain
    ServerAlias www.lael.be
    ServerAlias my-anotherdomain.com

    #document Root
    DocumentRoot /home/myuser1/www/

    #additional setting
    <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 영역을 하나 더 추가.


<VirtualHost *:443>
    #main domain
    ServerName lael.be

    #additional domain
    ServerAlias www.lael.be
    ServerAlias my-anotherdomain.com

    #document Root
    DocumentRoot /home/myuser1/www/

    #additional setting
    <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 testA 이상이면 정상적인 운영이 가능하다.

라엘이가 여러 설정 값에 대해서 테스트를 해 보았고, 최적의 권장설정 값을 위와 같이 적어두었으니 그대로 쓰면 된다.

위의 설정값으로 SSL을 설치하면 A+등급을 받을 수 있을 것이다.

 

pv106

.

인증서 적용 테스트는 위의 사이트를 이용하여라.

인증서 체인 파일이란 “인증서에 대한 인증서” 파일이다.

mac-ssl

< 그림 : 이 블로그는 위의 단계를 거쳐 인증된다. 이것을 체인 인증 이라고 한다. >

대통령이 당신을 인증할 때 직권으로 인증하는 것이 아니라, 대통령 -> 서울시장 -> 강남구청장 -> 삼성동장 -> 당신 의 단계를 거친다. 검증하려면 모든 단계의 보증 증서를 제공해야 하는 것이다.

인증서 파일에는 삼성동장 -> 당신  의 정보가 들어있고, (암호화 통신시 공개됨)

인증서 키 파일에는 암호화 통신을 위한 정보가 들어있고 (은행 보안카드 로 비유. 외부에 공개되지 않음.)

인증서 체인 파일에는 대통령 -> 서울시장, 서울시장 -> 강남구청장, 강남구청장 -> 삼성동장 의 정보가 들어있다. (체인 인증이라고 한다. 연결고리 인증)

인증서 체인을 올바르게 작성하지 않으면 Firefox 브라우저Android Chrome 브라우저에서 “인증서 정보부족” 오류가 발생하게 된다.

 

14) 사이트 활성화 및 적용

명령어는
#a2ensite 사이트환경설정파일명
입니다.

#a2ensite lael.be

(참고로 사이트 비활성화는

#a2dissite lael.be

입니다.)

- 아파치 설정 다시 불러오기(적용을 위해)

#service apache2 reload

 

15) 연동테스트

apache 와 php, 그리고 mariadb 를 모두 사용하는 프로그램을 실행시켜보자.

phpmyadmin 공식사이트 : https://www.phpmyadmin.net/

 

설치 못하시는 분이 꽤 있으셔서 따로 설치법을 적습니다.

여러 설치방법이 있겠지만 저는 다음과 같이 설치합니다.

 

압축해제 프로그램 설치

# apt-get install unzip

 

압축파일 다운로드

# cd /var/www/html

 

k25

https://www.phpmyadmin.net/ 사이트로 이동 후 위의 그림과 같이 입력하여 최신버전을 설치할 수 있도록 하자.

이 글에서는 글 작성 시각 현재 최신버전인 4.5.2 를 설치할 것이다. phpmyadmin 은 매우 견고하게 만들어진 프로그램으로써 4.5.2를 설치해도 보안취약점이 있지는 않겠지만 최신버전을 설치하는 습관을 기르도록 하자. (혹시나 말하지만, Alpha나 Beta 같은 개발자-최신버전을 설치하라는 뜻이 아니라 널리 사용되어 검증된 Release Channel 최신버전 를 사용하라는 것이다.)

# wget https://files.phpmyadmin.net/phpMyAdmin/4.5.2/phpMyAdmin-4.5.2-all-languages.zip

 

압축해제

# unzip phpMyAdmin-4.5.2-all-languages.zip

 

폴더 이름변경

# mv phpMyAdmin-4.5.2-all-languages dbmyadmin

 

다운받은파일 삭제

# rm phpMyAdmin-4.5.2-all-languages.zip

도메인주소 말고 서버의 아이피를 입력해야 기본사이트로 들어갈 수 있다.

만약 기본사이트 이외의 사이트에 설치하고 싶다면 /var/www/html 위치 대신 /home/myuser1/www 같은 곳에 phpmyadmin 코드를 넣도록 하자.

http://111.222.333.444/dbmyadmin/

 

[TIP] 간혹 방금 설치한 디비의 root 비밀번호가 기억이 안나는 분들도 있을 것이다. 이 경우에는 다음의 명령어를 사용하여 mariadb 를 재설치 하도록 하자.
- 제거
# apt-get purge mariadb-server
- 설치
# apt-get install mariadb-server

 

 

- 재부팅

복잡한 세팅이 끝났으니 한번 숨을 고르고 가자.

# reboot

재부팅 후에 phpinfo 페이지와 phpmyadmin 가 잘 실행된다면 “재부팅이 가능한 서버” 라고 볼 수 있다.

 

16) Apache 추가 보안 설정

- 기본 언어셋 설정

#vi /etc/apache2/conf-available/charset.conf

기본 언어값 UTF-8 에 대해서 주석처리되어 있을 텐데 주석(#)을 제거해 준다.

 

iu4

- 추가 보안 설정

#vi /etc/apache2/conf-available/security.conf

매우 권장하는 보안설정이므로 Ubuntu Apache 패키지 제작자가 미리 써두었다.
이미 다 쓰여 있으니까 주석(#) 만 제거하자.

q1

iu2

iu3

 

- 아파치 설정 다시 불러오기(적용을 위해)

#service apache2 reload



옵션) SSH 기본 포트번호 변경

#이 작업은 무작위 대입공격(Brutu force attack)의 시도를 차단해줍니다.
보통 IP주소 : 22번 포트를 스캔해서 ssh와 연결되면 무작위 로그인 시도를 하는 프로그램이 엄청 많은데,
포트번호만 바꾸어주어도 방어가 되거든요.

!! IPTABLES 방화벽, SSH 포트번호 변경, Fail2ban 중에서 하나만 적용하세요!!

1) 나는 KS 클라우드 or 아마존 클라우드를 사용하고 있어! -> 클라우드 방화벽 쓰세요 !!
2) 나는 허용된 IP만 서버에 접속하게 할거야 -> IPTABLES !!
3) 나는 사용자의 IP를 특정지을 수 없는데 무차별대입 공격은 방어할거야 -> Fail2ban !!
4) 나는 나만 아는 포트번호로 서버에 접속할 거야 -> SSH 포트변경!!

[개인 프로젝트, 회사의 서비스 -> IPTABLES]
[웹호스팅 -> Fail2ban 또는 SSH 포트변경]

SSH 기본 포트번호인 22번을 다른 번호로 바꿉니다.
기억하기 쉬운 숫자로 변경하세요.

 

#vi /etc/ssh/sshd_config

Port 22   를 찾아서 임의의 숫자 : 10022, 34522 등 기억하기 쉬운 숫자로 설정.

포트번호는 10000번 이상의 숫자를 선택하시길 권장합니다.

 

#service ssh restart

 


 

옵션) 방화벽 적용하기

방화벽의 중요성을 알고 싶다면

# tailf /var/log/auth.log

를 입력해보도록 하자.  (Control + C 를 눌러 프로그램 종료)

별도의 방화벽 설정이 없었다면 벌써 중국에서 서버에 로그인 시도를 하고 있을 것이다.

fail2ban_1604

이러한 무차별 로그인 시도를 다음 중 어느 하나를 사용해서 막을 수 있다.

가장 편한 것은 fail2ban 이다. (한줄만 타이핑하면 방어됨)
(https://blog.lael.be/post/858#fail2ban) 로 이동해서 설정하세요.
* 접속자의 IP 가 고정되어 있으면 방화벽 설정을 통해, 특정 아이피에서만 서버에 접속할 수 있도록 설정해주세요.

 

현재 방화벽 설정 보기. (List)

#iptables -L

q26

INPUT (서버로 들어오는 것 관리), FORWARD (서버에서 내부망으로 연결관리;잘 안씀), OUTPUT (서버에서 나가는 것 관리)
로 이루어져 있다.

보통 FORWARD와 OUTPUT은 건들이지 않고 INPUT 만 수정한다.
policy ACCEPT 라는 뜻은 아무 조건도 해당하지 않았을 때 ACCEPT 하라는 것이다.

먼저 현재 방화벽 설정을 파일로 저장한다. 언제든 현재의 상태로 되돌릴 수 있기 위해서 이다.

#cd ~
#mkdir firewall_rules
#cd firewall_rules
#iptables-save > 151214.rules                 현재 날짜 쓰세요.

이제 방화벽을 복구해 보자.

#iptables-restore < 151214.rules
#iptables -L

>>설정 시작.
규칙 : 아이피 111.222.111.222 에 대해서 destination port 가 22 이면 ACCEPT 하여라.

#iptables -A INPUT -s 111.222.111.222/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

아이피 바꾸지 마시고 위의 예시 (111.222.111.222) 그대로 입력하세요.

#iptables -L

q27

 

이제 현재 상태에 대해서 방화벽 설정파일을 다시 생성해보도록 하자.

#iptables-save > 151214.rules

 

SFTP나 vi, cat 으로 해당 151214.rules 를 열어보자.

열고나서 코드의 뜻을 대충 해석해보아라. (간단하다.)

하단 *filter 부분에

-A INPUT -s 111.222.111.222/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

가 보이는가?

 

여러분은 이곳에 아래의 코드를 집어넣어야 한다.

순서가 중요하다. IF-ELSE 같이 동작하기 때문에 조건에 맞으면 바로 지정된 동작을 한다.

211.105.192.168 아이피만 지정하고 싶을 때 -> -s 211.105.192.168/32

211.105.192.* 아이피 그룹을 지정하고 싶을 때 -> -s 211.105.192.0/24

211.105.*.* 아이피 그룹을 지정하고 싶을 때 -> -s 211.105.0.0/16

목적지 포트가 22번(ssh) 포트일 때 -> -dport 22

목적지 포트가 80번(http) 포트일 때 -> -dport 80

목적지 포트가 443번(https) 포트일 때 -> -dport 443

 

아래는

1. 이미 연결된 것은 허용
2. ping 허용
3. loopback 허용
4. 111.222.111.222 의 22번 포트 접근 허용
5. 123.111.123.111 의 22번 포트 접근 허용
6. 80 포트 접근 허용 (-s 옵션이 없으므로 누구나 허용)
7. 443 포트 접근 허용 (-s 옵션이 없으므로 누구나 허용)
8. 차단
9. FORWARD 차단

의 코드이다.

아까 생성한 .rules 파일을 열어서 아래의 코드를 그림과 같이 코드를 추가하여라. 이때 반드시 당신의 아이피를 추가하여라.

추가가 잘못되어도 어차피 1번의 조건에 의해서 당신의 연결이 끊기지는 않겠지만 새로운 연결은 차단될 것이다.

 


-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 111.222.111.222/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 123.111.123.111/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

q28

#iptables-restore < 151214.rules
#iptables -L

!!!반드시 현재 쉘 연결을 끊지 말고!!!

현재 연결은 1번 조건에 의해서 반드시 허용이기 때문에 괜찮다.

 

새로 연결창 띄워서 테스트해 보아라.

만약 원하는대로 동작하지 않는다면 다시 .rules 파일을 수정하고 iptables-restore 하여라.

방화벽 설정이 머리가 아프다면

# iptables -F

초기화 하고 내일 다시 시도해 보아라.

 

이 설정은 재부팅이 되면 초기화 된다.

설정을 지속시키도록 하자.

iptables-persistent 설치

q29

#apt-get install iptables-persistent

Yes (엔터), Yes (엔터)

 

/etc/iptables 라는 폴더가 생성되고

rules.v4, rules.v6 가 생성된다.

 

부팅시 실행되는 파일을 갱신하자.

#iptables-save > /etc/iptables/rules.v4

 

ipv6 차단하기

#vi /etc/sysctl.conf

맨 밑에


net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

추가.

 

설정파일 적용

#sysctl -p

 

검사

#cat /proc/sys/net/ipv6/conf/all/disable_ipv6

1 이면 disable 된 상태이다.

q30

 

재부팅

#reboot

 

 

재부팅 후에 방화벽 규칙이 유지가 되면 성공이다.

#iptables -L




 

옵션) 계정별 트래픽 양 제한하기. Apache Mod Cband install.

- 2015.06.01. Ubuntu 14.04 LTS 테스트 완료. 
- 순간속도(대역폭), 총 전송량(쿼터), 동시접속연결을 제한하는 모듈입니다.
장애가 일어날 것 같은 값들을 Hard Boundary 로 정해놓으면 장애가 일어날 것 같은 환경에서 서버가 잘 돌아가는 것을 볼 수 있을 것입니다.

저도 서버 서비스의 장애를 막기 위해서 실 서비스에 이것을 사용하고 있습니다.
다만 저 같은 경우 분산처리를 해 두었기 때문에 개별 서버에 적용한 제한치보다 실제 서비스는 더 높은 처리를 보여줍니다. (100의 제한을 건 서버 5대에 분산처리하면 전체적으로 500의 제한이 걸린 것 처럼 보이겠죠?)

 

Mod CbandApache2 모듈입니다.

다음의 기능이 가능합니다.

1) 대역폭 제한 (Bandwidth limit)
2) 동시 접속자 제한 (Concurrent user)
3) 트래픽 제한 (Transfer quota)
통계 용도로만 사용할 수도 있다.

 

현재 공식사이트가 닫혀있어서 대체할 만한 다운로드 경로를 적는다.

1) mod cband 공식사이트 : http://cband.linux.pl/  (안열림.)
2) mod cband 메인 개발자 블로그 : http://dembol.org/blog/mod_cband/ (다운로드 링크가 동작안함)
3) source forge 링크 : http://sourceforge.net/projects/cband/files/ (최신버전이 아님)

4) 현존하는 것 중에서 가장 최선의 선택https://fossies.org/linux/www/apache_httpd_modules/mod-cband-0.9.7.5.tgz/

5) 라엘이 블로그 백업용 파일 (4번과 완전히 동일한 파일) mod-cband-0.9.7.5.zip

 

1] mod cband 는 apxs 라는 아파치 확장 개발 라이브러리를 필요로 합니다.
#apt-get install apache2-dev

 

2] apache cband module 다운로드
#wget https://fossies.org/linux/www/apache_httpd_modules/mod-cband-0.9.7.5.tgz

 

 

3] 압축을 풀고 설치
#tar -xzvf mod-cband-0.9.7.5.tgz
#cd mod-cband-0.9.7.5

 

3-1] 패치.

apxs 가 업데이트 되면서 변수명이 몇개 바뀌었다.

#vi src/mod_cband.c

찾기 : remote_addr      ,    바꾸기 : client_addr       1365번째줄1회만 치환되어야 함.

q32

 

찾기 : remote_ip       ,    바꾸기 : client_ip     4회 치환되어야 함.

 

 

3-2]  설치 계속 진행.
#./configure
#make
#make install

q33

 

 

4] cband 모니터링 페이지 생성
#vi /etc/apache2/mods-available/cband.conf

 


<IfModule mod_cband.c>
    <Location /cband-status>
        SetHandler cband-status
        AuthName "adminpage"
        AuthType Basic
        AuthUserFile /home/.htpasswd
        require valid-user
    </Location>
    <Location /cband-status-me>
        SetHandler cband-status-me
        Order deny,allow
        Deny from all
        Allow from all
    </Location>
</IfModule>

 

#htpasswd -c -m /home/.htpasswd admin

 

5] 아파치 모듈 켜기
#a2enmod cband

 

6] 적용을 위해서 아파치 재시작
#service apache2 restart

 

7] 확인

웹브라우져로

서버아이피/cband-status-me

서버아이피/cband-status

에 들어가 보자.

지금은 모두 무제한이므로 아무 항목이 뜨지 않을 것이다.

 

8] 설정하기.

https://www.linux.co.kr/home/lecture/?leccode=10588

위의 링크 글을 참조하여 이미 생성해서 사용중인 sites-available 안의 virtualhost 파일을 수정한다.

 

9] 설정 예제.

각 사이트의 <virtualhost> 구문에 Cband 설정 값을 추가한다. 다 쓸 필요는 없다. 필요한 제한만 두도록 하자.

 

당신이 웹호스팅을 운영중이라면 CBandLimit 구문과 CBandPeriod 구문을 사용하여라.

 

당신이 동영상 사이트나, 자료실을 운영중이라면 CBandSpeed 와 CbandExceededSpeed 를 사용하여라.

 

<VirtualHost *:80>
    #main domain
    ServerName lael.be
    #something
    #~~~
    #~~~
    
    <IfModule mod_cband.c>
        #4주동안 6GB 전송량 제한을 둠. 초과시 503 Service 에러페이지가 뜸.
        CBandLimit 6G
        CBandPeriod 4W
        #트래픽 조각. 이 상황의 경우 1주일마다 1.5GB 가 보급된다.
        #트래픽이 CbandPeriod 기간동안 골고루 사용되기를 원할때 설정한다.
        CBandPeriodSlice 1W
        
        #동영상(flv, mp4)이나 자료실 서비스를 하고 싶을때에만 아래의 속도제한 구문작성
        CBandSpeed 500kbps 10 30
        CBandExceededSpeed 128kbps 5 15
        #CBandScoreboard /var/www/scoreboard/domain.com.scoreboard
    </IfModule>

</VirtualHost>

 


 

옵션 ) 서버 동시접속자 설정 변경하기. (15.11.20 추가)

다음의 페이지를 많이 참조했습니다. (http://www.zarafa.com/wiki/index.php/Apache_tuning)

문의주시는 분들 중에 간혹 의도치않은 대박(?)이 일어나신 분들이 있더라. 동시접속 튜닝법을 설명하고자 한다.

 

몇가지 배경지식 설명.

- http 웹페이지는 stateless(connectionless) 입니다. 즉 페이지 불러올 때에만 서버와 연결하고 페이지 로드가 끝난 후에는 연결을 끊습니다.

- 1개의 연결당 평균 메모리 소모량은 20MB 입니다. (라엘이가 관리하는 여러서버의 평균값을 내보았음)

- Ubuntu Apache 의 기본 동시접속자 제한은 150개 입니다. 1000개의 동시접속이 연결되면 150개는 즉시 처리진행되고, 나머지 850개는 대기열에서 대기하다가 차례대로 처리됩니다.

1] 서버 연결당 얼마나 메모리를 소모하는지 확인
ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Proccess Size (MB): "x/((y-1)*1024)}'

q34

2] 서버에 여유 메모리 자원이 얼마나 있는지 확인

서버를 재부팅한 후에 아파치를 종료후 서버의 메모리를 확인해본다.

# free -m

 

3] 하드웨어 자원을 고려한 가용 동시연결수 계산

여유 메모리 / 1연결당 메모리     하면 된다.

2000MB free memory 가 있고, 1연결당 20MB 를 사용한다면 = 100개의 동시연결 가능. (300~500 동시접속자 처리가능)

 

4] 사이트의 필요 동시연결수 계산

450명의 사용자가 있고 3초주기로 페이지 이동이 일어난다고 가정하자. 페이지 출력 실행시간은 2초라고 가정하자.

필요 동시연결수 = 450 / 3 * 2 = 300

 

5] 동시연결수 설정 변경.
# vi /etc/apache2/mods-available/mpm_prefork.conf

MaxRequestWorkers 값을 수정해야 합니다.

ServerLimit 라는 옵션의 기본값이 256이기 때문에 MaxRequestWorkers 값이 256보다 작으면 따로 적을 필요가 없으며, 256보다 크면 그와 같은 값으로 ServerLimit 도 설정해야 합니다.

동시연결 제한 300 예제 설정법.


<IfModule mpm_prefork_module>
    StartServers 5
    MinSpareServers 5
    MaxSpareServers 10
    MaxRequestWorkers 300
    ServerLimit 300
    MaxConnectionsPerChild 0
</IfModule>

 

323 Comments

  1. 안녕하세요 라엘님
    혹시 우분투 사용자 계정 용량 제한 방법, 트래픽 제한 방법 포스팅 해주실 수 있나요?

    1. 넵. 이 글 하단에 추가해 드릴께요.

  2. 저기 죄송하지만 저렇게 서버를 구축하면 바로 동작을 하는건가요?
    그리고 전 웹 프로그래밍 언어인 html5로 사이트를 구축하려고 하는데요
    어떻게 해야 되나요? ㅠㅠㅠㅠ 좀 알려주시면 감사하겠습니다.

    1. HTML5는 서버와 상관이 없습니다.

      사용하시던 컴퓨터에서 책이나 인터넷에 나온 소스를 입력하면 그냥 동작합니다.

  3. 안녕하세요. 라엘님
    .JSP 관련 설치 및 설정하는 방법을 추가를 부탁드려도 될까요?

    1. 넵. 다음달 안으로 써서 업데이트 할께요.

    2. http://blog.lael.be/post/858 글이 추가되었습니다.

  4. 글 감사히 잘 읽었습니다.

    저는 막 입문한 초보인데 웹호스팅이 심심해서 가상호스팅 신청했는데 해결 안되는게 너무도 많습니다.
    수면이 부족할 정도 입니다.

    가상 호스팅을 웹호스팅(한개 아이피로 여러도메인 연결)수준으로 한번에 설정하는 방법을 가르쳐주시면 대단시 감사하겠습니다. 시간 되실때 부탁드립ㄴ다.

    1. 글에 이미 쓰여져 있습니다..

      1. 초보자라 phpmyadmin 을 설치 했는데 #a2dismod alias 때문에 고생좀 했습니다. ^^

        도움이 많이 되었습니다. 감사합니다.

        1. http://사이트주소/icons/
          를 치시면 아이콘 폴더가 보일텐데 이 기능을 끄려고 했거든요.

          보안 이슈가 아니므로 해당 명령어를 글에서 뺏습니다.

  5. 제가 좋은 사이트를 찾은 거 같네요…
    http://www.server-world.info/en/
    여기인데 여기가 가상화부터 로드벨런싱 같은 것까지 가르쳐 주고 있네요..
    일본 사이트라는 건 함정…. 하하하핳

  6. 질문 두개 있습니다..ㅠ,.ㅠ 도와 주세요..
    1.산수 캽챠 어디서 구하셨는지요..저두 사용하고 싶습니다.

    2. 우분투 25포트 여는 방법좀 가르쳐 주세요…워드프레스에서 메일 발송을 못합니다

    Starting Nmap 6.40 ( http://nmap.org ) at 2015-03-01 02:18 KST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000015s latency).
    Not shown: 996 closed ports
    PORT STATE SERVICE
    21/tcp open ftp
    80/tcp open http
    1022/tcp open exp2
    3306/tcp open mysql

    Nmap done: 1 IP address (1 host up) scanned in 2.46 seconds

    1. 1. 플러그인 명은 “Captcha” 입니다.

      2. 제 생각엔 포트가 안열려있는게 아니라, 메일발송프로그램이 설치 안된것 같습니다.
      #apt-get install sendmail
      을 해보세요.

  7. 우분투 완전 초보입니다.
    우분투 웹서버 한번 따라 해볼려고 시작했는대 안돼네요 ㅠㅠ
    위 내용대로 설치하고 내려가던중
    mysql 버전 확인 부분에서 에러가 나오네요
    에러 코드는 ERROR 1045 (28000):
    어디가 잘못 됐는지 모르겠네요
    인터넷 검색해봐도 영문사이트만 나오고 수정하는방법 찾기 힘드네요
    방법 좀부탁합니다.

    1. 버전확인 부분을 건너뛰고 다음부분으로 넘어가세요~

    2. 안녕하세요. 저두 이 포스터 보고 많이 배웠습니다.
      부디 성공하시길 바라며. 위 에러는 유져 비밀번호 셋팅 관련 에러코드로 생각됩니다.
      저와 같은 초보자 분이시라면 mysql을 사용하시 편한 인터페이스를 제공하는 phpmyadmin 사용을 권해드립니다. 아래 제 포스터도 참고해주세요 ^^

      http://blog.upstone.kr/post/63

    3. 명령어를 대문자가 아닌 소문자 v로 하셔서 그렇습니다.
      기본적으로 Unix계열 OS에서 명령어는 대소문자를 구분하기 때문에 정확한 명령어 사용법을 아시는게 좋을 것 같습니다.

  8. 안녕하세요, 라엘님 블로그를 보고 열심히 웹서버를 세팅하고 있는 Kama라고 합니다.
    현재 라엘님 글을 보고 ssh서버와 jsp서버를 둘다 세팅하였고
    두가지를 연동하려고하니 연동이 되지않고 ssh서버에서 Forbidden에러를 계속 띄우네요…
    다른 구글검색 글들 참고하여 이리저리 연결루트도 바꿔보고 했으나 며칠째 생고생만 하고 있어서
    염치 불구하고 라엘님 세팅상태에서 어떻게 하면 apache2, tomcat7 연동을 할수있는지 여쭙고자 합니다.
    확인좀 부탁드릴께요 ㅠㅠ

    1. 안녕하세요.
      우선 ssh 서버가 무슨뜻인지 모르겠습니다. php 서버를 말씀하시나요?
      그리고 연동의 의미도 모르겠습니다. 한 사이트에서 php, jsp 둘다 실행되게 하고싶으신건가요?
      예시를 들어주시거나, 자세한 설명이 필요합니다.

      1. 결혼식 다녀오느라 답변이 늦어 죄송합니다.. ㅠ
        말씀하신 PHP서버가 맞습니다!
        Mod-jk툴을 이용하여 apache2와 tomcat7을 연동시키려 하는데 잘 되지 않아서요…

        1. 댓글로 적기엔 좀 길어서, 오늘 저녁이나 내일중으로 연동시키는 방법 글로 써드릴께요.

  9. 저도 계속 시도 해보겠습니다!!
    감사합니다 라엘님!!

  10. http://blog.lael.be/post/1023 글을 추가하였습니다.
    위의 단계를 실행하시려면 먼저 서버에 Apache 와 Tomcat 이 설치되어 있어야 합니다.

    1. 감사합니다 라엘님! 잘 정리해주셨네요 ㅠㅠ
      덕분에 잘 세팅할 수 있을 것 같습니다!!
      저도 나중에 도움이 될 수 있었으면 좋겠는데 어찌 잘될지 모르겠습니다 ㅠ
      감사합니다!!

      1. 필요하실때 블로그에 들려만 주셔도 도움이 됩니다.

        감사합니다.

  11. 안녕하세요.

    현재 웹사이트를 운영 중인데요. 윈도우즈에서 APM 설치하고 그누보드로 웹페이지를 만들어서 리눅스 웹호스팅을 하고 있습니다.

    부득이한 사정으로 인하여 제 컴을 Debian Jessie 로 셋팅하고 윈도우즈에서 작업했던 것 처럼 APM을 설치하고 있는데,
    어렵네요.. 윗 글 그대로 따라했는데,

    localhost 로 접속을 하면

    연결실패
    localhost 서버와 연결할 수 없습니다.
    서버가 일시적으로 사용할 수 없거나 또는 너무 많은 접속이 몰리는 상태일 수 있습니다. 잠시 후에 재시도해 보시기 바랍니다.
    어떤 페이지도 열 수 없다면, 컴퓨터의 네트워크 연결을 확인해 보시기 바랍니다.
    사용자의 컴퓨터나 네트워크가 방화벽 또는 프록시로 보호되고 있다면, Iceweasel가 웹에 접속할 수 있도록 허용되어 있는지 확인해 주시기 바랍니다.

    이런 메세지만 출력됩니다.
    localhost/phpmyadmin 을 해줘도 동일한 상황이구요

    윗글 대로 따라하기 전에는 localhost 도 phpmyadmin 도 다 출력되었었거든요.

    윗부분에 iptables 설정시 본인의 아이피 주소를 넣는 부분에 127.0.0.1 로 입력을 했습니다.

    아래도 동일한 아이피를 넣었구요.

    ssh 포트 는 많이 쓰신다 하는 10022 로 설정을 했는데,

    -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -s 127.0.0.1/32 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
    -A INPUT -s 127.0.0.1/32 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
    -A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
    -A INPUT -j REJECT –reject-with icmp-host-prohibited
    -A FORWARD -j REJECT –reject-with icmp-host-prohibited

    위와 같이 했는데 셋팅이 잘못 되었나요?

    1. ssh 기본 포트를 바꾸셨으면 방화벽을 초기화 해보세요.

      #iptables -F

      1. 안녕하세요.

        잘 안되어서 다시 시스템 지우고 새로 설치하려는데, 저희 웹사이트가 아직 완성된 것이 아니어서

        PC에서 서버환경을 갖추고 www 디렉토리를 루트로 삼아서 현재 호스팅하고 있는 사이트를 PC에서 구현하려고 합니다.

        위 내용대로 아무리 따라해도 작업이 안되는데…

        어떻게 하면 호스팅해주는 업체의 서버처럼 구축할 수가 있는지요.

        아직 추가할 부분이 많은데, 서버 구축하는 것만 보름이상 헤메고 있습니다.

        조언 바랍니다…

        리눅스에 익숙하지 않다보니 여간 어려운게 아니네요.

        생 초보라 생각하시고.. 이곳 내용을 하두 많이 봐서 명령어가 뭘 하는 지는 대충 감이 옵니다.

        순서대로 명령어만이라도 일러주실 순 없는지요.

        시스템은 Debian Jessie 입니다.

        메일로 보내주시면 더욱 감사하겠습니다.

        수고하세요..

        1. 저는 var/www 쪽 폴더 포기하고
          user생성시 생성되는 home 이하 폴더를
          사용하는데 활성화 되었습니다.
          어떤 조건 때문인지는 모르겠습니다.

          어느 디렉토리가 정석인지도 모르겠네요. ^^;;

      2. 초기화를 하고나니 에러메세지는 없어졌는데요.

        브라우저창에 localhost를 입력하면,

        Forbidden

        You don’t have permission to access / on this server.

        이런 에러가 뜨네요..

        1. /var/www/html 위치에 파일을 넣어보세요.

          1. 여전히 동일한 에러가 뜨네요..

            localhost/phpmyadmin 을 해도

            Forbidden

            You don’t have permission to access / on this server.

            동일한 메세지가 뜹니다…ㅠㅠ

            1. – 추가 보안 설정
              #vi /etc/apache2/conf-available/security.conf
              에서 상단쪽에

              deny from all 을
              allow from all 로 바꿔주세요.
              그다음에 아파치 재시작하면 될겁니다.

          2. 라엘님.. 그런데,

            본인의 .conf 화일을 만들어서

            a2ensite xxxxxx 해줬는데 /var/www/html/ 에 화일을 올려야 되나요?

            DocumentRoot 로 설정한 곳에 넣어야 되는 것 아닌가요?

            1. 말씀하신게 맞는데, localhost나 127.0.0.1 은 특수목적으로 미리 지정되 있어요.
              서버는 서버로 그냥두고, ssh로 다른 pc에서 접속하셔서 작업하시는게 더 빠를것 같군요.

  12. 깔끔정리 굿입니다. 많은 도움이 되었습니다.

  13. Pingback: AWS EC2 웹서버 설정하기 | 이스트소셜

  14. 라엘님 글 잘 보았습니다. 지금제가 mRemote NG 를 사용하고 있습니다.

    윈도우에서 Ubuntu로 파일 전송을 할려고 하는데 Ctrl+C / Ctrl+V 기능이 안됩니다.

    Disk Driver True로 설정을 하였는데도 마찬가지로 되지가 않습니다.

    1. 전 win-sshfs 쓰고 있는데 잘되더라구요.
      https://code.google.com/p/win-sshfs/

      * root 계정 로그인은 권장하지 않습니다.
      * 프로그램 사용시 발생하는 문제점은 제가 책임을 지지 않습니다.

  15. 안녕하세요. 해당 글을 읽고 제 테스트용 서버에 apache와 php, mariadb를 잘 설치할 수 있었습니다.
    먼저 감사하다는 말씀을 드리고 싶고, 해당 내용 중 제가 실제로 해보았던 내용을 제 블로그에
    정리하려고 하는데 내용을 가져다 써도 되는지 여쭤보려고 이렇게 댓글 남깁니다.
    혹시 해당 내용에 대해 정리하는 것에 문제가 있다면 말씀해주셨으면 합니다.

    1. 성공적인 환경 구축을 축하드립니다.
      모든 활동을 허가합니다.
      본문 그대로 복사해 가셔도 되고, 일부만 복사하셔도 됩니다.
      출처를 남기셔도 되고 안남기셔도 됩니다.

  16. 겨우 겨우 우분투 15.04에 웹서버를 설치했습니다.
    그런데 일반 html 문서는 CSS도 잘 먹고 하는것 같은데
    php로 된 문서는 해석을 못하고 그냥 글자 그대로 화면에 출력됩니다.
    이건 아파치와 php가 연동이 안되서 그런건가요?
    체크와 해결하는 방법이 있을까요?

    1. 이 글에서 설명한대로 PHP를 설치하셨나요?

      혹시나 소스설치 하셨으면 PHP도 컴파일 하시고, apache.conf 나 httpd.conf 에 LoadModule 구문을 추가해 주셔야 합니다.

  17. 안녕하세요.
    완전 생초보인데요.
    이번에 인터넷 상품을 바꾸면서 고정IP서비스를 신청한 김에
    웹사이트용 테스트 서버 구축하려고
    열심히 따라하다가 13번에서 막혔습니다.
    말씀하신대로 다 쓰고나서 저장하려고 하니까
    “E212: 쓸 파일을 열 수 없습니다”
    라고 뜹니다.
    해당 폴더에 대한 권한 설정 문제인가 싶어서
    chmod 755 -R /etc/
    를 시도해봤지만 여전히 안되서,
    chmod 755 -R /etc/*
    라고 하니 이번엔
    chmod: ‘/etc/blkid.tab’ 심볼릭 링크에 동작시킬 수 없음
    이라고 뜨네요;

    어떡하면 좋을까요?

    1. 혹시 vi 에디터 사용하실 수 있으시나요?

      # vi /etc/apache2/sites-available/lael.be.conf 해보셨나요?

      1. 예, vi에디터 사용해서 본문에 적어주신 대로(호스트명만 제 것으로 바꾸고요)
        입력하고 나서 :wq!로 저장하려고 할 때 위와 같이 나오네요.

        12번 계정생성 및 동작테스트 부분에서 말그대로 사용자명을 생성하는 것인 줄 알고,
        호스트명 대신에 제가 주로 쓰는 ID명을 썼는데요.
        계정명과 호스트명이 일치해야 하는 건 아닌 것 같아서 굳이 고치지 않고 다음 13번으로 진행했는데
        혹시 이게 문제의 원인이 될 수도 있나요?

        1. “쓸 파일을 열 수 없습니다”라는 에러는 저도 처음보네요..
          하드디스크의 용량이 가득차신것 아닐까요?

  18. 250기가 정도 되는 하드를 통으로 잡아서 설치하고 있던 중이라 용량문제는 아닐 것 같습니다.
    써주신 본문 내용 중 일부를 제가 빼먹었던 지 그런게 아닐까 싶네요;

    그냥 OS 지우고 다시 깐 다음에 쭉 다시 따라서 설정해보고 있습니다.
    이번에는 문제가 되었던 부분 잘 넘기고 15번까지 마친 상태입니다.
    포트 변경이나 보안은 이해를 못한채로 설정했다가 나중에 저도 접속을 못할까 걱정되서
    써주신 내용 좀 더 찬찬히 읽어보고 진행하려고 합니다.

    좋은 내용 올려주셔서 저같은 초보한테는 책보다도 큰 도움이 됩니다.
    감사합니다!

  19. 이글을 참고하여 셋트에 성공하고
    얼마전 알게된 vultr.com 등록 및 셋팅하고
    더 좋은 conoha,jp 등록하고 셋팅하고
    이제 셋팅을 쉽게 하게 되었습니다. ^^
    감사합니다. ~~~~^^

  20. Pingback: [초보호스팅]우분투 자주 사용하는 명령어 정리 | UPstone.kr

  21. 정말 많은 도움이 됬습니다. 쉽게 설정할 수 있었네요!

    혹시 실례가 안되면 laravel 설치 방법도 공유해주실 수 있을까요?

    도전을 해보고 있는데 쉽지가 않아서 실례를 무릎쓰고 요청드립니다.

    감사합니다.

    1. 제일 간편한 방법은 공식사이트에서 소스를 다운받아서 설치하는 것입니다.
      https://github.com/laravel/laravel/releases
      v5.14 버전 zip 다운받아서 압축풀고 서버에 업로드해보세요.

      Phalcon을 제외하고는 프레임워크의 설치방식이 다들 비슷합니다.

  22. 혹시 asp.net 으로 만든 웹 프로그램을 우분투서버에서 웹서버(?)를 이용해서 서비스 하는 방법 아시는지요??
    mono-develop 라는 프로그램 설치하면 코드 작업하고 실행하면 C#도 사용할 수 있다고는 하는데. 리눅스에서 .net 용으로 웹서버는 어떻게 사용하는지 모르겠습니다.

    1. 리눅스에서 윈도우 어플리케이션을 구동하는 방법에는 Wine과 Mono가 있는데, 둘 다 잘 안됩니다.
      .net 프로그램은 윈도우 서버에서 돌리셔야 할 것입니다.

  23. 안녕하세요? 올려주신 내용 정말 많은 도움이 되었습니다.
    다름이 아니라, 올려주신 내용대로 세팅을 진행하였고, 추가적으로 ftp까지 잘 열었습니다.

    문제는 http 페이지를 열면, /var/www/html/ 에 저장된 파일이 열리는데, ftp 접속을 할 경우, 라엘님께서 써 주신 설명 내에서 새로 생성한 유저 (여기에서는 lael.be 이겠지요) 아래의 www 폴더로 접속됩니다.

    물론 ftp에서 루트로 접속한 후 /var/www/html/을 찾아간 뒤 여기에서 작업을 시작하면 되긴 하지만,

    라엘님 설명을 쭈욱 따라왔다면, 리눅스 세팅 후, 홈페이지 계정으로 사용할 사용자 계정과 거기에서 사용될 홈페이지 폴더를 www로 설정한 뒤, http로 접속하면 이 폴더 내의 파일을 불러오도록 하는 것 같은데… 제가 잘못 이해하고 있는 것일까요?

    물론 /var/www/html을 사용해도 문제는 없겠습니다만 보안상 괜찮은 것인지, 맞게 잘 한 것인지 감이 오질 않습니다.

    귀찮으시겠습니다만 답변 꼭 부탁드리겠습니다 ㅠㅠ

    1. 따로 도메인을 소유하고 있지 않으시다면 /var/www/html 을 쓰셔도 됩니다.
      혼자 쓰시는 서버(또는 신뢰된 사용자들끼리 쓰는 서버라면)라면 웹루트를 아무데나 잡으셔도 됩니다.

  24. 사무실에서 이번에 서버를 바꾸게 되면서 윈도우 서버 였는데 리눅스 기반 서버로 변경하려고 합니다.
    서버 사용 용도는 직원별 웹 서버 및 메일 서버로 사용하는데 운영자님 개인적인 생각에서는 CentOS와 우분투 중 어떤 서버를 설치하는 게 좋을까요?

    1. 굳이 하나를 고르자면 우분투를 추천합니다만, 기존처럼 윈도우서버를 계속 사용해도 되지 않을까요?

  25. 매번 좋은 글 감사합니다. 가능하시다면 nginx 서버 세팅법 강좌도 좀 부탁드립니다.

    1. 안녕하세요. 해당 글을 작성중입니다.

      http://blog.lael.be/post/2600 에서 확인해보세요.

  26. 안녕하세요.
    워드프레스로 개인블로그로 시작할까 합니다.
    AWS가 무료 1년 체험할수 있다고 해서
    AWS EC2신청했는데 인스턴트를 신청하지 않은 상태입니다.

    내년 초에 한국에도 서버들어온다고 하는데
    초기셋팅에서 일본으로 설정하고 내년에 한국으로 옮기는것도 가능할까요?

    1. AWS 가입하면 Free-tier 가 1년간 주어질텐데, t2.micro 상품군 1개만 무료입니다.
      무료 허용치 이외에는 다 과금되므로, 예를들어 4코어 서버를 신청하신면 월말에 큰 교훈(?)을 얻을 수 있을 것입니다.

      AWS 센터간 복사(이동) 방법과 정책은 다음의 공식 설명서를 참조하셔요.
      http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html

  27. 안녕하세요 덕분에 웹서버 세팅 잘 마쳤습니다~!
    궁금한게 한가지 있는데 내용 중간중간에 SSH 컨텐츠 스크린샷 하셔서 올린거보니 putty는 아닌것같은데
    어떤프로그램 쓰시는건지 궁금합니다~!

    1. 안녕하세요.
      저는 개발환경이 모두 MAC 이라서 맥용 프로그램만 사용합니다.
      맥용 IDE(통합개발툴) 중에 CODA2 라고 있는데 이것의 스크린샷입니다.

  28. 이 페이지 내용 정말 좋네요.

    찾고 있던 내용이 담겨 있어 도움이 많이 됐습니다. apache2-mpm-itk
    추가 질문있습니다. 가상호스팅의 경우 AssignUserID lael.be lael.be 이것이 잘 작동을 해서 웹프로그램 통해 디스크 쓰기도 잘 되는데요. 개인계정 홈피(http://web.com/~userid) 의 경우에는 설정을 어떻게 해야하나요? userid 를 www-data 그룹에 추가하고 웹디렉토리도 userid:www-data 로 지정하고 퍼미션 주면 웹을 통해 디스크 쓰기가 되기는 하는데요. 이것도 개인계정과 개인계정그룹으로 가능하게 하려면 어떻게 해야할지요?

    그리고 sftp 서버가 여러종류가 있는데요. 쓰기 편하고 좋은 것 소개 좀 부탁 드려도 될까요? 무엇보다도 sftp 로 접속했을 경우 개인계정 홈디렉토리가 루트로 나오게 하는 방법도 설명해주시면 큰 도움이 될 거 같네요. 개인계정 내 디렉토리 외 다른 곳은 볼 수 없도록하는 세팅이요. 이것도 보안에 아주 중요한거라 보이거든요.

    1. 첫번째 질문의 키워드는 mod_userdir 이고,
      두번째 질문의 키워드는 chroot 입니다.

      첫번째의 경우는 안될 것 같고, 두번째는 구글 검색해보시면 예제가 나올 것입니다.

  29. 웹사이트 Apache 환경설정파일 작성에서
    서버네임을 제외한 lael.be라고 써져있는 부분은
    서버명을 말하는건가요
    아니면 위에서 만든 계정 아이디를 말하는건가요..?

    1. 아…그리고 방화벽 설정시에

      현재 방화벽 설정을 restore할 파일로 생성하는게 있는데

      과정 따라하다보면 파일명이 겹쳐서 결국

      restore할 파일이 사라지게 되는데

      새로 생성할 방화벽 설정은 그러면 restore 파일명이랑 틀려야되는건지..

      1. 환경설정파일의 해당부분은 계정아이디를 쓰시면 됩니다.
        방화벽 설정은 본문을 한번 더 읽어보셔요. 아니면 restore 부터 시도해 보셔요. 하다보면 자동으로 이해가 될 것입니다.

  30. #apt-get install php5-mysql

    상기 명령어는 mariaDB 설치한 사람도 실행해야 되는 건가요?

    1. 네. MariaDB 설치하신분도 실행해야합니다.

  31. 라엘님 안녕하세요 제가 코노하에 가상서버를 만들었고

    가비아에 도메인 주소를 하나 가지고 있습니다.

    가비아의 A라는 도메인을 주소창에 입력하면

    코노하 ip주소로 연결되서 웹페이지가 뜨게 하려면

    어떻게 해야할까요..?

    가비아에 문의해도 헷갈리게 말해서ㅠㅠ

    1. ConoHa 관리툴에서 DNS 누르시고 도메인을 추가하세요(GeoDNS 사용안함). 가격은 무료입니다.
      A 레코드 값에 서버 아이피를 적으세요.
      네임서버(NS) 3개 발급해 줄건데 그 값으로 가비아도메인 네임서버를 바꾸면 됩니다.

  32. 하나하나 따라하다보면…

    방화벽 설정 가기 전에 사이트 접속시

    HTTP 403 에러 하면서 접근 불가가 됩니다..

    그래서 벌써 서버 몇번이나 삭제했다가 다시 만드나 모르겠네요

    뭐가 문제인지 ㅠㅠ

    1. 도메인을 잘못 연결한 것 아닐까요?

  33. 라엘님, 이렇게 한 후 FTP 접속해서 파일을 올려 웹상에서 보여지게 하고 싶으면

    폴더 어디에다가 올려야 하나요..?

    var/www/html/ 인가요 ..?

  34. 블로그 글 잘 읽어봤습니다.
    근데 배포판의 버전을 보는 방법은 lsb_release도 있습니다.

    명령어에 관한 정보 입니다.
    https://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-PDA/LSB-PDA/lsbrelease.html

    이것도 더해주시면 좋을듯 합니다.

    1. 감사합니다. 다음 개편때 추가하도록 하겠습니다. 🙂

  35. 안녕하세요 우분투로 제 도메인으로 사이트를 하나 만들고 싶어서 찾다가 들어오게 되었습니다.

    여기 적으신 대로 따라했는데 도중에 에러가 생겨서 질문 드려봅니다.

    현재 우분투 16.04 LTS 쓰고 있고요 나머지 환경은 라엘님이 하신 그대로 따라했으니 모두 동일 합니다.

    지금 에러가 난 곳이 gedit /etc/apache2/sites-available/parksungho.conf
    로 사이트 환경설정?파일을 만들었습니다. parksungho는 제 도메인 이름이구요. (www.parksungho.net) 으로 도메인을 일단 1년치 사놨습니다. )
    그리고 위에서는 도메인 이름이 lael.be로 되어있어서 그 부분만 수정해주고,
    a2ensite parksungho 로 활성화를 시켜주었는데, 그 다음 부터 아파치가 먹통이 되었는지 service apache2 restart를 해줘도 먹히지가 않습니다. 기존 127.0.0.1 에 가도 기본으로 보이던 아파치 (It’s work!)화면도 안보이고요.
    그래서 할 수 없이 다시 a2dissite parksungho 해주면 원래대로 아파치가 잘 됩니다.
    여기서 어떻게 해야 할지 모르겠습니다….

    1. 혹시나 본문의 11번을 하지 않으셨다면
      virtualhost 에서
      AssignUserID myuser1 myuser1
      구문을 삭제하시기 바랍니다.

      1. 아닙니다 본문11번은 잘했습니다.
        myuser1 로 일반사용자계정도 만들고,www폴더도 만들었습니다.

        다만 의심이 가는 점은 제가 .html 파일을 아직 안만들었는데 이걸 만들어서 어디 폴더에다 넣어주고 어떻게 연결해야하는지 잘 모르겠습니다.

        1. # tailf /var/log/apache2/error.log
          또는
          # tailf /var/log/apache2/parksungho-error.log
          를 실행해서 에러 로그를 살펴보세요.
          Control + C 로 tailf 를 종료할 수 있습니다.

  36. 안녕하세요. Forbidden

    You don’t have permission to access / on this server을 해결을 못한 한사람입니다. 아무리 구글링해도 한국꺼,외국꺼 다 뒤져봐도 해결되는게 없네요. 도움좀 주실수 없을까요?

    1. 무언가 놓친 부분이 있을거에요.

  37. 안녕하세요.. 저렇게 셋팅하면 아파치가 mpm_prefork 방식으로 작동을 하게되는데
    mpm_event 로 바꾸고 싶습니다. 어떻게 하면 되는지 궁금합니다.

    a2dismod mpm_itk
    a2dismod mpm_prefork
    a2enmod mpm_event
    service apache2 restart 하니까

    이런에러메세지가 나옵니다.
    Job for apache2.service failed because the control process exited with error code. See “systemctl status apache2.service” and “journalctl -xe” for details.

    systemctl apache.service <– 요 명령어를 입력했습니다.

    Unknown operation apache.service.
    root@ubuntu-218:/etc/php/7.0/apache2# systemctl status apache2.service
    ● apache2.service – LSB: Apache2 web server
    Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
    Drop-In: /lib/systemd/system/apache2.service.d
    └─apache2-systemd.conf
    Active: failed (Result: exit-code) since Wed 2016-07-06 14:50:57 KST; 47s ago
    Docs: man:systemd-sysv-generator(8)
    Process: 21151 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
    Process: 21664 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)

    Jul 06 14:50:57 ubuntu-218 apache2[21664]: * The apache2 configtest failed.
    Jul 06 14:50:57 ubuntu-218 apache2[21664]: Output of config test was:
    Jul 06 14:50:57 ubuntu-218 apache2[21664]: [Wed Jul 06 14:50:57.909134 2016] [:crit] [pid 21676:tid 140491855640448] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
    Jul 06 14:50:57 ubuntu-218 apache2[21664]: AH00013: Pre-configuration failed
    Jul 06 14:50:57 ubuntu-218 apache2[21664]: Action 'configtest' failed.
    Jul 06 14:50:57 ubuntu-218 apache2[21664]: The Apache error log may have more information.
    Jul 06 14:50:57 ubuntu-218 systemd[1]: apache2.service: Control process exited, code=exited status=1
    Jul 06 14:50:57 ubuntu-218 systemd[1]: Failed to start LSB: Apache2 web server.
    Jul 06 14:50:57 ubuntu-218 systemd[1]: apache2.service: Unit entered failed state.
    Jul 06 14:50:57 ubuntu-218 systemd[1]: apache2.service: Failed with result 'exit-code'.

    1. mpm_event 를 사용하시려면 nginx 를 사용하셔야 할것 같습니다.
      또는 libapache-php 대신 php-fpm + mod_proxy 로 구축해야합니다.

  38. 좋은글 감사합니다. 아직 확실치 않지만 저도 APM 설치만은 성공한 것 같습니다.

    저는 좀 다른 질문을 드리고 싶은데
    저의 경우 vmware에 ubuntu을 설치하였습니다.
    그렇다보니 설명해주신 설정은 직접 ubuntu 안에서 vi로 진행을 하였는데 영 불편하였습니다.

    게다 일부 캡쳐해주신 사진을 보면 쫌 뭔가 다른 환경을 사용하고 계신 것 같은데… (색깔이 알록 달록)
    #vi /etc/apache2/conf-available/security.conf

    본격적으로 PHP 코딩 연습을 위한 최적의 환경셋팅을 좀 알 수 있을까요?
    추가로 설치해야 하는 프로그램 뿐만아니라 좀 더 편하게 입력할 수 있는 코딩 방식이나..
    vi는 아직 초보이다보니 빠른 php 학습을 위해서 일반 edit이면 더 좋을 것 같습니다만…

    1. 답을 하기 어려운 모호한 질문입니다.
      모호한 답변 드립니다.
      최적의 PHP 코딩을 위해서 맥을 구입하세요.

  39. 마리아디비(mysql) 에러가 나네요
    유저생성 디비생성했는데
    php랑 연결이 안되네요
    세번 다시 깔았는데도 그대로네요
    ps -ef | grep mysql 하니깐
    mysqld 에러라고 나오네요
    그대로 따라했는데 1604 버전에서
    php 에서 디비연결 실패 ㅜㅜ
    궁금합니다.

    1. 서버를 다시 생성한 후 시도해보세요.

  40. 위에 Wheesly님 처럼
    13번 웹사이트 Apache 환경설정파일 작성 부분에서 저도 “쓸 파일을 열 수 없습니다” 라는 메시지가 표시되면서 더 이상 진행이 안 되었습니다.

    그런데 본문의 흐름상 myuser1 계정에서 www 폴더를 만들고 난 후 바로 /etc/ 밑에 vi 파일을 생성해서 문제가 된 것 같습니다.
    myuser1에서 sudo 로 권한을 부여할려고 해도 sudoers file에 없다라고 해서 안되고요.

    그래서 그냥 다른 터미널에서 root 계정 들어가서 만들었습니다.

    1. mkdir www 후에는 exit 명령어를 통해 다시 root 계정으로 복귀해야 합니다.

      1. 아 그렇군요. 감사합니다.

  41. 안녕하세요~~
    글 보고 APM 설치를 했는데요..
    php에서 mysql_connet가 되지 않아 문의드립니다..ㅠㅠ
    php와 mysql 연동이 안되면 그런다고 하는데..
    위에 글

    에러는 이렇게 났구요..

    Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/sign.php:9 Stack trace: #0 {main} thrown in /var/www/html/sign.php on line 9

    내용은 이렇게 했습니다~~

    1. mysql_connect 함수는 PHP7.0 에서 제거되었습니다. 대체 함수를 사용해주세요.

  42. 서버 하나 임대해서 우분투14.04 새로 설치를 했는데요. 이상한 현상 때문에 질문 좀 드립니다. 아파치/php5 다 설치를 했고, 유저계정 하나 생성을 했는데요. 새로 생성한 유저 계정에서는 apache2 가 보이지를 않네요. ps -ef | grep apache2 해보면 안나옵니다. 그런데 루트 계정에서는 아파치가 돌아가고 있고요. 이 부분은 대체 어디를 살펴봐야 하나요? 구글검색을 해봐도 이런 경우가 안나오네요.

    1. 새로 설치한 환경에서 해당 현상이 발생한다면 저도 잘 모르겠네요.

  43. 님하…………
    윈도우에다가 APM 설치했는데
    외부접속 잘 되던게 갑자기 안됨………
    학교 고정IP인데 잘 쓰다가 어느날 갑자기 먹통임..
    내부망에선 접속 잘 됨….
    방화벽 다 풀고 80포트 허용했는데도 외부에서 접근이 안됨…….
    웹 검색을 아무리 해도 답이 안나옴

    혹시 이유를 알고있음????????/

    1. 외부 -> 내부라우터 -> 내부 로 트래픽이 들어올텐데
      내부라우터에서 막았을껄. 전산원에 전화해보셈.

  44. 안녕하세요..

    마리아DB를 설치하고 phpmyadmin 을 설치하면 설치과정에 에러가 발생하는데 phpmyadmin을 설치하는 법좀 알려주실 수 있습니까?

    1. 안녕하셔요 https://blog.lael.be/post/2600 이 글의 15-2) 연동테스트2 항목을 참조해주세요.

  45. 정말 유용한 정보입니다.
    북마크해놓고 필요할때마다 보고 갈께요~ 감사합니다

  46. 공유기로 연결한 서브컴퓨터에 웹서버 구축중입니다
    내부IP 고정
    iptime 에서 제공하는 ddns 도메인 등록
    도메인 구매한곳에서 iptime에 등록한 ddns와 도메인 연결 후
    외부에서 도메인 접속시 접속가능합니다

    근데 .. 루트폴더를 기본 /var/www/html 이 아니라
    새로 생성한 계정의 /home/dev/www/ 로 설정을 했는데
    /home/dev/www/ 로 기본 디렉토리가 잡히지 않네요

    a2ensite 로 적용도 해주고
    a2dissite 로 기존파일도 해제하고
    기존 000-default.conf 파일도 아에 확장자명을 바꿔서 없는데도 루트폴더가 잡히지 않습니다,.
    어떻게 해야 하나요 ㅠㅠ

    1. 000-default.conf 파일을 경로에 맞추어 적절히 수정하세요.

  47. 토드 for mysql 로 외부접속이 안되네요.
    16.04에 nginx 설치하고 세팅하는거 따라할땐 되는데 이글을 보고 아파치를 설치하면
    my.cnf 파일경로도 이상하고 50-sever.cnf에서 bind-address 주석을 달고 root에 모든아이피 허용을 해도
    외부접속이 안되네요.
    해결방법이 있을까요

    1. 혹시나 본문의 IPTABLES 설정을 따라했다면 # iptables -F 명령어 실행 후 외부접속을 시도해보세요.

      1. 그렇게 해도 안되네요 ㅠ

  48. 일단 감사하단 말씀 드리고.. 덕분에 웹서버구축 잘 하고있습니다

    ssl 설정은 설명 해놓으신대로 했는데 안되네요 ..
    8월 30 00:51:23 dev apache2[20908]: * The apache2 configtest failed.
    8월 30 00:51:23 dev apache2[20908]: Output of config test was:
    8월 30 00:51:23 dev apache2[20908]: AH00526: Syntax error on line 51 of /etc/apache2/sites-enabled/si
    8월 30 00:51:23 dev apache2[20908]: SSLCertificateFile: file ‘/home/dev/ssl/mysite_ssl.crt’ does not exist
    8월 30 00:51:23 dev apache2[20908]: Action ‘configtest’ failed.
    8월 30 00:51:23 dev apache2[20908]: The Apache error log may have more information.

    위 나와있는 경로는 수정한 것이구요..
    문법 에러가 난다고 나와있지만 문법도 정확합니다.. 절대 틀리지 않아요..
    구글링 해보니까 저랑 같은 증상인 외국인 분들도 좀 보이긴 했는데..
    그분들의 답변을 따라해도 안됐습니다..

    그래서 이리저리 찾아보다가
    /etc/ssl/certs
    /etc/ssl/private
    폴더에 있는 crt파일과 key 파일이 있어서 이쪽으로 경로를 잡아줬더니
    아파치 재시작은 정상적으로 작동됐습니다..
    근데 위와 같은 에러는 나지 않지만 ssl 체크하는 사이트에서는 ssl 적용이 안되어 있다고 나오네요 ..

    ssl 설정법 포스팅해주신 대로 하면 되는게 확실한가요..?ㅠㅠ
    처음부터 끝까지 동일하게 웹서버 구축 따라했습니다..
    우분투 최신lts 아파치 php maria.. 왜안됄까요 ..

    1. SSL 은 먼저 돈내고 인증기관에서 인증서를 발급받아야 합니다. 그럼 인증기관에서 인증서 파일을 주는데 그 파일을 서버에 업로드하고 경로 설정해주면 그 후 부터 동작하는 것입니다.
      인증서 파일이 없거나 올바르지 않은 비공인 인증서인 경우 SSL 검사에서 실패하게 됩니다.

  49. 정말 좋은 정보를 잘 정리해서 공유해주셨네요.
    고맙습니다.

    1. 감사합니다! 이제 멋진 것을 만들어보세요!

  50. 현재 AWS위에 라라벨 동작시킬려고 예제보면서 많은 도움을 얻었습니다.
    제가 이쪽일을 안한지 2년 (군대.. ㅠㅠ)가 되다보니 많이 헷갈리네요 labe.be 버추얼 설정 부분에서
    000-default.conf 부분은 안건드리신건지요? 이상하게 a2enable로 버추얼 설정 활성화해도
    도메인 연결부분에서 로그확인하니 계속 var/www/html 이쪽으로 아파치가 연결해버리네요.

  51. client denied by server configuration 라는 에러 뜨는 것 확인했습니다.
    구글링결과 2.2에서 2.4로 넘어가면서 require all granted로 바꾸면 된다는게 대다수의 해결법인데 저는 안되네요 ㅠ

    1. 도메인이 없으신거죠?
      #vi /etc/apache2/conf-available/security.conf

      의 제일 상단 부터 까지 주석처리(#) 하신후 아파치 재시작해 보세요.

  52. APM 설치를 끝내고 워드프레스를 압축 풀어서 설치해보고 있는데 wp_config 자동생성이 안되더라구요.. 그래서 wp_config를 수동으로 입력해서 접근하니 워드프레스 설치까진 완료되었습니다!! 그런데 테마 설치를 하려니 웹서버에 접속해야 한다고 FTP인증이 필요하다고 하는데 호스트, FTP 아이디와 비번을 입력해도 연결이 되지 않습니다. ㅠㅠㅠㅠ 원인이 뭘지 혹시 의심가는 부분이 있을까요?

    1. 방법을 찾았습니다..! wordpress 폴더에 접근가능한 소유자가 아니라 (워드프레스가 root 권한을 가지고 있지 않아서.. www-data라는 소유자 이름을 가지고 있고) 설치를 못하는 것이더군요..
      http://dezang.net/600
      이 게시글 참고했고, 혹시 저와 같은 이슈가 생기신 분들은 참고하시면 좋을 것 같아요. 그치만.. 폴더마다 접근권한을 다르게 주고 관리하는게 익숙하지 않아서 복잡하네요. 가상서버 호스팅을 하고 APM 설치가 안되어 있다는 걸 나중에 깨달아서 여기까지 왔는데 쉽고 처음부터 끝까지 설명해주셔서 정말 감사합니다!

  53. 안녕하세요? 서칭하다가 여기까지 들어오게 됐습니다. 좋은 정보 감사드리고…
    질문이 있습니다.
    제가 워드프레스 플러그인으로 Let’s Encrypt 를 일단 적용시켰는데 SSLLabs 에서 A-가 뜨더라구요.
    이유는 Forward Secrecy 때문이었습니다.
    여기 본문에 SSL 설정관련 부분이 눈에 띄길래 SSLCipherSuite 블라블라~~ 랑 SSLHonorCipherOrder on 를 서버 설정파일에 추가시켜봤더니 SSLLabs 에서 A가 뜨던데요,
    본문 SSL 내용 중에 Forward Secrecy 관련 설정만 떼어서 적용해보고 싶은데, 관련사항이 어느 부분인지를 좀 알려주실 수 있을까요?
    (워드프레스 플러그인 기본설정+Forward Secrecy 관련설정 하면 A+ 받을 수 있을 것 같습니다. 도와주세요.ㅠㅠ)

    1. 안녕하세요.
      A 에서 A+ 로 올라가기 위해서는
      Header always set Strict-Transport-Security “max-age=31536000”
      구문을 추가하시면 됩니다.
      이때 headers 모듈이 켜져있어야 합니다. 혹시 구문에러가 날 경우 #a2enmod headers 명령어로 해당 모듈을 켜주세요.

      1. 두서없는 질문임에도 포인트 잡아내어 도움말씀 주셔서 감사합니다.
        알려주신 대로 따라했더니 얼떨결에 A+로 올라섰습니다.
        도통 해결책을 못찾아서 답답했었는데 덕분에 해결하게 돼서 기쁩니다.^^

  54. 좋은정보 너무 감사히 보고 서버 구축은 잘 했습니다.
    그리고 홈페이지(XE)까지 잘 만들었는데 해결 안되는 부분이 있어서 이렇게 질문 글 남깁니다.
    회원가입시 메일인증을 하고 싶은데 위에 알려주신데로 sendmail까지 설치했는데 테스트 결과
    인증메일 전송이 안됩니다. 혹시 다른 셋팅부분이 있나요? ^^

  55. 헉!! 지금 확인하니 메일전송이 됐습니다. 감사감사합니다. ^^
    항상 건강하시고 복 많이 받으세요~~~

      1. 이상하게 어제 드림위즈로는 인증메일이 왔는데 오늘 네이버로 테스트 해 보니
        인증메일이 안 오네요;;; 검색 해 본 결과 화이트도메인 등록을 하면 된다고 합니다.
        그래서 https://www.kisarbl.or.kr/ 로 등록하러 갔더니 아래와 같은 안내문이 있더군요

        ‘SPF Record를 손쉽고 간편하게 작성할 수 있도록 도와드립니다 .
        이 곳에서는 SPF Record를 작성하는 것만 지원해 드릴 뿐,
        실제로 귀사(하)의 DNS 에 SPF Record가 출판되는 것은 아닙니다.
        아래 절차에 따라 작성된 SPF Record를 DNS ‘zone file’에 출판하시기 바랍니다.’

        이게 무엇을 어떻게 하라는건지 이해를 못하겠습니다.
        아니면 화이트도메인 등록없이 해결 할 방법은 없는건지 궁금하네요 ^^

        1. XE에서 메일을 보내려면 다음의 모듈을 사용하세요.
          이 모듈은 매월 10000건의 메일을 무료로 보내줍니다.
          http://woorimail.com/ggmailing_manual

  56. /etc/nginx/conf.d/default.conf
    server {
    listen 80 default_server;
    server_name localhost;
    root /usr/share/nginx/html;

    return 444;
    }

    default.conf 를 모두차단하였습니다.
    혹시 444 말고 특정웹페이지로 리다이렉트 시킬 수 있을까요?

  57. SSD 가상서버호스팅(카페24)에서 가상서버가 만들어져 있는 상태에서 하드 포맷하고 우분투부터 다시 설치하려면 어떻게 합니까? 쉘 명령어를 통해 인터넷으로 우분투 이미지를 다운로드 받아서 설치가 가능한지요? 급해서 문의드립니다. 아무리 찾아도 USB 설치밖에 없고 또 개인 서버에 설치하는 방법만 인터넷에 돌아다니네요.

    1. 카페24는 운영체제 재설치가 불가능합니다.

  58. 외부에서 putty로 ssh에 연결을 하면 연결이 안되는데 원인을 모르겠습니다.
    혹시 다른 뭔가를 설정해야 하나요? ^^

    1. #apt-get install ssh 를 해보시거나 방화벽을 확인해보세요.

  59. 안녕하세요.
    정보보안 학과를 재학중인 대학생입니다.
    제가 나름 블로그를 운영중인데, 리눅스 서버를 구축하여 방화벽 설정후 그 위에 snort 를 올리는 공부를 하려고 합니다.

    혹시 해당 글을 제 블로그에 링크를 걸어서 포스팅 해도 될까요?

    이 글을 기본 세팅으로 하려고 합니다.

    http://blog.naver.com/dbrtnakswja 블로그 입니다.

    1. 네 허용합니다. 감사합니다.

  60. 안녕하세요
    순서대로 따라하던 도중
    14) 사이트 활성화 및 적용

    명령어는
    #a2ensite 사이트환경설정파일명
    입니다.

    #a2ensite lael.be
    (참고로 사이트 비활성화는

    #a2dissite lael.be
    입니다.)

    – 아파치 설정 다시 불러오기(적용을 위해)

    #service apache2 reload
    이부분에서 reload를 시키니
    Job for apache2.service failed because the control process exited with error code. See “systemctl status apache2.service” and “journalctl -xe” for details.
    이런 오류가 발생해서 restart도 start도 reload 모두 저런 오류가 뜨게 됩니다.
    왜 이런지 알려주실 수 있나요 해결방법도 부탁드립니다.

    1. #tail -50 /var/log/apache2/error.log 를 입력하여 자세한 에러메시지를 살펴보세요.
      아마 환경설정파일에 오타가 있을 것으로 추정됩니다.

      1. 빠른 답변 감사합니다.
        문제가 lael.be.conf에서 문제가 있었네요
        server alias부분 두줄을 주석처리하니 잘 됩니다.

  61. db외부접속 만들고 있습니다.
    50-server.cnf에서 bind-address를 주석처리하였습니다.
    그런데 mysql restart만으로는 변경사항이 적용이 안됩니다.
    서버를 reboot하면 적용이 됩니다.

    서버 reboot없이 적용방법이 없을까요?

    1. db 외부접속은 bind-address 를 주석처리하고, mysql 사용자계정 생성시 host 값을 % 로 적용하면 됩니다.
      #service mysql restart 로 동작해야 합니다.

  62. /etc/apache2/conf-available/security.conf 에서
    보안설정 Header set X-Frame-Options: “sameorigin” 때문에 iframe이 되지 않는 경우가 있네요..
    예를 들면 http://troy.labs.daum.net/ 같은 view에서 해당 옵션때문에 안보이는데 해결방법이나
    예외 처리 방법이 있을까 합니다.

    2번째는 외부링크로 발송시 (예를 들어 카카오스토리로 글을 보낼때) 링크를 불러오지
    못하는 현상인데.. 아직 찾지를 못했네요.. 아시는것이 있는지..

    댓글 남겨봅니다~

    1. 안녕하세요.
      Header set X-Frame-Options: “sameorigin” 옵션으로 인해서 문제가 생기면 해당 구분을 지우시면 됩니다.
      iframe 허용 옵션인데 지워도 운영상의 문제는 발생하지 않습니다.

      2번 링크를 못불러오는 것은 서버상의 문제는 아니며, html 태그상에 오픈그래프(open graph) 설정이 되어있는지 확인해보세요.

  63. 안녕하세요 ! 포스팅 잘 봤습니다 !

    제가 지금 ㅠㅠ 일하면서 db랑 서버랑 다 사용해서 웹을 만들어야하는데요..
    환경조건이.. 1. 리눅스로 작업 2. git에 올려논 소스에서 해당 parameter를 웹으로 띄워 값을 변경할 수 있게 만들어야함!
    이건데요 ㅠㅠ

    아 도저히 감이 오지를 않습니다;; 그럼 그 git 소스 자체에 서버를 세팅해서 올려서 사용해야하는건지… ㅠㅠ
    진짜 따로 과외를 받고싶은심정입니다.. 어떻게 해야하는걸까요??;;;

    1. 안녕하세요. 글을 잘 써주시긴 했는데 무슨뜻인지 모르겠네요..

      1. 아…

        다시 찬찬히 기술해보겠습니다..;; 제가 말주변이 없어서..ㅠ
        리눅스 환경에서 개발해야하구요..
        git에 다른분이 올려노신 소스를 사용하는데.. 그 소스가 HW장비에 올라가는 SW입니다.
        이 SW에 장비에서 세팅하는 값(parameter)들이 몇가지가 있는데요. 이 값들을 웹을 통해서 변경 수정하고싶은거죠…!
        그 웹 사이트를 개발해야하는 것을 맡았습니다..
        대충 아파치 사용해서 올리라는데..
        이 웹서버를 그냥 단순히 제 컴에 세팅해야하는지 , 이 git 소스 안에 직접 세팅해야하는지 이해가 안되는것이 질문의 요지입니다..;;

        ㅠㅠ 이해가 되시련지 …에궁..
        댓글 감사드립니다.!

        1. 그러니까 웹에서 세팅값 입력하면 git 에 올라간 소스 다운받은 후에 세팅값 설정하고 사용할수 있게 zip 파일로 변환되는걸 원하시는거군요?

  64. 시행착오는 있었지만 좋은 포스트로 쉽게 개인 서버를 구축했습니다. 감사합니다. 한가지 문제가 있는데 해결을 못해서 댓글 남깁니다.
    아파치 서버에 ssl 적용해서 서버구축했는데 기존에 사용하던 트랜스미션이 접속이 안되네요. http://도메인/transmission으로 접속하면 https 로 접속되어 트랜스미션을 사용못하고 있습니다. 어떻게 해결을 해야할지… 검색이 쉽지않네요 ㅠㅠ

    1. 안녕하세요.
      SSL를 강제로 사용하도록 규정하는 것을 HTTP Strict Transport Security 라고 합니다.
      이 값을 사용하면 브라우저 자체에서 https 로 프로토콜을 바꾸어 접속하게 됩니다.

      강제 SSL 사용을 사용하지 않으려면 해당 site conf 파일에서
      Header always set Strict-Transport-Security “max-age=31536000”
      구문을 주석처리(#)하거나 삭제해주십시요.

      Strict Transport Security 규칙은 브라우저에 저장되며, 수동 초기화가 필요합니다.
      크롬의 경우 주소창에 chrome://net-internals/#hsts 를 입력 후 delete domain 에 해당 도메인을 입력한 후 delete 하시면 초기화가 됩니다.

  65. 안녕하세요.
    위와 같이 세팅하고 실서버를 운영해보고 있습니다.
    그런데, 방문자수가 급격히 늘어나면 ttfb가 급격히 늘어나면서
    접속이 되었다 안됬다 하는 경우가 발생하고 있습니다.

    서버 cpu와 램은 여유분이 있는 상태입니다.
    db쪽 문제인가 싶어서 max_connections 값을 증가도 시켜보았는데
    별 효과를 못보고 있습니다.
    오픈파일 문제인가 싶어서 증가시켜보았지만 효과가 없습니다.

    추측해볼만한 문제가 있을까요? 검색에 걸리는게 잘 없네요.
    ps.포스팅 정말 감사합니다.

    1. 안녕하세요.
      글 최하단의 옵션 ) 서버 동시접속자 설정 변경하기 적용해 보셨나요?

  66. iptables 관련해서 찾다가 이 블로그에 들어오게 되었는데요
    와 진짜 하나 부터 열까지 정리해주셔서 감사합니다.
    내용도 바로 적용가능해서 진짜 최고입니다!!

    1. 최대한 쉽게 설명하려고 노력하고 있습니다. 감사합니다!

  67. phpmyadmin 설치 후
    http://xxx.com/dbmyadmin 으로 접속하면 접속이 안됩니다.
    /var/www/html 루트말고 가상호스트 루트에 설치 해야되건가요?
    /home/myuser1/www

    아니면 다른방법으로 심볼릭으로 링크 걸어야 하는건가요?

    1. /var/www/html 루트말고 가상호스트 루트에 설치해야합니다.

      1. 답변감사합니다.
        그럼 다른 계정 두번째 계정에서 가상호스트에서 phpmyadmin을 사용하고 싶으면
        거기에 또 설치를 해야 하는건가요?

        myuser2
        /home/myuser2/www
        이 루트에 또 설치를 하는건가요?

        1. 사용하고 싶은 호스트에 똑같이 생성하시면 됩니다.
          어차피 모두 같은 동작을 하니, 보안상 하나의 호스트에만 생성하는것을 추천드립니다.

  68. 안녕하세요?
    라엘님 덕분에 개인서버를 유용하게 쓰고 있는 누군가입니다

    현재 주로 아파치를 이용해 주 웹서버로 쓰고 nginx를 리버스 프록시로 쓰고 있는데요
    어쩌다보니까 인덱싱이 필요한 페이지를 구축할 필요가 있어서 아파치로 하려고 했더니
    #a2dismod -f autoindex 의 명령어 때문에 인덱싱이 불가능하더군요
    >아니면 특정 루트만 인덱싱이 가능하도록 하는게 아파치 설정으로 가능한가요?

    보안상때문에 이걸 풀 수도 없어서 아파치에서 nginx포트쪽으로 리다이렉팅 하도록 설정한 다음
    nginx에서 특정포트를 열어 인덱싱 하도록 설정하였습니다.
    하지만 이렇게 하다보니 443포트를 쓰지 않아서 letsencrypt가 인증서 오류를 나타내군요
    이건 아파치의 리버스 프록시로 아마 해결 가능하겠지만
    >letsencrypt가 443포트 외에 적용이 가능한지 알아봐주셨으면 합니다.

    참고로 저는 메일의 수발신이 가능한 개인메일서버의 구축도 성공하였습니다~

    그리고 이런 도움이 되고 정리가 잘 된 글을 써주셔서 항상 감사드립니다~!

    1. autoindex 는 끄면 보안에 향상이 되지만 켠다고 해서 크게 문제되지 않습니다. 해당 모듈을 켜면 됩니다.
      개인 메일서버 구축을 축하드립니다. 다만 메일서버의 직접 운영은 권장하지 않습니다.
      감사합니다.

  69. 안녕하세요. 저는 좋은 글을 써 주셔서 이 글을 보며 차근차근 따라해가는 학생입니다.
    다름이 아니라 위의 글의 13번 부분에서 에러가 나는데 어느 부분이 잘못된 것인지를 잘 모르겠어서 이렇게 질문 드립니다.
    13번 웹사이트 환경설정파일 작성 부분에 나온대로 환경설정파일 내용을 만들어 vi에 작성해주고 인증서와 암호화 통신을 확인하는 링크에 들어가 확인해보았는데 인증서에서는 ssl에 대한 에러가, 암호화 통신에서는 서버에 연결할 수 없다는 에러가 났습니다. 제가 처음 서버를 해보는 것이여서 어느 것이 잘못된 것인지 잘 모르겠어서 이렇게 질문 드립니다. 도움 부탁드려요ㅠㅠ

    1. 미리 발급된 인증서 파일이 있어야 ssl 을 적용할 수 있습니다.
      ssl 부분 구문을 제거하고 구축한 후에 https://blog.lael.be/post/5107 글을 읽고 인증서를 발급받은후 ssl 적용 재도전을 해보세요.

  70. # systemctl status apache2.service 명령어를 입력해보면 아래와 같은 메시지가 있고요..

    ● apache2.service – LSB: Apache2 web server
    Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
    Drop-In: /lib/systemd/system/apache2.service.d
    └─apache2-systemd.conf
    Active: active (running) (Result: exit-code) since Tue 2017-02-21 17:34:02 UTC; 9h ago
    Docs: man:systemd-sysv-generator(8)
    Process: 17518 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
    Process: 19814 ExecReload=/etc/init.d/apache2 reload (code=exited, status=1/FAILURE)
    Process: 17544 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
    Tasks: 7
    Memory: 21.4M
    CPU: 1.487s
    CGroup: /system.slice/apache2.service
    ├─17561 /usr/sbin/apache2 -k start
    ├─19190 /usr/sbin/apache2 -k start
    ├─19191 /usr/sbin/apache2 -k start
    ├─19192 /usr/sbin/apache2 -k start
    ├─19193 /usr/sbin/apache2 -k start
    ├─19194 /usr/sbin/apache2 -k start
    └─19195 /usr/sbin/apache2 -k start

    Feb 22 02:37:33 ip-172-31-28-4 systemd[1]: Reloading LSB: Apache2 web server.
    Feb 22 02:37:33 ip-172-31-28-4 apache2[19814]: * Reloading Apache httpd web server apache2
    Feb 22 02:37:33 ip-172-31-28-4 apache2[19814]: *
    Feb 22 02:37:33 ip-172-31-28-4 apache2[19814]: * The apache2 configtest failed. Not doing anything.
    Feb 22 02:37:33 ip-172-31-28-4 apache2[19814]: Output of config test was:
    Feb 22 02:37:33 ip-172-31-28-4 apache2[19814]: apache2: Syntax error on line 219 of /etc/apache2/apache2.conf: Could not open configuration file /etc/apache2/
    Feb 22 02:37:33 ip-172-31-28-4 apache2[19814]: Action ‘configtest’ failed.
    Feb 22 02:37:33 ip-172-31-28-4 apache2[19814]: The Apache error log may have more information.
    Feb 22 02:37:33 ip-172-31-28-4 systemd[1]: apache2.service: Control process exited, code=exited status=1

    1. 에러 메시지상으로는 /etc/apache2/apache2.conf 파일을 열 수 없다는 것이네요.
      혹시 작업하시다가 드래그를 잘못하여 다른 폴더로 이동시켰는지 확인해보셔요.

  71. 자료글 감사 합니다.

  72. http://111.222.333.444/dbmyadmin/
    부분에서 막히는데 이유가 뭘까요 ㅠㅠ

    1. “안돼요” 라는 것으로는 문제의 원인을 알 수가 없습니다.
      cat /var/log/apache2/error.log
      명령어를 통해 에러메세지를 확인해보세요.

  73. 안녕하세요! 질문할것이 좀 있습니다!
    Apache 환경설정파일 작성할떄 서브도매인마다 루트폴더를 다르게 하고싶은데..
    가능하나요.? 아니면 서브도메인마다 환경설정 파일을 생성해야되나요

    1. 안녕하세요!
      서브 도메인마다 환경설정 파일을 생성하면 됩니다.
      연결된 사이트가 아니라 전혀다른 사이트라고 생각하시면 이해가 쉬우실 거에요!

  74. 혹시 도움을 받을 수 있을까 싶어 글을 남겨 봅니다.
    저는 사이트의 root에서부터 https가 적용되도록 소스를 수정하였습니다.
    헌데 사용하다 보니 특정 경로에 대해서는 http가 되어야 하는 상황이되어 수정을 이것 저것 해 보았으나
    적용이 되지 않더라고요.

    국내에서는 답을 얻지 못하고 stackoverflow에 질문을 올린바 http https 각각의 모듈을 만들어 줘야 한다는 단답형의 답만 얻었습니다.

    이와 같은 경우 어떻게 conf 파일을 처리하면 될지 팁을 알려주실 수 있으실런지요?
    도저히 방향을 잡지를 못해 난감해 하고 있는 상황입니다.

    혹시나 하여 conf의 상위 소스만 첨부해 보았습니다.

    limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
    limit_req_zone $server_name zone=perserver:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=ddos_conn:10m;
    limit_req_zone $binary_remote_addr zone=ddos_req:10m rate=5r/s;

    server {
    listen 80;
    server_name .example.com;
    return 301 https://$host$request_uri;

    location / {
    limit_req zone=perip burst=5 nodelay;
    limit_req zone=perserver burst=10;
    limit_conn ddos_conn 10;
    limit_req zone=ddos_req burst=10 nodelay;
    }
    }

    server {

    listen 443 ssl http2;
    server_name .example.com;
    root /home/example.com/www;
    client_max_body_size 32M;

    1. http 도 사용할 수 있게 허용해 주세요.
      관련 구문은 본문에 나와있습니다.

  75. 안녕하세요. 작성해주신글로 서버 셋팅과 보안인증서까지 모두 마쳤습니다. 정말 감사드립니다! 한가지 여쭈어볼게 있어서 글을 남깁니다. 지금 /root/backup.sh 라는 파일에 ftp를 사용해서 백업서버에 데이터베이스 정보를 옮기는 스크립트를 짜놓고 cron으로 자동실행되게 하는것까지 했는데요. 이게 몇일 잘되다가 방화벽 설정을 위에 올려주신것처럼 한 이후로 백업된 파일크기가 0 으로 백업됩니다. 파일이름은 설정해준게 맞는데요. 혹시 이 문제가 방화벽 때문이 맞는지, 해결방법은 어떤게 있을지 궁금합니다.

    1. 하드디스크가 가득찬게 아닐까 추정됩니다.
      #df -h 명령어로 디스크 여유공간을 확인해주세요.

  76. 메인 서버의 하드디스크 용량은 35% 사용중이구 백업서버 용량은 1% 사용중이라서요.. lftp 로 백업서버 접속해서 put 명령어 사용해서 백업할 파일을 가져오면 정상적으로 가져와지는데. sh 파일을 실행시켜서 백업시키면 Connection refused 라고 뜨고 백업된 파일의 크기가 0 이 됩니다..

    1. 보내주신 내용으로 확인하지 못하였습니다.
      https://www.phps.kr/customer_faq_view.html?no=1003&faqType=&sType=on&faqVal=%EB%B0%B1%EC%97%85 메뉴얼을 참조하여
      sh 상의 백업 명령어를 수동으로 쉘에서 입력해보세요. 어느 단계에서 문제가 있는지 알 수 있을 것입니다.

      1. 원인은 방화벽이 확실한 것 같습니다. 방화벽을 초기화하고 backup.sh 를 실행했을 때 백업이 정상적으로 잘 됬습니다. 그리고 위에 작성해주신 방화벽 설정대로 설정을 해놓으면 다시 백업 파일의 사이즈가 0 인채로 백업이 됩니다.
        방화벽을 켜놓은채로 backup.sh 실행 내용에서는 ftp 로그인까지는 되고 파일을 옮기는 과정에서 Connection refused 라고 뜹니다! 이게 오류 내용같은데요.
        방화벽을 아예 하지 않을수도 없고..
        현재 백업서버는 가상서버와 로컬로 연결되어 있어서 외부에서는 접속이 되지 않는 상태입니다. 방화벽 설정을 위에 작성해주신거에서 어떤걸 수정하면 좋을지 궁금합니다..
        혹시 도움이 될지 몰라서 제가 지금 작성해놓은 방화벽 설정을 올려놓겠습니다!

        # Generated by iptables-save v1.6.0 on Wed Apr 19 10:59:30 2017
        *filter
        :INPUT ACCEPT [39:4649]
        :FORWARD ACCEPT [0:0]
        :OUTPUT ACCEPT [14:2466]
        :f2b-sshd – [0:0]
        -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
        -A INPUT -p icmp -j ACCEPT
        -A INPUT -i lo -j ACCEPT
        -A INPUT -s 집아이피/32 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
        -A INPUT -s 집아이피2/32 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
        -A INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT
        -A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
        -A INPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
        -A INPUT -j REJECT –reject-with icmp-host-prohibited
        -A FORWARD -j REJECT –reject-with icmp-host-prohibited
        COMMIT
        # Completed on Wed Apr 19 10:59:30 2017

        1. 쉘 파일에서
          ftp -n -v $REMOTE << EOF user $ID $PWD prompt bi 이 부분을 ftp -n -v $REMOTE << EOF user $ID $PWD prompt passive bi 로 바꾸어보세요.

          1. 흐어… 말씀해주신 내용으로 바꾸고 해결됬습니다.. 작성된 글만으로도 정말 많은 도움이 됬는데 귀찮으실텐데도 이렇게 도와주셔서 정말정말 감사드립니다!!! 행복하세요~!!

  77. 정말 대단하십니다.
    제가 어지간 해서는 흔적을 남기지 않는데,
    참으로 대단하셔서
    칭찬이 아깝지 않습니다.
    정말 감사합니다.
    복받으세요.

    1. 넵! 어서 멋진 것을 만들어주시고 나중에 한번만 기억해주셔요! 감사합니다!

  78. 와.. 대박! 글 정말 잘 보고 갑니다. 정리가 너무 잘되어 있어서 감탄사가 나올 수 밖에 없네요.
    Feedly 로 바로 구독하고 즐겨찾기해서 앞으로 더 잘 보겠습니다!
    글 멋지게 써주셔서 정말 고맙습니다! 🙂

  79. 댓글을 아니 달 수 없게 하는 글입니다. 어떤 교재보다도 좋습니다.
    책을 살 필요가 없군요…
    순서대로 따라가면서 드디어 웹서버라는 것을 처음으로 설치해보네요. 정말 감사합니다.
    한 줄 한 줄 읽는 자를 위한 배려가 느껴집니다. 정말 감사합니다.

    그리고 몇 가지 질문이 있습니다.
    1. vim /etc/apache2/conf-available/security.conf 에서 말씀하신대로 설정을 했는데.
    service apache2 reload 하게 되면 아래 Header 줄에서 에러가 발생한다고 뜨네요.
    주석처리된 것만 풀어줬는데 왜 그럴까요? ㅜㅜ
    Header set X-Content-Type-Options: “nosniff” —> line 63
    Header set X-Frame-Options: “sameorigin” —> line 70

    에러 구문은 아래와 같습니다.

    May 10 13:32:48 choon apache2[1365]: AH00526: Syntax error on line 63 of /etc/apache2/conf-enabled/security.conf:
    May 10 13:32:48 choon apache2[1365]: Invalid command ‘Header’, perhaps misspelled or defined by a module not includ
    May 10 13:32:48 choon apache2[1365]: Action ‘configtest’ failed.
    May 10 13:32:48 choon apache2[1365]: The Apache error log may have more information.
    May 10 13:32:48 choon systemd[1]: apache2.service: Control process exited, code=exited status=1
    May 10 13:32:48 choon systemd[1]: Reload failed for LSB: Apache2 web server.

    2. vim /etc/apache2/sites-available/lael.be.conf 에서 virtual host 설정하는 부분이요..
    설정자체는 문제가 없었는데, 한 가지 궁금한 것이..
    이것을 설정을 해도 web root directory가 바뀌지 않고
    여전히 /var/www/html/ 가 root directory가 되는데 어떻게 바꾸어 주는건지요?
    혹시 위의 설정이 root directory를 바꿔주는 구문이 아닌데 제가 잘못 이해하고 있는 건지요?

    1. 안녕하세요!
      현재 페이지 본문에서 a2enmod headers 와 a2ensite 라는 단어를 찾아서 살펴보세요!
      찾기 단축키는 컨트롤+F 입니다.

  80. 좋은글 감사합니다.
    .html 파일에서 php 구문이 실행이 안됩니다. 도움 부탁드립니다.
    여기저기 검색해보고 변경해봤는데.. 해결이 잘 안돼네요.

    Apache/2.4.18 (Ubuntu)
    PHP 7.0.15-0ubuntu0.16.04.4 (cli) ( NTS )

    1. 안녕하세요. .html 파일에서 php 구문을 실행하는 것은 큰 보안 문제를 야기합니다.
      따라서 방법을 알더라도 알려드리지 않습니다.
      감사합니다.

  81. 안녕하세요!
    라엘님 질문입니다.

    1) https://blog.lael.be/post/5107

    SSLCertificateFile “/etc/letsencrypt/live/myuser1/cert.pem”
    SSLCertificateKeyFile “/etc/letsencrypt/live/myuser1/privkey.pem”
    SSLCertificateChainFile “/etc/letsencrypt/live/myuser1/chain.pem”

    2) https://blog.lael.be/post/73

    SSLCertificateFile “/home/myuser1/ssl/mysite_ssl.crt”
    SSLCertificateKeyFile “/home/myuser1/ssl/mysite_ssl.key”
    SSLCertificateChainFile “/home/myuser1/ssl/mysite_ssl.certchain.crt”

    1번째 방법(경로)으로는 인식이 되는데

    2번째 방법(경로)은 인식이 안됩니다.
    “/etc/letsencrypt/live/myuser1/cert,chain,fullchain,privkey 를 복사해서
    /home/mysuer1/ssl 폴더를 만들고 붙여넣기했습니다.

    오류가 나옵니다.

    1. 파일명이나 경로에 오타가 있었을 것으로 추측됩니다.
      1번 방법으로 정상동작한다고 하니, 해당 방법으로 처리하시면 될 것 같습니다.

    2. /home/myuser1/ssl 폴더를 만들고 붙여넣기했습니다.

      mysuer라고 오타가 나있네요 🙂

  82. 우분투 서버 설정이 처음이라 좋은 정보 잘 보고 따라 해보는 중입니다.

    참고로 제 경우 DB 설치시 일어난 현상을 공유합니다.
    제가 서버 세팅에 익숙치 않아서 어떻게 해결하면 되는지 잘 모르겠네요.

    # cat /etc/issue
    Ubuntu 16.04.2 LTS \n \l
    # mysql -V
    mysql Ver 15.1 Distrib 10.0.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

    라엘님이 기술 한 매뉴얼 부분중
    “10 – 1) MariaDB 설치” > “root 의 인증 플러그인 정보 제거하기” 부분의..

    use mysql;
    update user set plugin=’unix_socket’ where User=’root’;
    flush privileges;
    exit;

    과정을 진행한 후

    #service mysql restart
    명령을 실행 하면, 터미널 화면에는 별다른 에러가 없는 듯 했습니다만…
    로그 파일을 보니 Fail 이 뜨면서 정상적으로 재시작이 안되는 현상이 있었습니다.
    ( tail -f /var/log/syslog 로 모니터링 했던 에러 로그 내용을 부분적을 첨부합니다.)

    Jul 21 13:20:51 testserver01 systemd[1]: Stopping LSB: Start and stop the mysql database server daemon…
    Jul 21 13:20:51 testserver01 mysql[17657]: * Stopping MariaDB database server mysqld
    Jul 21 13:20:51 testserver01 mysql[17657]: …fail!
    Jul 21 13:20:51 testserver01 systemd[1]: mysql.service: Control process exited, code=exited status=1
    Jul 21 13:20:51 testserver01 systemd[1]: Stopped LSB: Start and stop the mysql database server daemon.
    Jul 21 13:20:51 testserver01 systemd[1]: mysql.service: Unit entered failed state.
    Jul 21 13:20:51 testserver01 systemd[1]: mysql.service: Failed with result ‘exit-code’.
    Jul 21 13:20:51 testserver01 systemd[1]: Starting LSB: Start and stop the mysql database server daemon…
    Jul 21 13:20:51 testserver01 mysql[17682]: * Starting MariaDB database server mysqld
    Jul 21 13:20:51 testserver01 mysql[17682]: …done.
    Jul 21 13:20:51 testserver01 systemd[1]: Started LSB: Start and stop the mysql database server daemon.

    결과적으로 Fail 이 뜨면서 mysql 이 제대로 재실행 되어 지지 않는 듯 해서
    다시 root 가 unix_socket 인증을 사용하도록 아래와 같이 설정했습니다.

    use mysql;
    update user set plugin=’unix_socket’ where User=’root’;
    flush privileges;
    exit;

    이후에는

    Jul 21 13:56:28 testserver01 systemd[1]: Stopping LSB: Start and stop the mysql database server daemon…
    Jul 21 13:56:28 testserver01 mysql[1729]: * Stopping MariaDB database server mysqld
    Jul 21 13:56:29 testserver01 mysqld: 170721 13:56:29 [Note] /usr/sbin/mysqld: Normal shutdown
    Jul 21 13:56:29 testserver01 mysqld:
    Jul 21 13:56:29 testserver01 mysqld: 170721 13:56:29 [Note] Event Scheduler: Purging the queue. 0 events
    Jul 21 13:56:29 testserver01 mysqld: 170721 13:56:29 [Note] InnoDB: FTS optimize thread exiting.
    Jul 21 13:56:29 testserver01 mysqld: 170721 13:56:29 [Note] InnoDB: Starting shutdown…
    Jul 21 13:56:29 testserver01 mysqld: 170721 13:56:29 [Note] InnoDB: Waiting for page_cleaner to finish flushing of buffer pool
    Jul 21 13:56:31 testserver01 mysqld: 170721 13:56:31 [Note] InnoDB: Shutdown completed; log sequence number 1616737
    Jul 21 13:56:31 testserver01 mysqld: 170721 13:56:31 [Note] /usr/sbin/mysqld: Shutdown complete
    Jul 21 13:56:31 testserver01 mysqld:
    Jul 21 13:56:31 testserver01 mysqld_safe: mysqld from pid file /var/run/mysqld/mysqld.pid ended
    Jul 21 13:56:32 testserver01 mysql[1729]: …done.
    Jul 21 13:56:32 testserver01 systemd[1]: Stopped LSB: Start and stop the mysql database server daemon.
    Jul 21 13:56:32 testserver01 systemd[1]: Starting LSB: Start and stop the mysql database server daemon…
    Jul 21 13:56:32 testserver01 mysql[1766]: * Starting MariaDB database server mysqld
    Jul 21 13:56:32 testserver01 mysqld_safe: Starting mysqld daemon with databases from /var/lib/mysql

    정상적으로 재시작 되고 pid 값도 갱신되어 지는 듯 합니다.

    unix_socket 인증을 사용해야만 문제없이 service mysql [command] 를 실행 할 수 있는 것인지.. 궁금하네요

    읽어주셔서 감사합니다.
    좋은 하루 되세요.

  83. 다중사이트를 만들다가 한가지 문제에 봉착하여 문의 드립니다.
    우선 친절한 설명 감사드립니다.
    다른 부분은 라엘님의 가이드를 따라 대부분 작업을 마쳤습니다.
    아래 한가지만 빼구요.

    아파치의 가상호스트를 통해 각각 개별 도메인이 연결된 2개의 워드프레스를 운영하고자 하였습니다.
    가상호스트 구성에 대한 부분은 아래의 링크를 따라 구성하였습니다.
    https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-16-04

    이후 워드프레스를 설치하기 위해 해당 링크의 /etc/apache2/sites-available/의 설정 파일들을
    기존 /var/www/example.com/public_html 및 /var/www/test.com/public_html를
    /var/www/example.com과 /var/www/test.com로 변경하였습니다.

    그리고 워드프레스를 변경한 위치의 각각의 디렉토리에 개별 설치 했습니다.

    그리고 설치를 완료하기 위해 브라우저로 해당 URL로 접속하면
    /var/www/example.com과 /var/www/test.com 아래에 설치된 워드프레스가 아닌
    기존 /var/www/example.com/public_html 및 /var/www/test.com/public_html로 접속이 됩니다.
    public_html폴더와 하위 파일을 지우고 접속해도 동일한 기존 위치로 연결하는 것 같습니다.(404로 표시됨)

    혹시 어떤 부분의 문제인지 알 수 있을까요?

    13번의 버추얼 호스트 구문 중 https 사용시 구문으로 적용했습니다. 될 수 있다면 해당 구문의 내용도 좀 알고 싶습니다.

    긴글 읽어 주셔서 감사합니다.

    1. 자동생성기를 추가하였습니다.
      https://blog.lael.be/demo-generator/apache/my-example-site.com.php
      으로 이동 후 적절한 입력값을 입력후 설정값을 얻어보세요.

  84. 라엘님 안녕하세요! MySQL과 MariaDB 관련 질문할게 좀 있어서요!
    제가 그동안 라엘님 포스팅을 보고 리눅스 서버 구축을 원활하게 할 수 있었습니다.
    일단 정말 감사드립니다!
    제가 지금 PHP 프레임워크인 라라벨 5.4 버전을 사용해서 프로젝트를 만들려고 하는데요!
    마이그레이션을 실행하면 Specified key was too long error 라는 에러가 뜹니다!
    이 에러의 내용을 확인해보니까 MariaDB를 사용하거나 MySQL 버전이 낮으면 이런 에러가 뜬다고 하더라구요!
    또 한가지가 제가 테이블 중 하나의 컬럼을 JSON 타입으로 생성하려고하는데 MariaDB에서는 사용하지 못하는것 같더라구요!
    그래서 결과적으로 궁금한게 제가 서버에 MariaDB 설치한것을 지우고 온전히 MySQL만 사용할 수 있을지 궁금합니다! 또 MariaDB를 삭제를 어떻게 해야 깔끔하게 잘될지 도움될만한 글도 좀 추천해주시면 감사하겠습니다!

    1. 안녕하세요. 라라벨 사용법을 더 익혀보세요. 대충 짐작하기로 text 필드에 인덱스 옵션을 주려고 하시는것 같은데, 필드가 너무 크면 인덱스 옵션을 줄 수 없습니다.

  85. 아파치랑 PHP랑 데이터베이스랑 모두 다른 컴퓨터에서 구축해야하나요?
    아니면 한 개의 컴퓨터에 모두 구축해도 되나요?

    1. 모두 하나의 서버에서 구축하세요. 크게 문제되지 않는다면 운영하다가 나누는것이 좋습니다.

  86. 안녕하세요.
    좋은 강의 감사합니다!!
    다름이 아니라 14번에서 재부팅한 후 php가 정상 접속이 안되는데 이럴경우 어떻게 해야하나요?

    1. 자답합니다!
      제가 아파치 설정 파일을 잘못 수정하여 일어난 일이였네요…
      아무룩.. 정말로 깔끔한 강의 감사합니다!

  87. 안녕하세요.좋은글 감사합니다. 질문이 있는데 #vi /etc/apache2/conf-available/security.conf 파일 설정할떄
    serevertokens prod 같은 설정이 없으면 수동으로 넣으면 되나요?

    1. 해당 설정이 없으면 수동으로 넣지 마시고 다음단계로 넘어가셔요.

  88. 2017/09/05 12:51:20 [error] 4121#4121: *65 directory index of “/var/www/html/dbmyadmin/” is forbidden, client: 59.24.157.45, server: _, request: “GET /dbmyadmin/ HTTP/1.1”, host: “168.126.168.111”

    포비든 에러도 계속,,, 이게 제일 골칫거리네여

    NginX와 아파치를 같이 돌리면서 용도에 따라 나누고 있는데
    NginX에서 계속 디렉포비든이…

    1. https://blog.lael.be/post/6070 이 글을 통해 무료도메인을 신청한 후에 진행해보세요.
      아이피로 작업하지 마시고 도메인으로 작업해보세요.

  89. 너무 잘 정리된 글 잘 봤습니다.
    덕분에 매번 헷갈리는 웹서버 구축 방법이 머릿속에서 정리가 되었네요.

    글 내용중에 궁금한 부분이 있는데, 12) 계정생성 및 동작테스트 에서 myuser1 계정을 추가하고 /home/myuser1/www 폴더를 생성하는 과정들이 /var/www/html/… 안의 내용 대신 /home/myuser1/www 폴더로 대신 사용하는걸 권장한다는 뜻으로 작성된건가요?

    글 흐름을 보면 myphpadmin 설치도 그렇고 결국 /var/www/html의 경로를 사용하여 설명이 진행되는데..
    apache에서 /var/www/html 경로를 대신 사용하도록 설정해주는 내용이 본문에 없는걸까요?

    1. 안녕하세요?
      /var/www/html/ 경로는 서버의 기본 웹루트 경로입니다.
      /home/myuser1/www 경로는 myuser1 사용자와 연결된 웹루트 경로입니다.
      /var/www/html/ 는 도메인 연결이 없어도 테스트 가능한데, /home/myuser1/www 은 도메인이 연결된 후에 테스트가 가능합니다.
      즉 설명의 편의를 위해서 /var/www/html/ 경로를 사용하였을 뿐이며, 모든 작업은 /home/myuser1/www 에서 하는 것을 권장합니다.

  90. 안녕하세요.
    우분투가 뭔지 잘 몰라 무작정따고 있습니다.
    따라하던중 목적이 생겨 질문드립니다.
    웹서버로 구축을하면 용도는 홈페이지 운용만 가능한건가요??아니면 nas서버로 사용도 가능한가요?

    1. owncloud 라는 웹프로그램 소스를 설치하면 nas 및 웹하드 용도로도 사용할 수 있습니다.

  91. ssl을 안사용하려고 하다가 http://111.222.333.444/dbmyadmin에서 오류가나서 ssl내용을 vi편집기에 붙여넣고 저장했습니다.
    그래도 더이상 진행이 안되어 cat /va/log/apache2/error.log를 입력하였더니
    [Wed Sep 20 16:00:07.204244 2017] AH00489: Apache/2.4.25 (Ubuntu) configured
    [Wed Sep 20 16:00:07.204850 2017] AH00094: Command line: ‘/usr/sbin/apache2’
    [Wed Sep 20 17:36:12.044657 2017] AH00491: caught SIGTERM, shutting down
    [Wed Sep 20 18:07:07.677838 2017] AH00163: Apache/2.4.25 (Ubuntu) OpenSSL/1.0.2g configured
    위와같은 내용이나오는데 뭐가 문제인지 알 수 없어서 질문드립니다..ㅠㅠ

    1. dbmyadmin 동작은 ssl 과 전혀 관계가 없습니다.
      ssl 구문을 지워보세요.

  92. 서버 재설정하면서 다시 한 번 보고있는데,
    너무 감사한 글입니다…. 복 많이받으세요!!

  93. 안녕하세요. 작은 회사에 쓰려고 하는 홈페이지를 구축하려고 하는데, 이 글을 보고 한번 만들어보려고 합니다. 좋은 정보 감사합니다.

  94. 라엘님 안녕하세요!
    어쩌다 보니 서버컴퓨터를 셋팅하게 되어 직접 os를 설치한 후에 이 사이트를 알게 되어 직접 따라며 셋팅하고있는 학과생입니다. 근데 서버컴퓨터를 통해 apache2를 설치해주고 노트북으로 외부에서 서버컴퓨터ip를 입력해 접속을 시도해 봤는데 도무지 접속이 되지를 않습니다. 도대체 뭐가 문제인지 조언이 간절합니다

    구글링을 엄청해봤는데 이젠 정말 토 할 것 같습니다;ㅠㅠㅠㅠ
    vi etc/apache2/site-available/000-deafault 에서
    맨위 포트 80 주석처리해주고 8080으로 새롭게 써주기도하고 또
    포트를 열어주라고 하길래 ufw allow 80 , ufw allow 8080 도 해보고
    ufw allow 192.168.0.0 도 해보고
    공유기 포트포워딩이라는 개념도 있던데 이건 아니지 않나요??? ip주소는 사설아니고 static입니다 203.230.xxx~ 대역 ip인데 제가 이 부분은 제가 이해를 잘 하고 있는건지 아…… 속이 타들어 가네요 진짜 뭐가 문제 일까요 도움이 간절합니다 부탁드릴 수 있을지요

    1. 교내에서 서버 아이피로 접속해서 안되면 서버의 방화벽 문제이고,
      교외에서 서버 아이피로 접속해서 안되면 정보전산원에 문의해보셔야 할거에요.

  95. 답변 정말 정말 감사합니다! 궁금증이 몇 가지 더 생겨서 질문을 더 드리고 싶은데

    1. 그럼 원래대로라면 라엘님께서 포스팅해주신 내용대로만 서버 세팅을 진행하면 내부(서버 컴퓨터 자체 로컬이 아닌 교내 서버 아이피 접속), 외부(교외 아이피 접속)와 관계없이 ip를 치고 접속을 하면 접속이 정상적으로
    되어져야 하는건가요??? 그래서 포스팅 내용에는 그 내용이 없는 것인지가 궁금합니다. 그리고
    2. 1번의 질문이 맞다면 제가 설치한 서버 컴퓨터와 리눅스 자체에서 뭔가 문제가 있는 걸까요?? 저 같은 질문을 드리는 다른 분들이 안 보여서요 ^^;

    긴 글 읽어주셔서 정말 감사드립니다.

    1. 글 내용은 정상입니다. 윈도우 서버 컴퓨터에 VMware 같은것으로 리눅스 가상컴퓨터 만드는 경우만 아니라면 그냥 동작해야합니다.
      문제의 원인은 방화벽 문제로 생각됩니다. 어디에서 막혔을지는 모르겠네요.

  96. VMware로 우분투 가상컴퓨터를 만들어서 서버를 열어보고싶은데.이 글에 적혀있는대로 하면 서버를 열수있을까요?

    1. 윈도우 방화벽에서 tcp 80 포트를 오픈하고, vmware 의 network manager 에서 포트포워딩설정만 잘 한다면 서버를 열수있습니다.

  97. 더 확인된 에러로는 아파치 리스타트를 해주면
    Job for apache2.service failed because the control process exited with error code. See “systemctl status apache2.service” and “journalctl -xe” for details 이라는 에러문구가 뜨네요.. 위 다른사람이 이런에러를 가지고있어서 저도 확인해보았는데
    13) 웹사이트 Apache 환경설정파일 작성은 잘되었다고 판단됩니다. 혹시 제가 더 확인해야할 부분이있는지 추가적으로 여쭤보고싶은데 가능할까요..?

    1. #service apache2 configtest 를 입력하면 오류 위치를 표시해 줄 것입니다.

  98. 안녕하세요, 항상잘보고 있습니다.

    다름이 아니라 cron으로 php 자동실행하는거에 대해서 어떻게 하는지 궁금합니다.

    좀 자세한 설명 부탁드려요 항상 감사합니다.

    1. 추후에 글로 쓰도록 하겠습니다.

  99. 안녕하세요 13, 14,16,옵션 제외하고 전부 따라했습니다.
    제 ip로는 우분투/php/mariadb/myphpadmin 접속은잘되는데
    localhost나 127.0.0.1로 접속하면
    ‘사이트에 연결할 수 없음’이 뜹니다
    방화벽도 꺼놨고 포트80열린것은 잘확인했는데도 이러네요ㅠㅠ
    원래 9~10번과정에서 localhost로 연결이되어야 정상 아닌가요?
    혹시나 이런 오류를 본적 있으신지 궁금해서 덧글남깁니다..

    1. 참고로 저는 아마존 ec2 우분투 서버를쓰고있고
      접속이되는 ip는 퍼블릭 dns와 퍼블릭 ipv4입니다
      localhost, 127.0.0.1, 프라이빗 DNS, 프라이빗 ipv4로는 연결이 되지 않습니다ㅠㅠ

      1. localhost, 127.0.0.1 는 항상 “자기 자신”을 뜻합니다.
        브라우저가 설치된 컴퓨터가 서버가 아니기 때문에 뜨지 않는건 정상입니다.

  100. 단언컨데, 이블로그가 AWS자습서로 최고입니다.
    빠진내용이 있다면, 아파치 설치후 인스턴스에서 인바운드 규칙에 80포트를 열어줘야 /var/www/html/index.html 의 파일이 보인다는 겁니다.
    서버셋팅을 잘 안해본 사람들은 이부분에서 막힐 수 있다고 생각이 드네요.
    댓글중에 접속을 할 수 없다는 글이 이 설정을 안해서 그런게 아닌가 생각이 듭니다.
    아무튼 덕분에 AWS셋팅 하는데 도움이 많이 됐습니다.
    앞으로도 지속적으로 블로그 연재 부탁드립니다.

  101. 안녕하세요,
    aws에서 ubuntu로 서버 설치를 잘 하였는데요,
    ebs로 만약 볼륨을 추가햇다면 자동적으로 그 볼륨에 용량이 채워지는건가요
    아니면 뭐 특별한 설정을 해야되는건가요,
    그리고 또 그 새로 만든 ebs볼륨에 새로 서버를 설치하고 그 볼륨이 실행되게 해야되는건가요?
    자세히 알려주시면 감사하겠습니다.
    항상 잘보고있습니다. 감사합니다.

    1. EBS 생성하고 콘솔에서 서버 선택하고 연결하면 추가가 됩니다.
      리눅스에서 fdisk 명령어로 용량이랑 파티션 설정하고, 블록 초기화(포맷) 한 다음에 mount 하면 됩니다.

  102. 안녕하세요.

    aws 에서 .net 도메인을 구매했는데 3일째 연결이 안됩니다.
    Hosted zones → Create Record Set → Type A → Value 에 IP 기입하고 Create 누르면 끝 아닌가요 ?

    구매한 도메인 주소로 접속하면..

    사이트에 연결할 수 없음
    도메인.net의 서버 IP 주소를 찾을 수 없습니다.
    Windows 네트워크 진단 프로그램을 실행해 보세요.
    DNS_PROBE_FINISHED_NXDOMAIN

    라고 나오네요. 오래걸려도 3일 이내로 연결될줄 알았는데 너무 오래걸리네요..

    1. 무언가 잘못하신것 같아요. 보통 DNS 적용하는데 5분정도 걸립니다. 느려도 3시간이면 적용되야 합니다.

  103. Domains → Registered domains 에 도메인 있는거 보면 구매는 된거같은데..
    처음에 결제할때 카드에 얼마있는지 체크 안하고 결제했다가 금액이 부족해서 한번 취소처리되서 다시 구매해서 진행 했습니다.

    같은 도메인으로 다시 진행해서 꼬인건가.. 혹시 몰라서 금액 더 채워놨는데 2중 결제처리되서 그런가..
    답답하네요 ..

    조금 더 기다려봐야겠네요;

  104. 안녕하세요, 리눅스서버를 세팅하려고 검색하다가 들어오게 되었습니다.

    제가 세팅하려는 목적은 lkev2 vpn 서버 세팅입니다.
    윈도우서버에서 세팅하려다가 여러번 실패하고 pfsense로도 여러번 실패하고 여기까지 왔네요. ㅠ.ㅜ

    하는 김에 softether vpn도 리눅스 서버로 재구축을 할까 생각중입니다. (윈도우서버에 구축해놓은 것은 포기를…..쩝)

    이제 본론으로 들어와서…..

    제 목적인 ikev2 vpn 서버 세팅을 위해서, 이 글의 어느 정도까지 따라서 하면 될까요?

    저는 웹서버를 운영할 생각은 현재는 없습니다. ^^;;
    다만 ikev2 특성상, ssl 인증서는 있어야 하기에 무료 인증서인 let’s encrypt를 이용하려고 합니다. 그러려면 웹서버가 있기는 해야하더군요.

    여기의 글은 아주 쉽고 따라하기 좋아보이는데, 이대로 따라하다가는 아주 제대로된 웹서버가 완성될 것 같더군요. ^^*

    그럼, 소중한 답변 기다리겠습니다! 감사합니다!

    1. 블로그에 VPN 구축하는 방법에 대해 작성한 글이 있습니다. 그 글을 참조해주세요.

  105. 안녕하세요.

    AWS 측에서 답변이 왔는데 도메인 승인해주는데 일주일 정도 걸릴꺼라고 하네요..

  106. 안녕하세요 어떤 한 마인크래프트서버의 리눅스 관리담당입니다
    웹서버 세팅시에 이 블로그를 참고하며 해서 아주 편했습니다 그런데 가끔 안먹히는 명령어가 존재합니다 그부분 수정해주시면 감사하겠습니다
    그리고 Apache 의 유니코드 설정법도 적어주세요

    1. 우선 유니코드 설정법 이라는게, 무슨 말인지 모르겠습니다. 퓨니코드 말하는 건가요?
      가끔 안먹히는 명령어가 어떤것인지 알려주시면 수정하도록 하겠습니다.
      감사합니다!

  107. 반갑습니다. 밤새도록 헤매고 있습니다. 우분투 서버 설치 후 연결 비공개로~ 문제 땜에 헤매다가 https://blog.lael.be/post/5107 보고 한방에 쉽게 해결했습니다. 근데 이건 종일 켜 놓으면 전기사용료가 만만치 않을 것 같아…. 일단은 잘 되니 젖혀 두고… 얼마 전에 구입한 odroid-hc2를 구입해 지금 이걸로 webmin이나 owncloud로만 아이들과 외손주 녀석 사진이나 짧은 동영상 자료 등을 공유하려고 합니다. 일단 APM 설치는 Ctrl+C, Ctrl+V 해서 잘 진행 중인데… 이 포스트 12) 계정생성 및 동작테스트 항목부터 잘 몰라 헤매고 있습니다. 이 odroid-hc2는 8GB MicroSD에 부팅 영역과 기본 프로그램(APM 등)이 깔리고…. HDD는 /media/hdd 디렉토리에 자동마운트 시켜 놓아 samba로 데이터도 로컬에서 백업까지도 잘 되는데…. 12) 항목의 #su -l myuser1 , #mkdir www <— 여기에서 www 웹루트 디렉토리가 /media/hdd 안에 잡혀야 하는데… 이걸 우찌 해얄지 난감합니다. #su -l myuser1 , #mkdir www 이 명령을 /media/hdd 디렉토리에 가서 실행을 해도 될려나 싶고… 자신이 없네요, 지금 밤을 새고 있는 것도 12시 조금 지나서 에러가 나는 바람에 그걸 고칠 줄을 몰라 MicroSD에 이미지 새로 쓰고 서버 설치를 처음부터 다시… 계속 무한반복 중이라… 이번엔 좀 신중하게 접근할까 해서 여쭙니다. 도와 주셨으면 합니다. 감사합니다. 행복하세요.

  108. 난독증인가 봅니다. 제 질문의 답은 13) 항목에 있군요. 감사합니다.

    1. 화이팅입니다!
      그런데 시놀로지 나스를 구매하시는게 더 적합하실것 같아요

      1. 감사합니다. 덕분에 가족 클라우드 및 wordpress 설치까지 무사히 완공(?)되었습니다. LAPM 설치의 정석이라는 생각이 드는군요. 늘 건강하시고 행복하세요.

  109. hostname 을 변경하려고 들어왔는데 영어글자가 안써지기도 하고 써지면 이상하게써져요…어떻게 해야되는거죠??

    1. ftp 프로그램이나 이와 비슷한 프로그램으로 직접 접속해서 수정 & 업로드하세요.

      1. 어떤 프로그램들이 있는지 혹시 알려주실수 있으신가요…??

        1. Filezilla 라고 전세계에서 가장 유명한 FTP 프로그램이 있습니다.
          https://filezilla-project.org/ 에서 다운 받을 수 있습니다.
          개인/기업 무료입니다.

  110. 인증서 설정하는 부분에서 DNS problem: NXDOMAIN 오류가 나는데
    뭐가 문제인건가요.. 도저히 모르겠습니다 ㅠㅠ

    1. 도메인을 설정하고 잠시 후에 다시 시도해보세요.

  111. 안녕하세요. 호스트 네임을 바꾸려고 하다가, 아래의 문구들이 뜨는데 왜그런건가요?

    E325: ATTENTION
    Found a swap file by the name “/etc/.hostname.swp”
    owned by: root dated: Fri Apr 27 01:03:37 2018
    file name: /etc/hostname
    modified: YES
    user name: root host name: wkhwkh00-VirtualBox
    process ID: 14727
    While opening file “/etc/hostname”
    dated: Fri Mar 16 01:52:16 2018

    (1) Another program may be editing the same file. If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes. Quit, or continue with caution.
    (2) An edit session for this file crashed.
    If this is the case, use “:recover” or “vim -r /etc/hostname”
    to recover the changes (see “:help recovery”).
    If you did this already, delete the swap file “/etc/.hostname.swp”
    to avoid this message.
    “/etc/hostname” 1 line, 20 characters
    Press ENTER or type command to continue

    1. vi 명령어가 제대로 종료되지 않으면 임시파일이 생성됩니다.
      /etc/ 위치의 .hostname.swp 파일을 삭제하신 후 다시 시도해 보세요.

      1. 항상 감사드립니다….ㅠ.ㅠ
        혹시 터미널에서 파일을 삭제 할 수 있을까요?
        할 수 있다면 방법을 가르쳐주시면 정말 감사하겠습니다.

        1. # rm /etc/.hostname.swp
          입니다. 명령 실행시 오류가 발생하면 이미 삭제된 것입니다.

  112. 라엘님 ! 여러모로 정말 감사합니다 🙂 ! 덕택에 서버셋팅을 문제없이 잘 마칠수 있었습니다 🙂 !
    다름이 아니고 라엘님의 지금 이 글의 내용을 제 블로그에 옮겨가던지 정리를 하던지 하고 싶은데, 혹시 그래도 괜찮을까요 ? 출처는 글 작성 후 아래쪽에 꼭 밝혀놓도록 하겠습니다 🙂 ~

    1. 넵. 전체복제, 부분복제, 개작 모두 허용하고 있으니 편하게 복사하셔요~
      개발이 적성에 잘 맞으시나봐요.

  113. 안녕하세요? 라엘님! 라엘님 블로그의 CentOS 세팅 글 보면서 세팅 후 잘 사용하고 있었는데 이번에 PHP 7로 업데이트도 할겸 우분투로 세팅을 하면서 공부하려고 하는데 막히는 부분이 있어서 이렇게 코멘트 남겨봅니다 🙂

    현재 글의 phpMyAdmin 설치까지 세팅을 완료했는데
    /etc/apache2/sites-available/도메인명.conf 파일 생성 후 라엘님의 아파치 환경설정 생성기를 통해 내용을 넣고 저장한 뒤
    # a2ensite 도메인명
    그리고
    # service apache2 reload
    를 했는데 설정한 도메인으로 접속하면 자꾸 /var/www/html의 내용이 보여집니다.

    무엇이 문제인지 전혀 감이 안잡히네요..ㅜㅜ

    1. 안녕하세요. a2ensite 도메인명 을 하시면
      /etc/apache2/sites-enabled/도메인명.conf 파일이 생겨요. 생겼는지 확인해보세요.

      제 생각에, conf 파일 안의 도메인 이름 입력에 오타가 있을 것 같습니다.

      1. /etc/apache2/sites-enabled/도메인명.conf

        ServerName 도메인명.co.kr
        ServerAlias www.도메인명.co.kr

        DocumentRoot /home/계정명/www

        Options FollowSymLinks MultiViews
        AllowOverride All
        require all granted

        AssignUserID 계정명 계정명

        ErrorLog ${APACHE_LOG_DIR}/도메인명.co.kr-error.log
        CustomLog ${APACHE_LOG_DIR}/도메인명.co.kr-access.log combined

        이렇게 정상적으로 등록되어있는 것 같은데 왜 안되는걸까요?
        서버의 hostname을 도메인명.co.kr로 등록했는데 그것과 관련이 있을까요?
        아니면 /etc/apache2/sites-enabled/000-default.conf 파일을 변경해야되나요?

        1. hello 잘 뜨는것 같습니다.
          # service apache2 restart
          입력해보세요.
          default 는 그대로 두는게 좋습니다. default 는 프로그래밍으로 보자면 if-else 의 else 부분입니다.

          1. hello가 /var/www/html의 index.html 파일이고 hello 계정명이 떠야 정상입니다ㅜㅜ

            1. 아이디 비번 적어주세요. 확인해드릴께요.
              블로그의 댓글은 제가 승인 처리하기 전까지는 저만 볼 수 있습니다.

              1. 확인하고 처리했습니다.
                /etc/hosts 파일의 문제였네요. 이런 경우는 처음봤습니다.
                문제가 되는 부분 주석처리하고 정상작동을 확인했습니다.

  114. [Mon Sep 03 02:15:22.652906 2018] [mpm_prefork:notice] [pid 1386] AH00169: caught SIGTERM, shutting down
    [Mon Sep 03 02:15:57.211488 2018] [mpm_prefork:notice] [pid 1405] AH00163: Apache/2.4.18 (Ubuntu) mpm-itk/2.4.7-04 OpenSSL/1.0.2g configured — resuming normal operations
    [Mon Sep 03 02:15:57.217314 2018] [core:notice] [pid 1405] AH00094: Command line: ‘/usr/sbin/apache2’
    [Mon Sep 03 02:15:57.667608 2018] [mpm_itk:warn] [pid 1514] (itkmpm: pid=1514 uid=33, gid=1001) itk_post_perdir_config(): setuid(0): Operation not permitted
    [Mon Sep 03 02:15:57.667651 2018] [mpm_itk:notice] [pid 1514] This is most likely due to the current LimitUIDRange setting.
    [Mon Sep 03 02:15:57.788417 2018] [mpm_itk:warn] [pid 1515] (itkmpm: pid=1515 uid=33, gid=1001) itk_post_perdir_config(): setuid(0): Operation not permitted
    [Mon Sep 03 02:15:57.788467 2018] [mpm_itk:notice] [pid 1515] This is most likely due to the current LimitUIDRange setting.
    [Mon Sep 03 02:16:00.244811 2018] [mpm_itk:warn] [pid 1577] (itkmpm: pid=1577 uid=33, gid=1001) itk_post_perdir_config(): setuid(0): Operation not permitted
    [Mon Sep 03 02:16:00.244854 2018] [mpm_itk:notice] [pid 1577] This is most likely due to the current LimitUIDRange setting.
    [Mon Sep 03 02:16:00.323522 2018] [mpm_itk:warn] [pid 1578] (itkmpm: pid=1578 uid=33, gid=1001) itk_post_perdir_config(): setuid(0): Operation not permitted
    [Mon Sep 03 02:16:00.323560 2018] [mpm_itk:notice] [pid 1578] This is most likely due to the current LimitUIDRange setting.

    이것은 무슨 문제일까요..?

    1. root 사용자로는 웹서버 운영을 하면 안됩니다. 일반 사용자를 만들고 설정하세요.

  115. 정말 감사합니다. 항상 느끼는거지만 새로운 우분투/리눅스 서버를 세팅할때마다 라엘님 블로그에 방문해서 참고하는것 같습니다.

    이번기회에 라즈베리파이에 SSL까지 인증 완료했네요. 감사합니다. 중간 중간 에러나는 부분이 있었지만 역시 글대로 다시 시도해보니 정상적으로 발급되네요 ㅎㅎ..

    처음 서버를 세팅하시는 분들은 HTTP 먼저 세팅후에 인증서 발급, 그리고 HTTPS로 conf를 수정해주어야합니다. 아니면 발급과정에서 오류가 나더라구요.

    1. 안녕하세요! SSL 오류 안나게 발급받는 방법이 있는데, 그건 나중에 적을 것 같습니다.
      현재는 Ubuntu 18.04 가 출시되어서 관련 설정 방법을 적고 있습니다. 아직 작성중이라 비공개 글이지만 서둘러 완성하도록 하겠습니다!

  116. 라엘님
    18.04버전 너무나 기대됩니다.
    환절기 감기 조심하세요
    감사합니다.

  117. 안녕하세요. 궁금한점이 있어서 덧글로 질문을 남겨봅니다.
    저는 현재 우분투 18.0 버전의 서버를 임대해서 사용하려고 하는데요.
    웹세팅을 라엘님의 이 포스팅을 통해서 몇번을 했었는데
    초기에 php apache 연동모듈중에서 암호화 모듈을 설치하는중에
    root@ubuntu:~# apt-get install php-mcrypt
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    Package php-mcrypt is a virtual package provided by:
    php7.1-mcrypt 7.1.23-2+ubuntu18.04.1+deb.sury.org+1
    php5.6-mcrypt 5.6.38-2+ubuntu18.04.1+deb.sury.org+1
    php7.0-mcrypt 7.0.32-2+ubuntu18.04.1+deb.sury.org+1
    You should explicitly select one to install.

    E: Package ‘php-mcrypt’ has no installation candidate

    이런 메시지가 나와서 구글링을 좀 해보니 7.2 버전에서는 더이상안된다는
    그런얘기가 있는데
    제가 위의 메시지가 나왔을때
    apt-get remove php를 실행하고
    다시 apt-get install php7.0 이렇게 한 후에
    다시 mcrypt를 설치하려고 했더니 동일한 에러메시지가 나오더라고요.

    이 모듈이 꼭 필요한 모듈인지 궁금합니다.
    전 서버에 워드프레스만 설치해서 사용하려고 하려고합니다.

    건너뛰어도 무방한 모듈인지 ( 단순 워드프레스 설치 운영서버용으로.. )

    답변좀 부탁드리겠습니다.
    감사합니다.

    1. 워드프레스를 구동하신다면 해당 모듈을 설치 안해도 됩니다.
      18.04 설치방법은 현재 작성중입니다.

  118. 안녕하세요. 블로그 내용이 너무 좋습니다. 덕분에 AWS lightsail 에서 즐겁게 서버 설정을 완료했습니다. 정말 감사합니다!!

    1. 무엇보다 즐겁게! 서버 설정을 완료하셔서 다행이네요.
      감사합니다!

  119. Pingback: AWS EC2 웹서버 설정하기

  120. 좋은블로그를 발견했네요
    감사합니다!

  121. 안녕하세요 라엘님!
    항상 라엘님을 보고 서버를 셋팅하는데
    제가 개인적인 프로젝트로 사이트를 하나 만드는데
    php로 mysql과 세션을 이용해서 로그인/회원가입을 만들었습니다.

    제 컴(회사컴)에서 그 사이트를 로그인할때 로그인이 잘되는데
    다른 분컴(회사컴)에서 로그인하면 로그인이 안됩니다
    (정확히는 로그인된것처럼 로그인완료 페이지로 넘어가나 로그인이 안되어있음)

    그래서 세션문제인지 먼지 원인이 짐작이 안가서 혹시 php셋팅문제인가 싶어 라엘님께 물어봅니다

    1. 알려주신 증상으로 판단했을때, 웹사이트 주소 차이일것 같습니다.
      두 PC에서 정확히 동일한 웹사이트 주소를 입력했는지 확인해주세요.

  122. 안녕하세요. 좋은 글보고 서버세팅을 완벽하게 마무리하였습니다. 먼저 너무나 감사드립니다.
    다름이 아니오라 제가 램은 32G CPU는 v8코어 vultr에서 제공하고있는걸 쓰고 있습니다.
    다만 동시접속자수가 450명쯤되면 서버가 터질라고 하는데 이유를 모르겠습니다.
    추가로 설치한것도 없는데 어떤부분을 잡아야할지 구글링으로 찾아보고 있는데 맞는게 없는거같습니다
    동접자수가 1000명되도 원할하게 돌아가야할 사양인거같은데 렉이 정말 심합니다.
    도움주시면 대단히 감사드리겠습니다.

    1. 알려주신 증상만으로는 정확한 추정이 어렵습니다.
      원인을 추측할 수 없기 때문에, 가이드 하기도 어려울것 같네요.

      1. 1. 위에 알려주신대로 세팅하였고 아무것도 건들지 않았습니다.
        2. perwork 방식을 쓰고 있구요

        혹시 기본 동접자가 적은건지.. 어떤부분에서 어떻게 세팅을 해야 동접자를 늘릴 수 있는지 등이 궁금합니다.

        또 현재 어떤걸 알려드려야 진단이 가능하신지도좀 부탁드리겠습니다.
        번거롭고 귀찮으시겠지만 한번 부탁드립니다…
        고생하세요

        1. 사이트를 봐야 알것 같습니다.
          태국 화장품 다단계 사이트 아닌가요?
          사이트가 느려지는 요인은 여러가지라서, “느려요. 원인을 모르겠습니다.”라는 증상으로는 파악할 수 없습니다.
          더 자세한 사항이 있으시다면 블로그 상단의 Contact 에 쓰셔서 문의해주세요.
          감사합니다.

  123. 태국 화장품이요? 전 화장품하고 전혀 관련도 없고 다단계하지도 않는데…무슨말씀이신지… 좀 황당하네요….

    1. 제가 잘못 확인했나봅니다.
      이 글에서는 서버의 기본 구성에 대해서 설명하고 있으며, 실제 사이트 운영 중에 생긴 문제는 해당 소프트웨어의 문제일 확률이 큽니다.
      이 경우, 운영중인 사이트를 살펴보지 않고는 알 수 없습니다.

  124. Pingback: HeeEun_Woo

  125. Pingback: [초보호스팅]우분투 자주 사용하는 명령어 정리 - UPstone’s MEMO

  126. 다른것들은 전부 다 잘되고 너무너무 친절하게 써주셔서 좋은데
    apache 서버 세팅파일부분을 따라쓰면 에러가 납니다… ㅜㅜ
    처음엔 home 디렉토리로 했더니 권한문제로 에러나서 그냥 기본 디렉토리 쓰는데 이건 상관없으니 괜찮은데요
    그 추가설정에 있는
    #additional setting

    Options FollowSymLinks MultiViews
    AllowOverride All
    require all granted

    이부분만 넣으면 바로 에러가 나네요
    당연히 디렉토리명은 제껄로 바꿔서 넣었는데
    저 부분 넣고 재시작하는순간 에러난다면서 apache에서 재시작도 안되고 아무것도 안되네요
    전부 이 글 보고 새로 깔고 세팅한거라 다른건 없을텐데 버전문제일까요..?

    1. apache2ctl -S 명령어를 실행해서 해당 결과를 확인해 보세요.
      해결 안되시면 이곳에 apache2ctl -S 결과를 써주세요.

  127. Pingback: SSL 인증서 받기 (letsencrypt) > JINILIFE

  128. 안녕하세요? 경진대회 상받으신것도 보았네요. 멋지십니다.
    올려주신 내용을 보고 따라하다 안되면 여러번 다시 이것 저것 시도하고
    해서 가상서버 호스팅 설치 잘 끝냈습니다. 서브도메인도 잘 작동하게 되었고요.
    감사드리고, 앞으로도 많은 좋은 영향을 끼치는 멋진 분으로 계속 남아주시길 바랍니다.
    수고하세요.

    1. 감사합니다! 주위에도 추천해주세용!

  129. 인터넷 회사를 바꿨는데 그 이후로 외부에서 접속이 되지 않아요.
    변동 아이피 쓰고 있고 그 전에도 변동아이피였어요
    무엇이 문제일까요?

    1. 여러 가능성이 있지만, 통신사에서 80 포트를 막은것으로 추정됩니다.

  130. 좋은 글 감사합니다
    제가 문제없이 잘 하다가 15번에서 서버 아이피/dbmyadin 입력하면
    연결시간초과가 나옵니다
    서버는 제 개인꺼라 접속이 몰릴리는 없고
    무슨 문제가 있을까요?

    1. 연결시간초과는 대개 방화벽 오류입니다. 클라우드 서버를 사용중이라면 방화벽을 확인하시고, 집 컴퓨터를 사용한다면 포트포워딩이 잘 설정되어 있는지 확인해보세요.

  131. 그럼 포트포워딩을 확인해봤는데 80번 포트가 막혀있는데
    옵션)방화벽 적용하기 참고하면 될까요?

  132. Phpmyadmin 설정 후에 아이피로 치면 도메인 셋팅이 잘못 됐다고 나오고
    도메인 주소를 치면 나옵니다
    뭐가 문제일까요

    1. ㅜㅜ 무슨말인지 모르겠어요..

  133. Pingback: SSL인증서 적용하기(02) – 우분투 SSL 적용하기 – Life of Magpie

  134. 아주 멋진글 잘 보았습니다.
    라즈파이에 우분투 서버 설치하고 나서
    방화벽, 네임서버 내용으로 도움이 됐습니다.
    님과 아는 사이가 되었으면 하는 바램이 드네요^^

    1. 도움이 되셨다니 다행입니다.
      블로그에 자주 들러주시거나, 요즘 만들고 있는 webmaster.cafe 사이트에 글 남겨주셔도 도움이 될것 같습니다.

  135. 안녕하세요 오래전 부터 서버세팅 하는 글 보면서 서버 관리하고 있습니다.
    그런데 어제 패치지 업데이트를 하다 오류가 나서 파일을 하나 지운다는게 잘못해서 …
    dpkg를 전체 삭제 해버렸습니다.
    이후 다른 작업을 하다 서버를 재부팅 했는데..
    그때 부터 root 접속이 안됩니다.
    비밀번호를 변경한건도 아닌데 로그인 시도 하면 su: Authentication failure 이런 메시지가 나오구요
    sudo 로 명령어 넣으면 sudo: /usr/bin/sudo must be owned by uid 0
    and have the setuid bit set 나오는 있습니다.
    root로 접속을 하면 어떻게 해결을 해보겠는데 도저히 방법을 찾지 못하겠습니다.
    현재 db서버가 죽어 있는 상태입니다.
    해결 방법이 있을까요 간절히 도움요청 드립니다.

    1. 이 정도 장애면 큰 복구를 해야겠는데요? root 비밀번호를 따로 설정하지는 않으셨나요?
      root 권한을 강제로 가져오는 리커버리 프로세스가 진행되어야합니다. 이 프로세스는 클라우드와 일반서버에서 다르게 진행됩니다.

  136. 안녕하세요. 구축하면서 공부하고 싶어서 찾아오게 됬습니다.

    제로세팅부터 시작하고 싶은데, 어느글부터 참조하면 좋을지 모르겠어서 댓글남겼습니다!

  137. 서버 설정에 필요한 부분 다 언급해주셔서 셋팅하는데 너무너무 도움 많이 되었습니다.
    감사드립니다.

    1. 감사합니다! 앞으로도 더 멋진 글을 작성해보겠습니다!

  138. 안녕하세요 서버/웹호스팅을 하려고하는데 저희가 생각하는게
    웹 페이지에서 리눅스의 명령어를 사용할 수 있게 하려고 하는데
    패키지설치가 불가피한데 웹 호스팅이나 서버호스팅을 하면 이 패키지를 호스팅업체 서버에 깔 수 있을까요??
    너무궁금합니다 ㅠ

    1. 그런걸 웹쉘(web shell)이라고 하는데, 서버호스팅과 간단한 소스코드로 구현이 가능합니다.
      구글검색해서 더 찾아보세요.

  139. 안녕하세요.
    컴퓨터에 리눅스를 설치하고 웹서버를 구축해서 다른 ip로 접속되어있는 컴퓨터에 있는 데이터들을 데이터베이스에 저장시키고, 이 데이터베이스 안의 데이터들을 클라우드로 보내 스마트폰 앱으로도 데이터를 확인할 수 있게끔 하고 싶은데요.
    제가 웹서버에 대해서 잘 몰라서요…이 글을 따라하면 위 내용처럼 할 수 있는걸까요?

    답변 부탁드립니다 ㅠㅠ

    1. 가능은 하지만.. 개념 이해가 필요해서 많이 힘드실것 같네요.

    2. 웹서버만 모른다면 웹서버쪽만 공부하시면 되고,
      전체를 모르신다면
      우선은 처음부터 끝까지 가상머신 설치하고 테스팅을 먼저 해보시고
      클라우드로 할 것인지 서버로 할 것인지 선택하는게 좋으실 듯 합니다.(그냥 의견입니다)
      컴퓨터 분야에서는 의외로 가능한일이 훨씬 많습니다. 단지 모를뿐.

  140. 와 이거 따라하면서 aws로 개인 홈페이지 만드는데 성공했습니다.
    밑에 자잘한 설정도 문외한한테는 아주 도움되네요
    감사합니다!!!
    안 지우시겠지만 절대 지우지 마세요! 다음에 또보러 와야돼서요 ㅋㅋ

  141. 안녕하세요. 도움이 필요해 댓글로 문의 드립니다.
    현재 12.04.5 LTS 를 운영하고 있는데 갑자기 업데이트 서버와 연결이 아예 안되네요 ㅠㅠ
    서버 리스트 mirror.kakao.com로 변경을 해보아도 계속 404 에러가 뜨면서 연결이 안되 난감한 상황인데
    혹시 해결 방법을 알고 계실지 해서 문의드려 봅니다.

    1. 오래된 버전이라 확실치는 않습니다.
      다만 업데이트 서버 mirror 들이 전부다 다운되지는 않았을 것이니, 다른 미러를 찾아보는것을 권장드립니다.

  142. 궁금한게 있습니다!
    웹 서버 셋팅 전에 도메인서비스를 받아서 DNS를 먼저 생성해야하는건가요?

    1. 꼭 그럴 필요는 없는데, 보통 도메인 하나 연결하고 쓰는 편입니다.

  143. 안녕하세요!
    vmware로 우분투를 구동중인데요 localhost/phpmyadmin 접속을 하면
    NOT FOUND
    The requested URL was not found on this server.
    Apache/2.4.41 (Ubuntu) Server at localhost Port 80 이라는 문구가 뜨면서 접속이 불가해집니다.
    localhost랑 localhost/info.php 까지 접속되는 것도 확인했고 도메인 주소도 오타없이 잘 쳤습니다.
    혹시 해결법좀 알 수 있을까요 간곡히 부탁드립니다 ㅠㅠ

    1. 확실하게 경로문제입니다. 경로를 확인해주세요. filezilla 프로그램을 통해 vmware 내의 linux 에 접근할 수 있을거에요.

  144. 좋은 내용 감사합니다.

    8) Apache2 서버설치에서 #추가 보안패치에 보면

    #deny access
    값에서 ” 표시가 빠져있네요.
    내용을 입력하다 보니, 하단의 예에서는 문장이 더 들어가 있는 것 같아서 문의 드립니다.

    감사합니다.

  145. 좋은 내용 감사합니다!
    CentOS 6.6 , PHP 5.5 설치, httpd 설치 비슷한 내용이 있어서 공유해요!

  146. Pingback: 우분투 설치 글 - 마법사리의개발노트

  147. Pingback: 감자박스 :: 오드로이드 U3, Ubuntu 16.04 업그레이드

  148. 감사합니다 도움이 많이 되었어요 ^ ^

  149. 최고의 블로그네요! 근데…

    PHP 7.2.5+ is required.

    Currently installed version is: 7.0.33-63+ubuntu22.04.1+deb.sury.org+2

    ===>자꾸 뜨면서 막힙니다ㅠ dbmyadmin 들어가면여…하…답이없나여? vps업체의 문제인가요??

    1. 서버는 초기화(다시 세팅) 한번 하시고, https://blog.lael.be/post/11072 이 글을 보고 구축 해보세요.

HYEONG HWAN, MUN에 답글 남기기 응답 취소

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*