日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx 源码调试

發布時間:2024/4/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx 源码调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

nginx 源碼調試

這段時間正在學習nginx源碼,看到一貼子的提問 (帖子:http://www.oschina.net/question/2711991_2165566?p=1#AnchorAnswer1114315),決定試試能不能搞定。

這個帖子的主要問題是,自己寫的第三方模塊,不能使用gzip壓縮,nginx自帶模塊使用正常。

對nginx 熟悉的大牛,估計一眼就能看出問題所在,對于我這種小菜,比對了helloworld模塊跟status模塊,也沒看出問題所在,只能用絕招跟蹤兩個模塊的源碼。

nginx是多個work進程,為了方便調試,把修改nginx.conf配置文件,只啟用1個work進程。

現在是status模塊可以gzip,? helloword模塊不能gzip, 說明gzip模塊的配置是正確,初步懷疑是helloword模塊中的某些參數配置不正確,導致沒有調用到gzip。

查看ngx_http_gzip_filter_module.c代碼,ngx_http_gzip_header_filter()函數為此模塊的handle函數。

ps -ef|grep nginx? 查看nginx進程號,

32259 為nginx工作進程號。

gdb attach 32259?? 啟動gdb 附加到此進程

b ngx_http_gzip_header_filter? 打斷點,到此函數,

使用curl給nginx 發信息,

curl -I? -H"accept-encoding:gzip" "http://127.0.0.1/hello_world"??

gdb 能斷到此函數,說明能進入gzip模塊。

然后單步運行,發現在這句(return ngx_http_next_header_filter(r);)返回了,并沒有繼續執行。

??

之后使用curl -I? -H"accept-encoding:gzip" "http://127.0.0.1/nginx-status"?發送,并沒有在此位置退出,說明是上面判斷條件成立,使helloword模塊返回了。

單步跟蹤之后是ngx_http_test_content_type(r, &conf->types) == NULL條件成立,于是根據此函數進去,發現沒有進入for循環,p len 為0, 顧發現content_type_len 沒有設置。

?

在helloworld模塊中,添加:r->headers_out.content_type_len = sizeof("text/plain") - 1;

?由于要使用壓縮,在helloworld 模塊,不能指定content_length, 刪掉 r->headers_out.content_length_n = content_length;


重新編譯源碼,測試發送:

?

總結

以上是生活随笔為你收集整理的nginx 源码调试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。