从nginx模块中的ngx_http_request_t获取ip和url

时间:2013-06-14 19:55:15

标签: c module nginx

我需要在nginx模块中通过ngx_http_request_t struct在ngnix中获取客户端ip和uri。

如你所知nginx模块写如下面的代码

ngx_http_sql_handler(ngx_http_request_t *r){//Code Here}

如何从r获取ip和uri,我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以从以下网址获取IP:

&r->connection->addr_text

addr_text ngx_str_t

答案 1 :(得分:0)

ngx_http_request_tngx_http_request_s的typedef。请参阅http://lxr.nginx.org/source/src/http/ngx_http.h#0016

如下所示(来自http://lxr.nginx.org/source/src/http/ngx_http_request.h#0358):

0358 struct ngx_http_request_s {
0359     uint32_t                          signature;         /* "HTTP" */
0360 
0361     ngx_connection_t                 *connection;
0362 
0363     void                            **ctx;
0364     void                            **main_conf;
0365     void                            **srv_conf;
0366     void                            **loc_conf;
0367 
0368     ngx_http_event_handler_pt         read_event_handler;
0369     ngx_http_event_handler_pt         write_event_handler;
...
0394     ngx_str_t                         request_line;
0395     ngx_str_t                         uri;
0396     ngx_str_t                         args;
0397     ngx_str_t                         exten;
0398     ngx_str_t                         unparsed_uri;
...
};

ngx_connection_tngx_connection_s,你可以在http://lxr.nginx.org/source/src/core/ngx_connection.h#0117找到它的定义。

ngx_connection_t有一个ngx_socket_t。获得套接字后,您可以从sin_addr.s_addr获取IP。

URI只是一个nginx字符串。