วันอังคารที่ 26 พฤษภาคม พ.ศ. 2552

Lighttpd change http port and path url

Lighttpd เป็น tool ตัวหนึ่งในการช่วยจัดการกับ การเข้าถึง web, directory, load balance, block path
ดู ๆ ข้างในแล้ว เหมือนจะทำขึ้นเพื่อ php มากเลย -.-"
(เอาเป็นว่ารายละเอียดไว้ทีหลัง การติดตั้งหรืออะไรต่าง ๆ หรือไปอ่านเองก่องเถอะครับ เหอ ๆ ว่าง ๆ คงได้เอามาลงครับ)

ตอนนี้จะเป็นการ เปลี่ยน path url การเข้าถึง และ เปลี่ยน port url พร้อม ๆ กัน
(สถาณการณ์บีบบังคับ ทำให้งานออกมาได้จิง ๆ ไม่ต้องรอ บริ้วววว อารมณ์)

งานคือ url ที่ client เรียกเข้าถึงเป็น

http://www.vserver.com/gw/mo/oper1

server ตั้งอยู่ที่ (url จริง ในการใช้งาน)

http://www.vserver.com:8081/req/oper1

ในส่วนของ oper นั้น จะมี oper1, oper2, oper3 ครับ

ขึ้นตอนแรก เข้าไปหา file ชื่อว่า

/etc/lighttpd/lighttpd.conf

เผอิญว่า ทางพี่ ๆ เค้าลงไว้บน ubuntu ให้เสร็จแล้ว ไม่แน่ใจนะครับว่าอยู่ pathนี้ตลอดเปล่า

ขึ้นที่สอง ก็ไปเพิ่ม หรือเอา comment ออกครับในส่วนของ
(comment คือ เครื่องหมาย # หน้าบรรทัด หรือ ข้อความ)

server.modules = (
   "mod_xxxxxxxx", # << 'xxxxxxxx' อันนี้ละไว้ว่าอันอื่น ๆ ครับ
#   "mod_xxxxxxxx", # << แบบนี้คือ comment
   "mod_rewrite",
   "mod_redirect",
   "mod_proxy"
)


ขั้นที่ 3 นั้น แบ่งเป็น 2 ส่วนครับ
3.1 ใช้แบบ redirect
กรณีนี้จะสั้นครับเหมาะกับการเข้าถึง หรือ ใช้ http method get ครับ

#-----------------------------------
$HTTP["host"] == "www.vserver.com" {
  url.redirect = ("^/gw/mo/(.+)" => "http://www.vserver.com:8081/req/$1")
}
#-----------------------------------


$HTTP["host"] == "www.vserver.com" { # << เป็นเหมือนคำสั่งใช้ในการ if คือ ถ้า url เป็นชื่อนี้ก็จำเข้ามาทำงาน

(.+) # << เป็นการแทนค่า path url และ parameter ที่ต่อท้าย เพื่อนำมาแทนใน $1 และสามารถกำหนดได้มากกว่า 1 ตัว เช่น ข้อมูลมาในแบบ rest คือ /gw/mo/(.*)/(.*)/(.*) => /gw/mo/$1?id=$2&price=$3 เป็นการแปลงเป็น name value ธรรมดาครับ

3.2 ใช้แบบ rewrite
กรณีนี้จะต้องทำสองอย่างครับ คือ เปลี่ยน path url ก่อน แล้วค่อย proxy ยัง post ที่ต้องการครับ เนื่องจาก 3.1 นั้นใช้ได้แต่เฉพาะ http method get ถ้าจะใช้ http method post ก็คงเขียนยาวหน่อยครับ

#-----------------------------------
$HTTP["host"] == "www.vserver.com" {
  url.rewrite-once = ("^/gw/mo/(.*)$" => "/req/$1")
  $HTTP["url"] =~ "^/req" {
    proxy.server = (
      "" => (
        "vserver" => (
        "host" => "127.0.0.1",
        "port" => 8081,
        "fix-redirects" => 1
        )
      )
    )
  }
}
#-----------------------------------


เสร็จแล้วก็ทำการ restart ด้วยคำสั่ง

#-----------------------------------
$ /etc/init.d/lighttpd restart
#-----------------------------------


ก็เป็นอันเรียบร้อยครับ
อ๋อ ในกรณี post data xml
syntax จะ ประมาณนี้
<xml> <data> data 123 abc... </data> </xml>

เมื่อทำการ post ให้ใส่ content type : text/xml ด้วยครับ
ไม่ใช่นั้น ปีกกว่าจะเปลี่ยนไป จะได้ประมาณนี้ครับ
%3Cxml%3E %3Cdata%3E data 123 abc... %3C2Fdata%3E %3C%2Fxml%3E

จบแต่เพียงเท่านี้ -.-" กว่าจะหาเจอ ตอนแรกไม่รู้ว่ารวมเป็น combo ได้

ไม่มีความคิดเห็น: