CentOS 7에 Apache 웹 서버를 설치하는 방법
소개
Apache HTTP 서버는 세계에서 가장 널리 사용되는 웹 서버입니다. 동적으로 로드 가능한 모듈, 강력한 미디어 지원 및 널리 사용되는 다른 소프트웨어와의 광범위한 통합을 비롯한 많은 강력한 기능을 제공합니다.
이 가이드에서는 CentOS 7 서버에 가상 호스트가 있는 Apache 웹 서버를 설치합니다.
전제 조건
이 가이드를 완료하려면 다음이 필요합니다.
- CentOS 7용 초기 서버 설정 가이드에 따라 설정된 서버에 구성된 sudo 권한이 있는 루트가 아닌 사용자.
- 서버를 가리키도록 구성된 도메인 이름. DigitalOcean 튜토리얼로 호스트 이름을 설정하는 방법에 따라 도메인을 DigitalOcean Droplets로 지정하는 방법을 배울 수 있습니다.
- 새 CentOS 7 서버에 대한 추가 권장 단계 가이드에 따라 구성된 기본 방화벽.
1단계 - 아파치 설치
Apache는 CentOS의 기본 소프트웨어 리포지토리 내에서 사용할 수 있으므로 yum
패키지 관리자로 설치할 수 있습니다.
전제 조건에 구성된 루트가 아닌 sudo 사용자로 로컬 Apache httpd
패키지 인덱스를 업데이트하여 최신 업스트림 변경 사항을 반영합니다.
- sudo yum update httpd
패키지가 업데이트되면 Apache 패키지를 설치합니다.
- sudo yum install httpd
설치를 확인한 후 yum
은 Apache와 필요한 모든 종속성을 설치합니다.
전제 조건 섹션에 언급된 새 CentOS 7 서버에 대한 추가 권장 단계 가이드를 완료한 경우 서버에 firewalld
가 설치되어 있고 포트 80
을 열어야 합니다. Apache가 HTTP를 통해 요청을 처리할 수 있도록 합니다. 아직 수행하지 않은 경우 다음 명령으로 firewalld
의 http
서비스를 활성화하여 수행할 수 있습니다.
- sudo firewall-cmd --permanent --add-service=http
HTTPS를 통해 콘텐츠를 제공하도록 Apache를 구성하려는 경우 https
서비스를 활성화하여 포트 443
도 열 수 있습니다.
- sudo firewall-cmd --permanent --add-service=https
그런 다음 방화벽을 다시 로드하여 이러한 새 규칙을 적용합니다.
- sudo firewall-cmd --reload
방화벽이 다시 로드되면 서비스를 시작하고 웹 서버를 확인할 준비가 된 것입니다.
2단계 - 웹 서버 확인
설치가 완료되면 Apache는 CentOS에서 자동으로 시작되지 않습니다. Apache 프로세스를 수동으로 시작해야 합니다.
- sudo systemctl start httpd
다음 명령을 사용하여 서비스가 실행 중인지 확인합니다.
- sudo systemctl status httpd
서비스가 실행 중이면 활성
상태가 표시됩니다.
OutputRedirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 1290 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
├─1290 /usr/sbin/httpd -DFOREGROUND
├─1291 /usr/sbin/httpd -DFOREGROUND
├─1292 /usr/sbin/httpd -DFOREGROUND
├─1293 /usr/sbin/httpd -DFOREGROUND
├─1294 /usr/sbin/httpd -DFOREGROUND
└─1295 /usr/sbin/httpd -DFOREGROUND
...
이 출력에서 볼 수 있듯이 서비스가 성공적으로 시작된 것으로 나타납니다. 그러나 이를 테스트하는 가장 좋은 방법은 Apache에서 페이지를 요청하는 것입니다.
기본 Apache 랜딩 페이지에 액세스하여 IP 주소를 통해 소프트웨어가 제대로 실행되고 있는지 확인할 수 있습니다. 서버의 IP 주소를 모르는 경우 명령줄에서 몇 가지 다른 방법으로 가져올 수 있습니다.
서버의 명령 프롬프트에 다음을 입력하십시오.
- hostname -I
이 명령은 호스트의 모든 네트워크 주소를 표시하므로 공백으로 구분된 몇 개의 IP 주소를 다시 얻을 수 있습니다. 웹 브라우저에서 각각 시도하여 작동하는지 확인할 수 있습니다.
또는 curl
을 사용하여 icanhazip.com
에서 IP를 요청할 수 있습니다. 그러면 인터넷의 다른 위치에서 볼 수 있는 공용 IPv4 주소가 제공됩니다.
- curl -4 icanhazip.com
서버의 IP 주소가 있으면 브라우저의 주소 표시줄에 입력하십시오.
http://your_server_ip
기본 CentOS 7 Apache 웹 페이지가 표시됩니다.
이 페이지는 Apache가 올바르게 작동하고 있음을 나타냅니다. 중요한 Apache 파일 및 디렉토리 위치에 대한 몇 가지 기본 정보도 포함되어 있습니다. 이제 서비스가 설치되어 실행 중이므로 다른 systemctl
명령을 사용하여 서비스를 관리할 수 있습니다.
3단계 - Apache 프로세스 관리
이제 웹 서버를 가동하고 실행했으므로 몇 가지 기본 관리 명령을 살펴보겠습니다.
웹 서버를 중지하려면 다음을 입력하십시오.
- sudo systemctl stop httpd
중지된 웹 서버를 시작하려면 다음을 입력하십시오.
- sudo systemctl start httpd
서비스를 중지했다가 다시 시작하려면 다음을 입력합니다.
- sudo systemctl restart httpd
단순히 구성을 변경하는 경우 Apache는 종종 연결을 끊지 않고 다시 로드할 수 있습니다. 이렇게 하려면 다음 명령을 사용합니다.
- sudo systemctl reload httpd
기본적으로 Apache는 서버가 부팅될 때 자동으로 시작되도록 구성됩니다. 이것이 원하는 것이 아닌 경우 다음을 입력하여 이 동작을 비활성화합니다.
- sudo systemctl disable httpd
서비스가 부팅 시 시작되도록 다시 활성화하려면 다음을 입력합니다.
- sudo systemctl enable httpd
이제 서버가 다시 부팅될 때 Apache가 자동으로 시작됩니다.
Apache의 기본 구성을 사용하면 서버에서 단일 웹 사이트를 호스팅할 수 있습니다. 서버에서 여러 도메인을 호스팅할 계획이라면 Apache 웹 서버에서 가상 호스트를 구성해야 합니다.
4단계 - 가상 호스트 설정(권장)
Apache 웹 서버를 사용할 때 가상 호스트(Nginx의 서버 블록과 유사)를 사용하여 구성 세부 정보를 캡슐화하고 단일 서버에서 둘 이상의 도메인을 호스트할 수 있습니다. 이 단계에서는 your_domain
이라는 도메인을 설정하지만 이를 자신의 도메인 이름으로 바꿔야 합니다. DigitalOcean으로 도메인 이름을 설정하는 방법에 대해 자세히 알아보려면 DigitalOcean DNS 소개를 참조하십시오.
CentOS 7의 Apache에는 기본적으로 /var/www/html
디렉토리의 문서를 제공하도록 구성된 하나의 서버 블록이 활성화되어 있습니다. 이 방법은 단일 사이트에서 잘 작동하지만 여러 사이트를 호스팅하는 경우 다루기 어려울 수 있습니다. /var/www/html
을 수정하는 대신 your_domain
사이트에 대해 /var/www
내에 디렉토리 구조를 만들고 /var/www/html
은 클라이언트 요청이 다른 사이트와 일치하지 않는 경우 제공될 기본 디렉토리입니다.
다음과 같이 your_domain
에 대한 html
디렉토리를 생성하고 -p
플래그를 사용하여 필요한 상위 디렉토리를 생성합니다.
- sudo mkdir -p /var/www/your_domain/html
사이트에 대한 로그 파일을 저장할 추가 디렉터리를 만듭니다.
- sudo mkdir -p /var/www/your_domain/log
다음으로 $USER
환경 변수를 사용하여 html
디렉토리의 소유권을 할당합니다.
- sudo chown -R $USER:$USER /var/www/your_domain/html
웹 루트에 기본 권한이 설정되어 있는지 확인하십시오.
- sudo chmod -R 755 /var/www
다음으로 vi
또는 좋아하는 편집기를 사용하여 샘플 index.html
페이지를 만듭니다.
- sudo vi /var/www/your_domain/html/index.html
i
를 눌러 INSERT
모드로 전환하고 다음 샘플 HTML을 파일에 추가합니다.
<html>
<head>
<title>Welcome to your website!</title>
</head>
<body>
<h1>Success! The your_domain virtual host is working!</h1>
</body>
</html>
ESC
를 누르고 :wq
를 입력한 다음 ENTER
를 눌러 파일을 저장하고 닫습니다.
사이트 디렉터리와 샘플 색인 파일이 준비되면 가상 호스트 파일을 만들 준비가 거의 완료된 것입니다. 가상 호스트 파일은 별도의 사이트 구성을 지정하고 Apache 웹 서버에 다양한 도메인 요청에 응답하는 방법을 알려줍니다.
가상 호스트를 생성하기 전에 이를 저장할 sites-available
디렉토리를 생성해야 합니다. 또한 Apache에 다음을 알리는 sites-enabled
디렉토리를 생성합니다. 가상 호스트가 방문자에게 서비스를 제공할 준비가 되었습니다. sites-enabled
디렉토리는 게시하려는 가상 호스트에 대한 심볼릭 링크를 보유합니다. 다음 명령을 사용하여 두 디렉토리를 모두 생성합니다.
- sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
다음으로 Apache에게 sites-enabled
디렉토리에서 가상 호스트를 찾도록 지시합니다. 이렇게 하려면 Apache의 기본 구성 파일을 편집하고 추가 구성 파일에 대한 선택적 디렉터리를 선언하는 줄을 추가합니다.
- sudo vi /etc/httpd/conf/httpd.conf
파일 끝에 다음 행을 추가하십시오.
IncludeOptional sites-enabled/*.conf
해당 줄 추가를 완료하면 파일을 저장하고 닫습니다. 이제 가상 호스트 디렉토리가 준비되었으므로 가상 호스트 파일을 생성합니다.
sites-available
디렉터리에 새 파일을 생성하여 시작합니다.
- sudo vi /etc/httpd/sites-available/your_domain.conf
다음 구성 블록을 추가하고 your_domain
도메인을 도메인 이름으로 변경합니다.
<VirtualHost *:80>
ServerName www.your_domain
ServerAlias your_domain
DocumentRoot /var/www/your_domain/html
ErrorLog /var/www/your_domain/log/error.log
CustomLog /var/www/your_domain/log/requests.log combined
</VirtualHost>
이는 공개적으로 액세스할 수 있는 웹 문서를 보유하고 있는 루트를 직접 찾을 수 있는 위치를 Apache에 알려줍니다. 또한 이 특정 사이트에 대한 오류 및 요청 로그를 저장할 위치를 Apache에 알려줍니다.
완료되면 파일을 저장하고 닫습니다.
이제 가상 호스트 파일을 만들었으므로 Apache가 방문자에게 제공할 수 있도록 활성화합니다. 이렇게 하려면 sites-enabled
디렉터리에서 각 가상 호스트에 대한 심볼릭 링크를 만듭니다.
- sudo ln -s /etc/httpd/sites-available/your_domain.conf /etc/httpd/sites-enabled/your_domain.conf
이제 가상 호스트가 구성되어 콘텐츠를 제공할 준비가 되었습니다. Apache 서비스를 다시 시작하기 전에 SELinux에 가상 호스트에 대한 올바른 정책이 있는지 확인하십시오.
5단계 - 가상 호스트에 대한 SELinux 권한 조정(권장)
SELinux는 기본 Apache 구성과 함께 작동하도록 구성됩니다. 가상 호스트 구성 파일에서 사용자 정의 로그 디렉토리를 설정했기 때문에 Apache 서비스를 시작하려고 하면 오류가 발생합니다. 이 문제를 해결하려면 Apache가 필요한 파일에 쓸 수 있도록 SELinux 정책을 업데이트해야 합니다. SELinux는 CentOS 7 환경에 강화된 보안을 제공하므로 커널 모듈을 완전히 비활성화하지 않는 것이 좋습니다.
SELinux를 사용하면 보안 수준을 사용자 정의할 수 있으므로 환경 요구 사항에 따라 정책을 설정하는 다양한 방법이 있습니다. 이 단계에서는 Apache 정책을 조정하는 두 가지 방법(일반적으로 및 특정 디렉터리에서)을 다룹니다. 디렉터리에 대한 정책을 조정하는 것이 더 안전하므로 권장되는 접근 방식입니다.
보편적으로 Apache 정책 조정
보편적으로 Apache 정책을 설정하면 httpd_unified
부울을 사용하여 모든 Apache 프로세스를 동일하게 처리하도록 SELinux에 지시합니다. 이 접근 방식이 더 편리하긴 하지만 파일 또는 디렉터리 정책에 초점을 맞춘 접근 방식과 동일한 수준의 제어를 제공하지는 않습니다.
다음 명령을 실행하여 범용 Apache 정책을 설정합니다.
- sudo setsebool -P httpd_unified 1
setsebool
명령은 SELinux 부울 값을 변경합니다. -P
플래그는 부팅 시간 값을 업데이트하여 이 변경 사항이 재부팅 후에도 지속되도록 합니다. httpd_unified
는 SELinux에게 모든 Apache 프로세스를 동일한 유형으로 취급하도록 지시하는 부울이므로 1
값으로 활성화했습니다.
디렉토리에서 Apache 정책 조정
/var/www/your_domain/log
디렉토리에 대한 SELinux 권한을 개별적으로 설정하면 Apache 정책을 더 잘 제어할 수 있지만 더 많은 유지 관리가 필요할 수도 있습니다. 이 옵션은 일반적으로 정책을 설정하지 않으므로 가상 호스트 구성에 지정된 새 로그 디렉터리에 대한 컨텍스트 유형을 수동으로 설정해야 합니다.
먼저 SELinux가 /var/www/your_domain/log
디렉터리에 제공한 컨텍스트 유형을 확인합니다.
- sudo ls -dZ /var/www/your_domain/log/
이 명령은 디렉토리의 SELinux 컨텍스트를 나열하고 인쇄합니다. 다음과 유사한 출력이 표시됩니다.
Outputdrwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/log/
현재 컨텍스트는 httpd_sys_content_t
이며, 이는 Apache 프로세스가 이 디렉토리에서 생성된 파일만 읽을 수 있음을 SELinux에 알려줍니다. 이 자습서에서는 /var/www/your_domain/log
디렉토리의 컨텍스트 유형을 httpd_log_t
로 변경합니다. 이 유형을 사용하면 Apache가 웹 애플리케이션 로그 파일을 생성하고 추가할 수 있습니다.
- sudo semanage fcontext -a -t httpd_log_t "/var/www/your_domain/log(/.*)?"
그런 다음 restorecon
명령을 사용하여 이러한 변경 사항을 적용하고 재부팅 후에도 유지되도록 합니다.
- sudo restorecon -R -v /var/www/your_domain/log
-R
플래그는 이 명령을 재귀적으로 실행합니다. 즉, 새 컨텍스트를 사용하도록 기존 파일을 업데이트합니다. -v
플래그는 명령이 만든 컨텍스트 변경 사항을 인쇄합니다. 변경 사항을 확인하는 다음 출력이 표시됩니다.
Outputrestorecon reset /var/www/your_domain/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
컨텍스트를 한 번 더 나열하여 변경 사항을 확인할 수 있습니다.
- sudo ls -dZ /var/www/your_domain/log/
출력에는 업데이트된 컨텍스트 유형이 반영됩니다.
Outputdrwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/your_domain/log
이제 /var/www/your_domain/log
디렉토리가 httpd_log_t
유형을 사용하므로 가상 호스트 구성을 테스트할 준비가 되었습니다.
6단계 - 가상 호스트 테스트(권장)
두 방법 중 하나로 SELinux 컨텍스트가 업데이트되면 Apache는 /var/www/your_domain/log
디렉토리에 쓸 수 있습니다. 이제 Apache 서비스를 성공적으로 다시 시작할 수 있습니다.
- sudo systemctl restart httpd
/var/www/your_domain/log
디렉토리의 내용을 나열하여 Apache가 로그 파일을 생성했는지 확인합니다.
- ls -lZ /var/www/your_domain/log
Apache가 가상 호스트 구성에 지정된 error.log
및 requests.log
파일을 생성할 수 있음을 알 수 있습니다.
Output-rw-r--r--. 1 root root 0 Feb 26 22:54 error.log
-rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log
이제 가상 호스트를 설정하고 SELinux 권한을 업데이트했으므로 이제 Apache가 도메인 이름을 제공합니다. http://your_domain
으로 이동하여 이를 테스트할 수 있습니다. 여기서 다음과 같은 내용이 표시되어야 합니다.
이것은 가상 호스트가 성공적으로 구성되고 콘텐츠를 제공하고 있음을 확인합니다. 4단계와 5단계를 반복하여 추가 도메인에 대한 SELinux 권한이 있는 새 가상 호스트를 만듭니다.
결론
이 자습서에서는 Apache 웹 서버를 설치하고 관리했습니다. 이제 웹 서버를 설치했으므로 제공할 수 있는 콘텐츠 유형과 더 풍부한 경험을 만드는 데 사용할 수 있는 기술에 대한 많은 옵션이 있습니다.
보다 완전한 애플리케이션 스택을 구축하려면 CentOS 7에서 LAMP 스택을 구성하는 방법에 대한 이 문서를 참조하십시오.