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
Note: Only a member of this blog may post a comment.