반응형

Apache는 앨리어스(Alias)을 사용하면 도큐먼트 루트(\htdocs)가 아닌 디렉토리를 외부에서 접근할 수 있다.

앨리어스 (Alias)

클라이언트에 공개하는 콘텐츠는 도큐먼트 루트(\htdocs) 아래의 디렉토리에 위치해야 하지만, 앨리어스(Alias)을 사용하여 전혀 다른 디렉토리에 있는 파일을 도큐먼트 루트 아래에 위치된 것처럼 보이게 할 수 있다.

Alias URL-path file-path|directory-path

클라이언트의 요청에 포함된 URL 경로가 서버의 실제 어느 디렉토리에 대응될 것인가를 지정한다.

그러면 "httpd.conf"파일에서 "Alias"로 검색해 보면, 다음과 같은 내용을 찾을 수 있을 것이다.

<IfModule alias_module>
    #
    # Redirect: Allows you to tell clients about documents that used to 
    # exist in your server's namespace, but do not anymore. The client 
    # will make a new request for the document at its new location.
    # Example:
    # Redirect permanent /foo http://www.example.com/bar

    #
    # Alias: Maps web paths into filesystem paths and is used to
    # access content that does not live under the DocumentRoot.
    # Example:
    # Alias /webpath /full/filesystem/path
    #
    # If you include a trailing / on /webpath then the server will
    # require it to be present in the URL.  You will also likely
    # need to provide a <Directory> section to allow access to
    # the filesystem path.

    #
    # ScriptAlias: This controls which directories contain server scripts. 
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the target directory are treated as applications and
    # run by the server when requested rather than as documents sent to the
    # client.  The same rules about trailing "/" apply to ScriptAlias
    # directives as to Alias.
    #
    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"

</IfModule>

Alias를 사용하지 않는 경우를 생각해 보겠다. 도큐먼트 루트가 "${SRVROOT}/htdocs"이었다면 클라이언트에서 "http://localhost/sub/index.html"와 같은 요청은 다음과 같다.

http://localhost/sub/index.html
${SRVROOT}/htdocs/sub/index.html

이에 대응되게 다음과 같이 "Alias"를 설정하려고 한다.

Alias /sub/ "C:/apache/data"

이렇게 되면 클라이언트에서 "http://localhost/sub/index.html"와 같은 요청은 다음과 같다.

http://localhost/sub/index.html
C:/apache/data/index.html

"Alias"를 설정하여 Apache 도큐먼트 루트 아래에 한정되지 않고 (Apache가 포함되어 있는 디렉토리 이외에서도) 문서를 위치시킬 수 있다.

실습

그럼 실습으로 "C:/apache/data" 디렉토리를 만들고, 그 디렉토리 안에 아래 HTML 파일을 넣어보자.

hello.html

<html>
<head><title>Apache Alias</title></head>
<body>
<h1>Hello World Alias devkuma!</h1>
</body>
</html>

그리고 "Alias"에 대한 설정을 추가합니다.

<IfModule alias_module>
    #
    # Redirect: Allows you to tell clients about documents that used to 
    # exist in your server's namespace, but do not anymore. The client 
    # will make a new request for the document at its new location.
    # Example:
    # Redirect permanent /foo http://www.example.com/bar

    #
    # Alias: Maps web paths into filesystem paths and is used to
    # access content that does not live under the DocumentRoot.
    # Example:
    # Alias /webpath /full/filesystem/path
    #
    # If you include a trailing / on /webpath then the server will
    # require it to be present in the URL.  You will also likely
    # need to provide a <Directory> section to allow access to
    # the filesystem path.

    Alias /data/ "C:/apache/data/"
    <Directory "C:/apache/data">
        Require all granted
    </Directory>

    #
    # ScriptAlias: This controls which directories contain server scripts. 
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the target directory are treated as applications and
    # run by the server when requested rather than as documents sent to the
    # client.  The same rules about trailing "/" apply to ScriptAlias
    # directives as to Alias.
    #
    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"

</IfModule>

※ 디렉토리에 대한 권한이 필요하기 때문에 "Require all granted"를 설정하고 있다.

브라우저를 시작하여 다음 URL에 접근한다.

http://localhost/data/hello.html


도큐먼트 루트 이외의 디렉토리에 설치된 파일에 대해 앨리어스(Alias)을 사용하여 외부에서 접근할 수 있게 되었다.

참조


반응형

+ Recent posts