반응형

Apache에서 성공적으로 PHP를 사용할 수 있도록 설정되어 있는지 여부를 확인하기 위해 phpinfo 함수를 사용한 간단한 스크립트를 작성하고 테스트해 본다.

목차

phpinfo 함수를 사용한 샘플 스크립트

텍스트 편집기를 열고 다음과 같이 작성한다.

<?php
phpinfo();
?>

그리고 예를 들어 "phpinfo.php"라는 파일명으로 저장한다. 저장된 파일은 Apache 문서 루트에 넣는다.

C:\apache\Apache24\htdocs>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: XXXX-XXXX

 C:\apache\Apache24\htdocs 디렉터리

2019-12-05  오후 11:32    <DIR>          .
2019-12-05  오후 11:32    <DIR>          ..
2007-06-12  오전 03:53                46 index.html
2019-12-05  오후 11:25                21 phpinfo.php
               2개 파일                  67 바이트
               2개 디렉터리  450,570,784,768 바이트 남음

C:\apache\Apache24\htdocs>

브라우저를 열고 "http://localhost/phpinfo.php"에 액세스한다.


위와 같이 PHP에 대한 정보가 표시되었다면, 이제 Apache에서 PHP를 사용할 수 있게 되었다.

반응형
반응형

Apache에서 PHP를 사용하는 경우에 필요한 설정에 대해 설명한다. 구체적으로는 "httpd.conf" 파일에 PHP에 대한 설정을 추가하는 방법에 대해 설명한다.


Apache 통해서 PHP를 사용하기 위해 필요한 모듈 (php7_module)의 추가와 확장(.php) 등록하는 방법에 대해 설명한다.

모듈 추가

먼저 PHP를 사용하기위한 모듈을 추가해야 한다. Apache 설정 파일인 "Apache24/conf/httpd.conf" 파일을 텍스트 편집기로 열어 "Dynamic Shared Object (DSO) Support"를 검색하면, 다음과 같은 내용을 찾을 수 있다.

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
#LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so

.. (중간 생략) ..

#LoadModule watchdog_module modules/mod_watchdog.so
#LoadModule xml2enc_module modules/mod_xml2enc.so

동적으로 추가할 모듈이 작성되어 있다. Apache2.4를 이용하고 있는 경우에는 이 블록의 맨 끝에 다음 행을 추가한다. (PHP7를 이용하는 경우이다.)

#LoadModule watchdog_module modules/mod_watchdog.so
#LoadModule xml2enc_module modules/mod_xml2enc.so
LoadModule php7_module C:/apache/php-7.4.0-Win32-vc15-x64/php7apache2_4.dll

추가하는 DLL 파일의 경로는 PHP를 설치한 각자의 환경에 맞게 변경한다.

--

PHP를 설치한 디렉토리를 확인하면 앞에서의 DLL 파일이 존재하는 것을 확인할 수 있다.

C:\apache\php-7.4.0-Win32-vc15-x64>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 4E53-ECB8

 C:\apache\php-7.4.0-Win32-vc15-x64 디렉터리

2019-12-05  오후 11:06    <DIR>          .
2019-12-05  오후 11:06    <DIR>          ..
2019-11-27  오후 08:24           119,808 deplister.exe
2019-12-05  오후 11:06    <DIR>          dev
2019-12-05  오후 11:06    <DIR>          ext
2019-12-05  오후 11:06    <DIR>          extras
2019-11-27  오후 08:24         1,374,720 glib-2.dll
2019-11-27  오후 08:24            18,432 gmodule-2.dll
2019-11-27  오후 08:24        27,980,288 icudt65.dll
2019-11-27  오후 08:24         2,632,192 icuin65.dll
2019-11-27  오후 08:24            61,440 icuio65.dll
2019-11-27  오후 08:24         1,890,304 icuuc65.dll
2019-12-05  오후 11:06    <DIR>          lib
2019-11-27  오후 08:24         3,422,208 libcrypto-1_1-x64.dll
2019-11-27  오후 08:24            47,616 libenchant.dll
2019-11-27  오후 08:24           282,624 libpq.dll
2019-11-27  오후 08:24           108,544 libsasl.dll
2019-11-27  오후 08:24           300,544 libsodium.dll
2019-11-27  오후 08:24         1,301,504 libsqlite3.dll
2019-11-27  오후 08:24           225,792 libssh2.dll
2019-11-27  오후 08:24           679,424 libssl-1_1-x64.dll
2019-11-27  오후 08:24             3,272 license.txt
2019-11-27  오후 08:24            18,782 news.txt
2019-11-27  오후 08:24           197,120 nghttp2.dll
2019-11-27  오후 08:30                43 phar.phar.bat
2019-11-27  오후 08:30            53,231 pharcommand.phar
2019-11-27  오후 08:24            72,704 php-cgi.exe
2019-11-27  오후 08:24            36,864 php-win.exe
2019-11-27  오후 08:24           128,512 php.exe
2019-11-27  오후 08:24            74,599 php.ini-development
2019-11-27  오후 08:24            74,904 php.ini-production
2019-11-27  오후 08:24            35,840 php7apache2_4.dll <------------ 여기 있다.
2019-11-27  오후 08:24           890,770 php7embed.lib
2019-11-27  오후 08:24           344,064 php7phpdbg.dll
2019-11-27  오후 08:24         9,496,064 php7ts.dll
2019-11-27  오후 08:24           346,112 phpdbg.exe
2019-11-27  오후 08:24            30,257 readme-redist-bins.txt
2019-11-27  오후 08:24             4,846 README.md
2019-12-05  오후 11:06    <DIR>          sasl2
2019-11-27  오후 08:24             2,224 snapshot.txt
              33개 파일          52,255,648 바이트
               7개 디렉터리  450,575,360,000 바이트 남음

C:\apache\php-7.4.0-Win32-vc15-x64>

이것으로 PHP 모듈을 Apache 시작할 때에 추가로 불려오게 된다.

확장자 (.php) 등록

PHP에서 사용하는 확장자 (.php)과 PHP를 연결한다. 등록을 함으로써 확장자 (.php)의 파일에 액세스가 있었을 때에 PHP를 사용하여 실행된 결과를 클라이언트에 반환된다. "httpd.conf" 파일의 맨 아래 부분에 다음과 같이 작성한다.

<FilesMatch "\.php$">
  AddHandler php7-script .php
  AddType application/x-httpd-php .php
</FilesMatch>

이렇게 하면 확장자가 등록 되었다.

php.ini의 위치 지정 (PHPIniDir)

PHP 설정 파일인 "php.ini"가 설치되어 있는 경로를 지정한다. "httpd.conf" 파일을 열고 이번에는 맨 마지막에 다음과 같이 작성한다.

PHPIniDir "C:/apache/php-7.4.0-Win32-vc15-x64"

위에 "php.ini" 파일이 "C:/apache/php-7.4.0-Win32-vc15-x64" 디렉토리에 설치가 되어 경우이다. 자신의 환경에 맞게 변경하도록 한다. 처음 설치했다면 "php.ini"는 존재하지 않는다면, php.ini-development 파일이나 php.ini-production 파일를 복사하여 확장자를 ini로 변경한다.

이것으로 지정된 위치에있는 "php.ini"파일을 참조 할 수 있다.

"httpd.conf" 파일의 변경이 되면 Apache를 다시 시작하여 새 설정을 반영한다.

반응형
반응형

기본(basic) 인증은 거의 모든 브라우저에서 사용할 수 있지만, 사용자명과 비밀번호 정보를 서버에 전송할 때 일반(Plain) 텍스트로 전송되므로 만약 통신 내용을 중간에 가로채면 사용자명과 비밀번호를 노출이 되어 버린다.

그래서 브라우저와 서버간에 이루어지는 통신에서 흐르는 정보를 MD5로 암호화하고 통신하는 방식이 다이제스트 인증이다.

설정 방법은 기본 인증의 경우와 비슷하다. 순서대로 살펴 보도록 하자.

비밀번호 파일 생성

먼저 비밀번호 파일을 작성한다. 기본 인증의 경우에는 Apache에서 제공되는 "htpasswd.exe"를 사용했지만, 다이제스트 인증의 경우에는 "htdigest.exe"를 사용한다. 이 파일이 놓여있는 위치는 "htpasswd"와 동일하게 "(Apache 설치 디렉토리)/Apache24/bin"에 있다.

실행시의 형식은 다음과 같습니다.

htdigest 옵션 비밀번호-파일 영역명 사용자명

생성한 비밀번호 파일을 지정하고 추가하는 사용자명을 지정한다. 비밀번호 파일을 새로 만들려면 옵션 "-c"를 지정한다. 기존의 비밀번호 파일에 사용자를 추가하는 경우에는 옵션에 아무것도 지정하지 않는다.

기본 인증의 경우와 다른 점은 "영역명"을 맞게 지정한다. 이 영역명은 "AuthName"로 지정하는 영역명과 동일해야 한다.

htdigest -c "C:/apache/passwd/digestpass" "Digest Auth" devkuma

위에서는 비밀번호 파일은 "C:/apache/passwd/digestpass"으로 하고, 영역명은 "Digest Auth"으로 하였으며, 사용자명은 "devkuma"로 지정하여 새 암호 파일을 만들고 있다. 생성할 때는 설정 비밀번호를 두 번 입력해야 하다.

C:\apache\Apache24\bin>htdigest -c "C:/apache/passwd/digestpass" "Digest Auth" devkuma
Adding password for devkuma in realm Digest Auth.
New password: ****
Re-type new password: ****

C:\apache\Apache24\bin>

생성된 비밀번호 파일은 텍스트 파일이므로 텍스트 편집기으로 열어 볼 수 있다.

devkuma:Digest Auth:511a7e57972fad36f7687cf36cd57d6e

"사용자명:영역명:비밀번호"의 형식으로 사용자 1명에 1줄로 작성된다.

httpd.conf 설정

"httpd.conf" 설정은 기본 인증의 경우와 거의 동일하다.

"AuthType"에는 "Basic" 대신에 "Digest"을 지정하고, "AuthName"는 비밀번호 파일을 만들 때 지정한 것과 동일한 영역명을 지정한다. 비밀번호 파일의 지정은 이전 버전에서는 "AuthDigestFile"를 사용한 것 같은데 Apache2.2 이후부턴"AuthUserFile "이다.

<Directory "${SRVROOT}/htdocs/admin">
    AuthType Digest
    AuthName "Digest Auth"
    AuthUserFile "C:/apache/passwd/digestpass"
    Require valid-user
</Directory>

모듈 추가

다이제스트 인증을 사용하는 경우에는 "auth_digest_module"모듈을 로드해야 한다. 디폴트로는 로드하지 않도록 되어있다. "httpd.conf"파일에서 "auth_digest_module"로 검색 해보세요. 71 번째 줄 부근에 설명이 있습니다.

LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so <--------- 디폴트로 로드하지 않도록 주석으로 되어 있다.
#LoadModule auth_form_module modules/mod_auth_form.so
#LoadModule authn_anon_module modules/mod_authn_anon.so

"auth_digest_module"에 대한 "LoadModule"의 앞에 "#"이 작성 되어있다면 "#"을 제거한다. 이것으로 다음부터는 "auth_digest_module" 모듈을 로딩이 될 것이다.

LoadModule asis_module modules / mod_asis.so
LoadModule auth_basic_module modules / mod_auth_basic.so
LoadModule auth_digest_module modules / mod_auth_digest.so  <--------- '#'를 제거하여 주석을 풀었다.
#LoadModule authn_anon_module modules / mod_authn_anon.so
#LoadModule authn_dbm_module modules / mod_authn_dbm.so

다이제스트 인증을 시도

그럼 문서 루트 아래의 "admin" 디렉터리에서 다이제스트 인증을 설정한다. 사용되는 비밀번호 파일은 앞에서 작성한 것을 그대로 사용한다.

<Directory "${SRVROOT}/htdocs/admin">
    AuthType Digest
    AuthName "Digest Auth"
    AuthUserFile "C:/apache/passwd/digestpass"
    Require valid-user
</Directory>

그러면 브라우저에서 "http://localhost/admin/admin.html"에 액세스하면 다음과 같이 인증 대화 상자가 표시된다.

크롬에서 접속한 경우


Microsoft Edge에서 접속한 경우


인증 대화 화면의 기본 인증의 경우와는 약간 차이가 있지만 기본적으로 동일하다. 올바른 사용자명과 비밀번호를 입력하고 인증을 통과하면 해당 페이지가 표시된다.

인증 대화 화면에서 "취소"버튼을 클릭하면 다음과 같은 오류 표시가 행해지고 요청은 종료된다.

덧붙여서 비밀번호 파일을 만들 때 사용자에게 설정한 영역명과 "AuthName"에서 설정한 영역명이 다른 경우에는 사용자명과 비밀번호가 일치하여도도 인증은 되지 않는다.

반응형
반응형

"Require"를 사용하여 IP 주소 및 도메인의 제한을 설정하는 방법과 사용자명과 비밀번호를 사용하는 사용자 인증을 수행하는 방법을 하나의 디렉토리에 모두 지정할 수 있다.

<Directory "${SRVROOT}/htdocs/admin">
    Require all granted
    Require ip 192.168.1.0/24
        
    AuthType Basic
    AuthName "사용자명과 비밀번호를 입력하세요."
    AuthUserFile "C:/apache/passwd/passfile"
    Require valid-user
</Directory>

이렇게 두 방식으로 액세스 제한이 설정되어 있으면, 기본적으로 두 조건을 모두 만족하는 경우에만 액세스가 허용된다. 즉, IP 주소도 지정 주소에서 접근이면서, 사용자 인증을 통과한 경우를 말한다.

Apache에서는 어느 하나의 조건만 맞다면 액세스를 허용하도록 설정하는 것도 가능하다. 즉, IP 주소가 조건에 맞는다면 무조건 접근을 허용하고 지정된 IP 주소가 아니라면 사용자 인증해야 한다. 이는 사내에서 자유롭게 볼 수 있지만, 외부에서 볼 경우에 액세스 인증이 해야만 하는 경우를 생각할 수 있다.

설정하려면 "<RequireAny>"으로 설정한다.

<RequireAny>
....
</RequireAny>

그리고 "<RequireAll>"로 설정하면, 특별히 아무것도 지정되지 않은 경우와 동일하게 두 조건이 충족된 경우에만 액세스가 허용된다.

<RequireAll>
...
</RequireAll>

이는 다음과 같이 작성한다.

<Directory "${SRVROOT}/htdocs/admin">
    <RequireAll>
    Require all granted
    Require ip 192.168.1.0/24
        
    AuthType Basic
    AuthName "사용자명과 비밀번호를 입력하세요."
    AuthUserFile "C:/apache/passwd/passfile"
    Require valid-user
    </RequireAll>
</Directory>


반응형
반응형

"Require"를 사용하여 접근할 수 있는 사용자를 설정할 시에 사용자가 적은 경우는 나열을 해도 상관 없지만, 미리 사용자를 그룹에 등록해 고, 그룹 단위로 접근을 허용할 수 있다. 그러면 그룹에 포함된 사용자는 인증이 통과하면 접근이 허용되는 것이다.

먼저 그룹명과 그룹에 속한 사용자를 작성하는 그룹 파일을 만든다.

그룹 파일 생성

비밀번호 파일의 경우는 Apache에서 "htpasswd.exe"라고 도구가 준비되어 있지만, 그룹 파일에는 그러한 도구는 준비되어 있지 않다. 그룹 파일은 단순한 텍스트 파일이기에 텍스트 편집기에서 작성을 한다.

그룹명1: 사용자명1 사용자명2 사용자명3 ...
그룹명2: 사용자명1 사용자명4 ...

그룹 파일에 등록하는 그룹마다 한 줄로 작성한다. 그룹명 뒤에 콜론(:)으로 구분하여 그룹에 등록하는 사용자 이름을 작성한다. 사용자명은 공백으로 구분하여 이어서 작성한다.

여기서는 그룹 파일명은 "C:\apache\passwd\ group"라고 지정하겠다. 이번에 생성하는 그룹 파일은 다음과 같다.

group

admin: devkuma kimkc
user: araikuma
other: happykuma

AuthGroupFile을 지정

다음은 "httpd.conf" 파일에 "AuthGroupFile"를 사용하여 그룹 파일명을 지정한다.

AuthGroupFile 그룹명

앞에서 생성한 그룹 파일을 지정은 다음과 같이 하면 된다.

AuthGroupFile "C:/apache/passwd/group"

httpd.conf에 작성 방법

그룹 파일는 어디까지나 사용자를 한번에 관리하는 위한 것이므로, 인증은 사용자 단위로 이루어진다. 그러므로 "AuthGroupFile"는 사용자 인증을 위한 설정 중에 하나로서 작성이 된다.

<Directory "${SRVROOT}/htdocs/admin">
    AuthType Basic
    AuthName "사용자명과 비밀번호를 입력하세요."
    AuthUserFile "C:/apache/passwd/passfile"
    AuthGroupFile "C:/apache/passwd/group"
    Require group admin user
</Directory>

"Require"에 대한 옵션에 "group"을 지정하고, 이어서 접근를 허용할 그룹을 공백으로 구분하여 작성한다.

※ 사용자의 경우에는 모든 사용자를 허용하는 "valid-user"라고 작성을 하였지만, 그룹의 경우는 그렇지 않기에 하나 하나 작성할 수 밖에 없다.

그럼 그룹을 사용한 인증을 해보도록 하겠다. 그러면 인증이 설정되어 있는 디렉토리에 포함된 "http://localhost/admin/admin.html"에 브라우저로 접근한다.


그룹명에 의해 인증을 설정된 경우에도 브라우저에 표시되는 인증 대화 상자는 동일하다. 권한이 설정되어 있는 그룹에 포함된 사용자명으로 인증을 통과하면 해당 페이지가 표시된다.


반응형

+ Recent posts