웹사이트 검색

Apache 구성을 2.2에서 2.4 구문으로 마이그레이션하는 방법


소개

Apache 웹 서버는 현재 세계에서 가장 인기 있는 웹 서버입니다. 모든 종류의 웹 콘텐츠를 제공하는 데 사용되며 사용자 정의가 가능한 강력한 애플리케이션입니다.

많은 사람들이 Apache 2.2 구성 구문에 익숙하지만 일부 배포판은 이제 기본적으로 Apache 2.4와 함께 제공됩니다. 이 전환의 예는 Ubuntu 12.04 LTS에서 제공되는 Ubuntu 14.04 LTS입니다. 대부분의 경우 구문은 동일하지만 몇 가지 중요한 차이점이 있으며 일부 공통 지시문은 더 이상 사용되지 않습니다.

이 가이드에서는 Apache 2.2 배경에서 왔을 때 알아야 할 몇 가지 새로운 구문과 기타 변경 사항에 대해 설명합니다. Ubuntu 14.04를 Apache 2.4와 함께 배포하는 예로 사용하고 Ubuntu 12.04와 같은 릴리스와 함께 제공되는 Apache 2.2 버전과 비교할 것입니다.

승인 변경

Apache 2.4의 주요 변경 사항 중 하나는 사용자에게 권한을 부여하는 기본 방법입니다.

권한 부여는 인증된 사용자가 수행할 수 있는 작업을 정의하는 지시문을 나타냅니다. 작업 또는 액세스를 허용할지 여부를 결정하기 위해 확인하는 기준을 제시합니다.

이것은 먼저 이루어져야 하는 인증과 다릅니다. 인증 절차는 사용자가 서버에 자신을 긍정적으로 식별할 수 있는 방법을 정의합니다. 인증은 2.2에서 많이 변경되지 않았지만 인증은 정밀 검사를 받았습니다.

우선 인증 구성 요소는 이제 이전에 인증에 사용할 수 있었던 Require 구문을 사용할 수 있습니다. 이렇게 하면 복잡한 규칙 집합에 의존하지 않고 권한 부여 순서를 쉽게 정의할 수 있습니다. 대신 기본값을 지정한 다음 예외를 지정하여 논리적인 방식으로 주문할 수 있습니다.

예를 들어 트래픽 허용을 위한 기본값을 설정할 수 있지만 특정 악의적인 사용자를 차단하려면 다음과 같이 추가할 수 있습니다.

Require all granted
Require not ip 111.111.111.111

이것은 모든 사람을 수락하는 기본 정책을 설정한 다음 요청이 111.111.111.111 IP 주소에서 오지 않는다는 한정자를 지정합니다. 이렇게 하려면 이 두 가지가 모두 참이어야 합니다. RequireAll 지시문 블록을 사용하여 잠시 수행하는 방법을 알아봅니다.

권한 부여는 사용자 또는 그룹 자체뿐만 아니라 env, host 또는 ip 를 사용하여 다른 요소를 고려하여 선택할 수 있습니다. 또는 범용 값 all을 사용합니다.

  • 모두: 이 공급자는 모든 트래픽과 일치합니다. 기본값을 설정하는 데 유용합니다.
  • env: 환경 변수가 설정되었는지 여부를 테스트합니다.
  • 호스트: 연결 클라이언트의 호스트 이름을 테스트하는 데 사용됩니다.
  • ip: 접속하는 사용자의 IP 주소를 테스트하기 위해 사용합니다.

지정된 순서에 따라 제어할 수 있습니다. 일반적으로 다음 특수 블록 중 하나에서 볼 수 있습니다.

  • RequireAll: 액세스를 허용하려면 블록의 모든 인증 요구 사항을 충족해야 합니다.
  • RequireAny: 이 블록의 승인 요구 사항 중 하나라도 충족되면 이 블록은 충족된 것으로 표시됩니다.
  • RequireNone: 나열된 요구 사항 중 하나라도 성공하면 지시문이 실패합니다.

이를 통해 인증 설정 방법과 관련하여 상당한 유연성을 얻을 수 있습니다. 다음과 같이 이러한 지시문 블록을 서로 중첩할 수 있습니다.

<RequireAny>
    <RequireAll>
        Require user root
        Require ip 123.123.123.123
    </RequireAll>
    <RequireAll>
        <RequireAny>
            Require group sysadmins
            Require group useraccounts
            Require user anthony
        </RequireAny>
        <RequireNone>
            Require group restrictedadmin
            Require host bad.host.com
        </RequireNone>
    </RequireAll>
</RequireAny>

보시다시피 꽤 정교한 승인 경로를 정의할 수 있습니다. 위의 예는 사용자가 루트이고 IP 123.123.123.123에서 오는 경우 인증합니다. 또한 이름이 "anthony\인 사용자 또는 "sysadmins\ 또는 "useraccounts\ 그룹의 모든 구성원에게 권한을 부여하지만, 이는 "restrictedadmin\ 그룹의 일부가 아니거나 <에서 플래그가 지정된 호스트에서 오는 경우에만 허용됩니다. 코드>bad.host.com.

이러한 인증 블록은 액세스 제어에 사용된 기존 지시문보다 훨씬 이해하기 쉽습니다. 이전 버전의 Apache에서는 Order, Allow from, Deny fromSatisfy 지시문을 사용했습니다. 이들은 제거되지 않았지만 더 이해하기 쉽고 일관성이 있는 새로운 구문을 위해 더 이상 사용되지 않습니다.

그러나 그들은 mod_access_compat라는 별도의 모듈로 이동되었습니다. 레거시 인증 지시문이 필요한 경우 이 모듈을 활성화해야 합니다. 그러나 향후 지원을 위해 그리고 선택한 정책의 의미를 파악하는 것이 훨씬 더 쉽기 때문에 새 구문으로 조건을 구현하는 것이 좋습니다.

Apache의 기타 변경 사항

구성 파일을 빌드하는 방법에 영향을 주는 다양한 기타 변경 사항을 알고 있어야 합니다.

이들 중 일부는 이름을 변경하거나 새 기본값을 재정의해야 할 수 있습니다. 여기에 변경 사항에 대한 더 완전한 목록이 있지만 우리는 당신을 걸려 넘어지게 할 수 있는 몇 가지 사항에 대해 논의할 것입니다.

연결 및 자식 제한

기능을 더 잘 설명하기 위해 몇 가지 지시문의 이름이 변경되었습니다.

  • MaxConnectionsPerChild: 이 지시문은 MaxRequestsPerChild를 대체하는 데 사용됩니다. 이 변경은 디렉티브가 실제로 사용되는 것을 더 잘 반영하기 위해 만들어졌습니다. 값은 실제로 연결 수를 제한하므로 이 이름이 매개변수에 더 적합합니다.
  • MaxRequestWorkers: 이 지시어는 MaxClients 옵션을 대체하기 위해 만들어졌습니다. 이는 비동기 다중 처리 모듈을 사용하는 경우 클라이언트 수가 작업자 스레드 수와 동일하다고 가정해서는 안 되기 때문입니다. 이는 지시문의 영향을 받는 이 구성 부분을 정확히 지정하는 데 도움이 됩니다.

AllowOverride 변경 사항

디렉터리별 구성 파일이 기본 설정을 변경하도록 허용하는 데 사용되는 AllowOverride 지시문이 약간 변경되어 구성에 영향을 줄 수 있습니다.

기본적으로 이 설정의 값은 이제 없음입니다. 이렇게 하면 기본적으로 더 잠긴 상태로 설정되어 서버를 더 쉽게 보호할 수 있습니다. .htaccess 파일을 필요로 하는 디렉토리에서 읽고 처리하도록 지정하는 것은 여전히 매우 간단합니다. 이를 달성하기 위해.

기본적으로 서버를 잠근 다음 디렉터리 기반 설정의 특정 인스턴스를 허용하도록 보안을 재정의하는 전략은 대부분의 사용자가 이미 수행하고 있는 전략입니다. 이 변경 사항은 사용자가 수동으로 구현하는 것을 잊었을 때 쉽게 공격에 노출되지 않도록 하는 데 도움이 될 뿐입니다.

SendFile 기본값이 변경됨

콘텐츠를 읽을 필요 없이 서버에 있는 파일을 클라이언트로 보내는 데 사용되는 EnableSendfile 지시문은 이제 기본적으로 Off로 설정됩니다.

이는 해당 시스템이 작업을 올바르게 지원하는지 확인하는 데 사용되는 보안 조치입니다. 잘못된 구현은 문제가 되거나 작업이 실패할 수 있습니다. 이는 운영 체제에 따라 다르거나 특정 하드웨어에 따라 다르거나 콘텐츠(원격 파일 시스템 등)에 액세스하는 방법으로 인해 다를 수 있습니다.

이 지시문을 비활성화로 기본 설정하면 관리자가 시스템의 호환성을 확인하고 활성화하기 전에 적절한 기능을 확인하기 위해 몇 가지 테스트를 수행할 수 있습니다.

구현 세부 정보

Apache 2.4 릴리스에만 해당되는 것은 아니지만 배포판과 함께 제공되는 일부 기본 구성 파일은 전환 시 변경되었습니다.

이에 대한 한 가지 예는 Debian 및 Ubuntu 릴리스에 있으며 /etc/apache2/apache2.conf에 있는 Apache 2.4의 기본 구성 파일은 이제 추가 파일 포함을 약간 다르게 처리합니다.

2.2에서 이러한 배포판은 conf.dsites-enabled 디렉토리 내의 모든 파일을 소싱하여 가상 호스트 사양에 가장 일반적으로 사용되는 추가 구성 파일을 허용했습니다. 이러한 지시문은 다음과 같습니다.

Include conf.d/
Include sites-enabled/

와일드카드 일치는 전체 디렉터리를 전달하지 않고 특정 파일 패턴을 포함할 수 있는 새로운 기능입니다. 이는 전통적으로 위와 같은 방식으로 처리할 수 있지만 다음을 사용하여 더 많은 유연성을 가질 수 있음을 의미합니다.

Include conf.d/*.conf
Include sites-enabled/*.conf

그러나 이 새로운 구문은 이전과 똑같이 작동할 것으로 기대하는 경우 몇 가지 문제를 일으킬 수도 있습니다. 와일드카드 일치와 함께 사용할 때 Include 지시문은 일치하는 파일이 없으면 실패하여 오류가 발생합니다.

이 문제를 해결하기 위해 IncludeOptional이라는 새 지시문이 생성되었습니다. 이것은 정확히 동일하게 작동하지만 와일드카드가 어떤 파일과도 일치하지 않는 경우 오류가 발생하지 않습니다.

이를 활용하기 위해 일부 배포판에는 다음과 같은 추가 디렉토리가 포함되기 시작했습니다.

IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

보시다시피 여기에 추가된 추가 구현 조정이 있습니다. 사이트를 미러링하기 위해 별도의 conf-enabledconf-available 디렉토리 생성 -*mods-* 디렉토리. 여기서 중요한 점은 이제 특정 파일 패턴이 지정되고 있다는 것입니다. 모든 유효한 구성 파일은 이 구성으로 .conf로 끝나야 합니다.

일반적으로 default 또는 site1.com과 같은 가상 호스트 파일을 호출하는 경우 익숙해지는 데 다소 시간이 걸릴 수 있습니다. 그러나 디렉토리에 이전 버전, 테스트 및 README 파일과 같은 비구성 파일을 포함할 수 있으므로 더 많은 유연성을 제공합니다.

이는 테스트를 위해 다음과 같이 간단하게 수행할 수 있음을 의미합니다.

cd /etc/apache2/sites-enabled/
cp mainconfig.conf mainconfig.conf.bak
nano mainconfig.conf

a2dissitea2ensite 작업을 진행할 수 있지만 이는 일부 사용자에게 더 자연스러운 추가 방법입니다. 또한 이전 작업 파일을 활성화된 디렉토리에 보관합니다. 이는 정확한 의미는 아니지만 이전 버전으로 되돌려야 하는 경우 찾기가 더 쉬울 수 있습니다.

구성에서 알 수 있는 또 다른 변경 사항은 일부 지시문이 이동되었고 일부 기본 virtualhost 지시문이 변경되었다는 것입니다. 과거에 기본 virtualhost 파일에 있던 이 세 블록은 더 이상 존재하지 않습니다.

<Directory />
        Options FollowSymLinks
        AllowOverride None
</Directory>
<Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
</Directory>

상위 2개 블록은 현재 우분투 최신 버전의 apache2.conf 파일 내에 구현되어 있습니다. 모든 구성에서 설정해야 하기 때문입니다. Require 지시문을 사용하도록 업데이트되었습니다.

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

cig-bin 디렉토리 사양이 virtualhost 파일에서 제거되었고 conf-available/serve-cgi-bin.conf 파일에 구현되었습니다. 이는 보다 모듈화된 접근 방식이며 고유한 지시문 담당하는 virtualhost 파일을 남겨둡니다. 실제로 모든 주석이 제거된 새 기본 가상 호스트는 다음과 같습니다.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

보시다시피 이것은 사이트별 구성 파일을 줄이는 데 정말 도움이 될 수 있습니다.

결론

기존 구성을 감사하고 특정 절차를 업데이트하여 새로운 지침과 모범 사례를 활용하면 Apache 2.4로 마이그레이션하는 것이 그리 어렵지 않습니다. 기능적으로는 추가 기능과 함께 동일한 기능을 제공하고 이해하기 쉬운 구문으로 모든 작업을 수행해야 합니다.

저스틴 엘링우드