What have you found for these years?

2009-10-01

passenger + nginx + rack 大地雷

urlmap 會爛掉,因為 rack 的 urlmap 會檢查 SERVER_NAME 與 HTTP_HOST.
如果沒有 SERVER_NAME 則不會檢查。(應該啦,沒細看,照理說是這樣做)
(rack 的程式寫得相當不錯,比 rails 好太多了,所以不懷疑 XD)

但 passenger + nginx 一定會傳送 SERVER_NAME, 原本 nginx
server_name 的 wildcard 是 _, 這個不可能跟 host 會相同的。
如果不設 server_name 的話,又會用 ip 反查 host, 可是這個
host 不是給外界看的 host, 因此也不可能讓 server_name 跟 host 相同。

因此 passenger nginx module 下的 server_name 不管是設 wildcard
或是不設,都會造成 rack 的 urlmap 永遠檢查不過 @@

解決辦法就只能是選定一個正確的 server_name 設下去,no wildcard!

真不幸,因此這邊有兩種解決辦法:

1. 叫 passenger 不要亂設 server_name
不過我不確定這會不會是 nginx 強迫設定的!

2. 讓 rack 的 urlmap HTTP_HOST 和 SERVER_NAME 檢查,
可以有一個 wildcard! 不管是 _ 或 * 都好,總之要有個標準。
用 regexp 我也不介意 :s

3. 就乖乖設好 server_name

先這樣,晚點再看看要跟 rack 還是 passenger 講。

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0