Apache | 콘텐츠의 설치 | 앨리어스 (Alias)
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)을 사용하여 외부에서 접근할 수 있게 되었다.