2014年3月6日 星期四

在 Nginx 使用 FreeBSD 的 kernel module httpready

FreeBSD 使用一個叫 accept_filter(9) 的機制能允許應用程式要求系統核心預先處理過連線。例如,accf_http(9) 接收過濾器會等到完整的HTTP request己經讀入緩衝區裡,accept(2)才會回傳值

listen 80 default accept_filter=httpready;

httpready 參數必須設定在有 default 的 listen 之上,而且必須在 default 之後,不然會回報設定錯誤。





Q:
nginx: [alert] setsockopt(SO_ACCEPTFILTER, "httpready") for 0.0.0.0:80 failed, ignored (2: No such file or directory)

A:
檢查
# kldstat | grep accf_http
沒東西那就 手動載入
# kldload accf_http
有的話那下面就不用繼續看了! 你不是這問題

再啟動一次 nginx 應該就沒錯誤了

將 accf_http 加入啟動載入
# echo 'accf_http_load="YES"' >> /boot/loader.conf


參考資料:
http://blog.gslin.org/archives/2010/03/06/2225/nginx-%E7%9A%84%E8%AA%BF%E6%95%B4/
http://blog.xuite.net/relay/blog/11113947-Apache%E9%87%8D%E6%96%B0%E5%95%9F%E5%8B%95%E6%99%82%E5%87%BA%E7%8F%BEhttpready%E7%9A%84%E9%8C%AF%E8%AA%A4%E8%A8%8A%E6%81%AF
http://rtfm.co.ua/nginx-httpready-failed-ignored-no-such-file-or-directory/