웹사이트 검색

CentOS 7에 Apache 웹 서버를 설치하는 방법


소개

Apache HTTP 서버는 세계에서 가장 널리 사용되는 웹 서버입니다. 동적으로 로드 가능한 모듈, 강력한 미디어 지원 및 널리 사용되는 다른 소프트웨어와의 광범위한 통합을 비롯한 많은 강력한 기능을 제공합니다.

이 가이드에서는 CentOS 7 서버에 가상 호스트가 있는 Apache 웹 서버를 설치합니다.

전제 조건

이 가이드를 완료하려면 다음이 필요합니다.

  • CentOS 7용 초기 서버 설정 가이드에 따라 설정된 서버에 구성된 sudo 권한이 있는 루트가 아닌 사용자.
  • 서버를 가리키도록 구성된 도메인 이름. DigitalOcean 튜토리얼로 호스트 이름을 설정하는 방법에 따라 도메인을 DigitalOcean Droplets로 지정하는 방법을 배울 수 있습니다.
  • 새 CentOS 7 서버에 대한 추가 권장 단계 가이드에 따라 구성된 기본 방화벽.

1단계 - 아파치 설치

Apache는 CentOS의 기본 소프트웨어 리포지토리 내에서 사용할 수 있으므로 yum 패키지 관리자로 설치할 수 있습니다.

전제 조건에 구성된 루트가 아닌 sudo 사용자로 로컬 Apache httpd 패키지 인덱스를 업데이트하여 최신 업스트림 변경 사항을 반영합니다.

  1. sudo yum update httpd

패키지가 업데이트되면 Apache 패키지를 설치합니다.

  1. sudo yum install httpd

설치를 확인한 후 yum은 Apache와 필요한 모든 종속성을 설치합니다.

전제 조건 섹션에 언급된 새 CentOS 7 서버에 대한 추가 권장 단계 가이드를 완료한 경우 서버에 firewalld가 설치되어 있고 포트 80 을 열어야 합니다. Apache가 HTTP를 통해 요청을 처리할 수 있도록 합니다. 아직 수행하지 않은 경우 다음 명령으로 firewalldhttp 서비스를 활성화하여 수행할 수 있습니다.

  1. sudo firewall-cmd --permanent --add-service=http

HTTPS를 통해 콘텐츠를 제공하도록 Apache를 구성하려는 경우 https 서비스를 활성화하여 포트 443도 열 수 있습니다.

  1. sudo firewall-cmd --permanent --add-service=https

그런 다음 방화벽을 다시 로드하여 이러한 새 규칙을 적용합니다.

  1. sudo firewall-cmd --reload

방화벽이 다시 로드되면 서비스를 시작하고 웹 서버를 확인할 준비가 된 것입니다.

2단계 - 웹 서버 확인

설치가 완료되면 Apache는 CentOS에서 자동으로 시작되지 않습니다. Apache 프로세스를 수동으로 시작해야 합니다.

  1. sudo systemctl start httpd

다음 명령을 사용하여 서비스가 실행 중인지 확인합니다.

  1. sudo systemctl status httpd

서비스가 실행 중이면 활성 상태가 표시됩니다.

Output
Redirecting 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 주소를 모르는 경우 명령줄에서 몇 가지 다른 방법으로 가져올 수 있습니다.

서버의 명령 프롬프트에 다음을 입력하십시오.

  1. hostname -I

이 명령은 호스트의 모든 네트워크 주소를 표시하므로 공백으로 구분된 몇 개의 IP 주소를 다시 얻을 수 있습니다. 웹 브라우저에서 각각 시도하여 작동하는지 확인할 수 있습니다.

또는 curl을 사용하여 icanhazip.com에서 IP를 요청할 수 있습니다. 그러면 인터넷의 다른 위치에서 볼 수 있는 공용 IPv4 주소가 제공됩니다.

  1. curl -4 icanhazip.com

서버의 IP 주소가 있으면 브라우저의 주소 표시줄에 입력하십시오.

http://your_server_ip

기본 CentOS 7 Apache 웹 페이지가 표시됩니다.

이 페이지는 Apache가 올바르게 작동하고 있음을 나타냅니다. 중요한 Apache 파일 및 디렉토리 위치에 대한 몇 가지 기본 정보도 포함되어 있습니다. 이제 서비스가 설치되어 실행 중이므로 다른 systemctl 명령을 사용하여 서비스를 관리할 수 있습니다.

3단계 - Apache 프로세스 관리

이제 웹 서버를 가동하고 실행했으므로 몇 가지 기본 관리 명령을 살펴보겠습니다.

웹 서버를 중지하려면 다음을 입력하십시오.

  1. sudo systemctl stop httpd

중지된 웹 서버를 시작하려면 다음을 입력하십시오.

  1. sudo systemctl start httpd

서비스를 중지했다가 다시 시작하려면 다음을 입력합니다.

  1. sudo systemctl restart httpd

단순히 구성을 변경하는 경우 Apache는 종종 연결을 끊지 않고 다시 로드할 수 있습니다. 이렇게 하려면 다음 명령을 사용합니다.

  1. sudo systemctl reload httpd

기본적으로 Apache는 서버가 부팅될 때 자동으로 시작되도록 구성됩니다. 이것이 원하는 것이 아닌 경우 다음을 입력하여 이 동작을 비활성화합니다.

  1. sudo systemctl disable httpd

서비스가 부팅 시 시작되도록 다시 활성화하려면 다음을 입력합니다.

  1. 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 플래그를 사용하여 필요한 상위 디렉토리를 생성합니다.

  1. sudo mkdir -p /var/www/your_domain/html

사이트에 대한 로그 파일을 저장할 추가 디렉터리를 만듭니다.

  1. sudo mkdir -p /var/www/your_domain/log

다음으로 $USER 환경 변수를 사용하여 html 디렉토리의 소유권을 할당합니다.

  1. sudo chown -R $USER:$USER /var/www/your_domain/html

웹 루트에 기본 권한이 설정되어 있는지 확인하십시오.

  1. sudo chmod -R 755 /var/www

다음으로 vi 또는 좋아하는 편집기를 사용하여 샘플 index.html 페이지를 만듭니다.

  1. 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 디렉토리는 게시하려는 가상 호스트에 대한 심볼릭 링크를 보유합니다. 다음 명령을 사용하여 두 디렉토리를 모두 생성합니다.

  1. sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

다음으로 Apache에게 sites-enabled 디렉토리에서 가상 호스트를 찾도록 지시합니다. 이렇게 하려면 Apache의 기본 구성 파일을 편집하고 추가 구성 파일에 대한 선택적 디렉터리를 선언하는 줄을 추가합니다.

  1. sudo vi /etc/httpd/conf/httpd.conf

파일 끝에 다음 행을 추가하십시오.

IncludeOptional sites-enabled/*.conf

해당 줄 추가를 완료하면 파일을 저장하고 닫습니다. 이제 가상 호스트 디렉토리가 준비되었으므로 가상 호스트 파일을 생성합니다.

sites-available 디렉터리에 새 파일을 생성하여 시작합니다.

  1. 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 디렉터리에서 각 가상 호스트에 대한 심볼릭 링크를 만듭니다.

  1. 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 정책을 설정합니다.

  1. 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 디렉터리에 제공한 컨텍스트 유형을 확인합니다.

  1. sudo ls -dZ /var/www/your_domain/log/

이 명령은 디렉토리의 SELinux 컨텍스트를 나열하고 인쇄합니다. 다음과 유사한 출력이 표시됩니다.

Output
drwxr-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가 웹 애플리케이션 로그 파일을 생성하고 추가할 수 있습니다.

  1. sudo semanage fcontext -a -t httpd_log_t "/var/www/your_domain/log(/.*)?"

그런 다음 restorecon 명령을 사용하여 이러한 변경 사항을 적용하고 재부팅 후에도 유지되도록 합니다.

  1. sudo restorecon -R -v /var/www/your_domain/log

-R 플래그는 이 명령을 재귀적으로 실행합니다. 즉, 새 컨텍스트를 사용하도록 기존 파일을 업데이트합니다. -v 플래그는 명령이 만든 컨텍스트 변경 사항을 인쇄합니다. 변경 사항을 확인하는 다음 출력이 표시됩니다.

Output
restorecon reset /var/www/your_domain/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0

컨텍스트를 한 번 더 나열하여 변경 사항을 확인할 수 있습니다.

  1. sudo ls -dZ /var/www/your_domain/log/

출력에는 업데이트된 컨텍스트 유형이 반영됩니다.

Output
drwxr-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 서비스를 성공적으로 다시 시작할 수 있습니다.

  1. sudo systemctl restart httpd

/var/www/your_domain/log 디렉토리의 내용을 나열하여 Apache가 로그 파일을 생성했는지 확인합니다.

  1. ls -lZ /var/www/your_domain/log

Apache가 가상 호스트 구성에 지정된 error.logrequests.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 스택을 구성하는 방법에 대한 이 문서를 참조하십시오.