lighttpd에서 mod_negotiation 흉내내기

lifthrasiir의 이미지

최근에 생긴 넷북에 개발 환경을 설치하고 있는데 아파치가 무거워 보여서 lighttpd를 깔았습니다. 나쁘진 않은데 아파치에 들어 있어서 당연히 될 줄 알았던 기능 중 몇몇이 안 되는 걸 발견했는데, 예를 들어 아파치의 mod_negotiation에 대응되는 기능이 없습니다.

mod_negotiation은 흔히 말하는 multi view를 지원해 주는 모듈입니다. 이를테면 어떤 디렉토리에 foo.html, foo.txt 같은 게 있으면, "foo"라는 이름으로 접근했을 때 HTTP 요청에 따라 (정확히는 Accept 헤더에 따라) 둘 중 하나를 적절하게 보내 주는 건데, 이게 Content-Type 뿐만 아니라 언어(foo.ko.html, foo.en.html 등으로 지정), 인코딩(foo.html.gz 따위) 등에도 적용되기 때문에 별도의 스크립트 따위 만들지 않고도 정적인 파일만으로 처리를 가능하게 해 주는 겁니다. 저 같은 경우에는 다국어 지원에 많이 썼고, ".php" 같은 확장자 없는 URL을 만들 때도 종종 썼습니다.

에... 그래서 다 좋은데 lighttpd에는 대응되는 모듈이 없습니다. mod_rewrite를 응용하면 좋겠지만 lighttpd의 해당하는 모듈은 단순한 치환만 가능하기 때문에 별 소용이 없습니다. 대신 mod_magnet이라는 모듈로 루아 스크립트를 가지고 복잡한 치환을 가능하게 하는 건 가능한데, 누가 이걸 갖고 비슷한 일을 하는 스크립트를 만들었습니다. 하지만 제가 원하는 것과는 한참 동떨어졌기 때문에 적절히 고쳐서; 배포하게 되었습니다. (원래 스크립트는 언어에 대한 지원이 없습니다.)

사용법

lighttpd 설정에 다음과 같은 내용을 추가하거나 비슷한 일을 하는 걸 넣습니다.

# mod_magnet이 없다면 넣을 것
server.modules += ("mod_magnet")
 
# 조건절과 파일 경로는 알아서 고칠 것
$HTTP["host"] =~ "^(.*)(domain\.com)$" {
    magnet.attract-physical-path-to = ("path/to/multiview.lua")
}

multiview.lua는 첨부된 파일을 쓰면 됩니다. (pastie에도 올라와 있습니다.) 스크립트는 그다지 완전한 것은 아니고 Accept-Language만 부분적으로 사용하며 Accept는 무시하고 있습니다. EXTENSIONS과 LANGUAGES는 별도의 언어 설정이 없을 때 사용되는 확장자들로 필요에 따라 적절히 고치시면 됩니다.

multiview.lua는 저작권을 포기(public domain dedication)하므로 필요하신 분은 적절히 알아서 잘 갖다/고쳐 쓰시면 감사하겠습니다.

File attachments: 
첨부파일 크기
Plain text icon multiview.lua_.txt3.99 KB
Forums: 

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.