웹사이트 검색

SSL 인증서를 사용하여 이름 기반 가상 호스팅으로 독립형 Apache 서버를 설정하는 방법 - 4부


LFCE(Linux Foundation Certified Engineer의 약어)는 Linux 시스템에서 네트워크 서비스를 설치, 관리 및 문제 해결하는 전문 지식을 갖추고 다음 작업을 담당하는 숙련된 전문가입니다. 시스템 아키텍처의 설계, 구현 및 지속적인 유지 관리.

이 기사에서는 웹 콘텐츠를 제공하도록 Apache를 구성하는 방법과 자체 서명된 인증서를 포함하여 이름 기반 가상 호스트 및 SSL을 설정하는 방법을 보여줍니다.

LFCE(Linux Foundation 인증 프로그램)를 소개합니다.

참고: 이 문서는 Apache에 대한 포괄적인 가이드가 아니라 LFCE<의 이 주제에 대한 자체 학습을 위한 출발점입니다. 시험. 이러한 이유로 이 튜토리얼에서는 Apache를 사용한 로드 밸런싱을 다루지 않습니다.

동일한 작업을 수행하는 다른 방법을 이미 알고 있을 수도 있습니다. 이는 Linux Foundation 인증이 엄격하게 성능 기반이라는 점을 고려하면 괜찮습니다. 따라서 '일을 완수'하는 한 시험에 합격할 가능성이 높습니다.

요구사항

Apache 설치 및 시작에 대한 지침은 최신 시리즈의 1부("네트워크 서비스 설치 및 부팅 시 자동 시작 구성")를 참조하세요.

이제 Apache 웹 서버가 설치되어 실행 중이어야 합니다. 다음 명령으로 이를 확인할 수 있습니다.

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

참고: 위 명령은 apache 또는 httpd(가장 일반적인 이름)가 있는지 확인합니다. 웹 데몬) 실행 중인 프로세스 목록 중 Apache가 실행 중인 경우 다음과 유사한 출력이 표시됩니다.

Apache 설치를 테스트하고 실행 중인지 확인하는 궁극적인 방법은 웹 브라우저를 시작하고 서버의 IP를 가리키는 것입니다. 다음 화면이나 최소한 Apache가 작동 중임을 확인하는 메시지가 표시되어야 합니다.

아파치 구성

Apache의 기본 구성 파일은 배포판에 따라 다른 디렉터리에 있을 수 있습니다.

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

다행스럽게도 구성 지시문은 Apache 프로젝트 웹 사이트에 매우 잘 문서화되어 있습니다. 이 기사 전체에서 그 중 일부를 언급하겠습니다.

Apache를 사용하여 독립형 서버에서 페이지 제공

Apache의 가장 기본적인 사용법은 아직 가상 호스트가 구성되지 않은 독립형 서버에서 웹 페이지를 제공하는 것입니다. DocumentRoot 지시문은 Apache가 웹 페이지 문서를 제공할 디렉터리를 지정합니다.

기본적으로 모든 요청은 이 디렉터리에서 가져오지만 기호 링크를 사용할 수도 있고/또는 별칭을 사용하여 다른 위치를 가리킬 수도 있습니다.

Alias 지시어와 일치하지 않는 한(문서를 DocumentRoot가 지정한 디렉토리 아래가 아닌 로컬 파일 시스템에 저장할 수 있음) 서버는 요청된 URL의 경로를 추가합니다. 문서 루트로 이동하여 문서 경로를 만듭니다.

예를 들어 다음 DocumentRoot가 있다고 가정해 보겠습니다.

웹 브라우저가 [서버 IP 또는 호스트 이름]/lfce/tecmint.html을 가리키면 서버가 /var/를 엽니다. www/html/lfce/tecmint.html(해당 파일이 존재한다고 가정) 200(OK) 응답과 함께 이벤트를 액세스 로그에 저장합니다.

액세스 로그는 일반적으로 access.log 또는 access_log와 같은 대표 이름으로 /var/log 내부에서 발견됩니다. 하위 디렉토리(예: CentOS의 /var/log/httpd)에서 이 로그(및 오류 로그)를 찾을 수도 있습니다. 그렇지 않으면 실패한 이벤트가 액세스 로그에 계속 기록되지만 404(찾을 수 없음) 응답이 표시됩니다.

또한 실패한 이벤트는 오류 로그에 기록됩니다.

액세스 로그의 형식은 기본 구성 파일의 LogFormat 지시문을 사용하여 필요에 따라 사용자 정의할 수 있지만 오류 로그에서는 동일한 작업을 수행할 수 없습니다. .

액세스 로그의 기본 형식은 다음과 같습니다.

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

퍼센트 기호가 앞에 오는 각 문자는 서버가 특정 정보를 기록한다는 것을 나타냅니다.

String

설명

 %h

 원격 호스트 이름 또는 IP 주소

 %l

 원격 로그 이름

 %u

 요청이 인증된 경우 원격 사용자

 %t

 요청을 받은 날짜 및 시간

 %r

 서버에 대한 요청의 첫 번째 줄

 %>s

 요청의 최종 상태

 %b

 응답 크기[바이트]

닉네임은 전체 구성 문자열을 다시 입력할 필요 없이 다른 로그를 사용자 정의하는 데 사용할 수 있는 선택적 별칭입니다.

추가 옵션을 보려면 Apache 문서의 LogFormat 지시문 [사용자 정의 로그 형식 섹션]을 참조하세요.

두 로그 파일(액세스오류)은 Apache 서버에서 발생하는 상황을 한 눈에 빠르게 분석할 수 있는 훌륭한 리소스를 나타냅니다. 말할 필요도 없이 시스템 관리자가 문제를 해결하기 위해 사용하는 첫 번째 도구입니다.

마지막으로 또 다른 중요한 지시문은 Listen으로, 이는 서버가 지정된 포트 또는 주소/포트 조합으로 들어오는 요청을 수락하도록 지시합니다.

포트 번호만 정의된 경우 Apache는 모든 네트워크 인터페이스에서 지정된 포트를 수신합니다(와일드카드 기호 *는 '모든 네트워크 인터페이스'를 나타내는 데 사용됨).

IP 주소와 포트가 모두 지정되면 Apache는 지정된 포트와 네트워크 인터페이스의 조합을 수신합니다.

아래 예에서 볼 수 있듯이 여러 Listen 지시어를 동시에 사용하여 수신할 여러 주소와 포트를 지정할 수 있습니다. 이 옵션은 나열된 주소 및 포트의 요청에 응답하도록 서버에 지시합니다.

이름 기반 가상 호스트 설정

가상 호스트의 개념은 동일한 물리적 시스템에서 서비스를 제공하는 개별 사이트(또는 도메인)를 정의합니다. 실제로 여러 사이트/도메인이 단일 "실제" 서버에서 가상 호스트로 제공될 수 있습니다. 이 프로세스는 최종 사용자에게 투명하며, 최종 사용자에게는 서로 다른 웹 서버가 서로 다른 사이트를 제공하는 것처럼 보입니다.

이름 기반 가상 호스팅을 사용하면 서버는 클라이언트에 의존하여 호스트 이름을 HTTP 헤더의 일부로 보고할 수 있습니다. 따라서 이 기술을 사용하면 여러 다른 호스트가 동일한 IP 주소를 공유할 수 있습니다.

각 가상 호스트는 DocumentRoot 내의 디렉토리에 구성됩니다. 우리의 경우 테스트 설정을 위해 각각 해당 디렉터리에 있는 다음 더미 도메인을 사용합니다.

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

페이지가 올바르게 표시되도록 하려면 각 VirtualHost의 디렉토리를 755chmod합니다.

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

다음으로 각 public_html 디렉토리 내에 샘플 index.html 파일을 만듭니다.

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

마지막으로 CentOSopenSUSE에서 /etc/httpd/conf/httpd.conf 또는 / 하단에 다음 섹션을 추가합니다. etc/apache2/httpd.conf를 사용하거나 이미 있는 경우 수정하세요.


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

/etc/httpd/conf.d 디렉토리 내의 별도 파일에 각 가상 호스트 정의를 추가할 수도 있습니다. 그렇게 하기로 선택한 경우 각 구성 파일의 이름은 다음과 같이 지정되어야 합니다.

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

즉, 사이트나 도메인 이름에 .conf를 추가해야 합니다.

Ubuntu에서 각 개별 구성 파일의 이름은 /etc/apache2/sites-available/[사이트 이름].conf입니다. 그런 다음 각 사이트는 다음과 같이 각각 a2ensite 또는 a2dissite 명령을 사용하여 활성화 또는 비활성화됩니다.

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

a2ensitea2dissite 명령은 가상 호스트 구성 파일에 대한 링크를 생성하고 /etc/apache2/sites-enabled 디렉토리.

다른 Linux 상자에서 두 사이트를 모두 탐색하려면 해당 도메인에 대한 요청을 특정 IP로 리디렉션하기 위해 해당 컴퓨터의 /etc/hosts 파일에 다음 줄을 추가해야 합니다. 주소.


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

보안 조치로서 SELinuxApache가 기본 /var/log/httpd 이외의 디렉터리에 로그를 쓰는 것을 허용하지 않습니다.

SELinux를 비활성화하거나 올바른 보안 컨텍스트를 설정할 수 있습니다.


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

여기서 xxxxxx는 가상 호스트를 정의한 /var/www/html 내부 디렉토리입니다.

Apache를 다시 시작하면 위 주소에 다음 페이지가 표시됩니다.

Apache를 사용하여 SSL 설치 및 구성

마지막으로 Apache와 함께 사용할 자체 서명 인증서를 생성하고 설치하겠습니다. 이러한 종류의 설정은 개인 LAN과 같은 소규모 환경에서 허용됩니다.

그러나 서버가 인터넷을 통해 외부 세계에 콘텐츠를 노출하는 경우에는 제3자가 서명한 인증서를 설치하여 그 신뢰성을 확인하는 것이 좋습니다. 어느 쪽이든 인증서를 사용하면 사이트에서 또는 사이트 내에서 전송되는 정보를 암호화할 수 있습니다.

CentOSopenSUSE에서는 mod_ssl 패키지를 설치해야 합니다.

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

반면 Ubuntu에서는 Apache용 SSL 모듈을 활성화해야 합니다.

a2enmod ssl

다음 단계는 CentOS 테스트 서버를 사용하여 설명되지만 설정은 다른 배포판에서도 거의 동일해야 합니다. 어떤 종류의 문제가 발생하면 주저하지 말고 댓글을 사용하여 질문을 남겨주세요. 형태).

1단계 [선택사항]: 인증서를 저장할 디렉터리를 만듭니다.

mkdir /etc/httpd/ssl-certs

2단계: 자체 서명된 인증서와 이를 보호할 키를 생성합니다.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

위에 나열된 옵션에 대한 간략한 설명:

  1. req -X509는 x509 인증서를 생성 중임을 나타냅니다.
  2. -nodes (NO DES)는 "키를 암호화하지 않음"을 의미합니다.
  3. -days 365는 인증서가 유효한 일수입니다.
  4. -newkey rsa:2048은 2048비트 RSA 키를 생성합니다.
  5. -keyout /etc/httpd/ssl-certs/apache.key는 RSA 키의 절대 경로입니다.
  6. -out /etc/httpd/ssl-certs/apache.crt는 인증서의 절대 경로입니다.

3단계: 선택한 가상 호스트 구성 파일(또는 앞에서 설명한 대로 /etc/httpd/conf/httpd.conf의 해당 섹션)을 열고 다음 행을 추가합니다. 포트 443에서 수신 대기하는 가상 호스트 선언.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

추가해야 하니 참고하세요.

NameVirtualHost *:443

맨 위, 바로 아래

NameVirtualHost *:80

두 지시문 모두 Apache가 모든 네트워크 인터페이스의 44380 포트를 수신하도록 지시합니다.

다음 예는 /etc/httpd/conf/httpd.conf에서 가져온 것입니다.

그런 다음 Apache를 다시 시작하고,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

그리고 브라우저에서 https://www.ilovelinux.com으로 이동하세요. 다음 화면이 표시됩니다.

계속해서 '위험을 이해합니다' 및 '예외 추가'를 클릭하세요.

마지막으로 '이 예외를 영구 저장'을 선택하고 '보안 예외 확인'을 클릭하세요.

그리고 https를 사용하여 홈페이지로 리디렉션됩니다.

요약

이 게시물에서는 데이터 전송을 보호하기 위해 SSL을 사용하여 Apache이름 기반 가상 호스팅을 구성하는 방법을 보여주었습니다. 어떤 이유로든 문제가 발생한 경우 아래 의견 양식을 사용하여 알려주시기 바랍니다. 성공적인 설정을 수행하도록 기꺼이 도와드리겠습니다.

또한 읽어보세요

  1. Apache IP 기반 및 이름 기반 가상 호스팅
  2. Vhost 활성화/비활성화 옵션을 사용하여 Apache 가상 호스트 생성
  3. "Apache GUI" 도구를 사용하여 "Apache 웹 서버" 모니터링