经常需要配置nginx,nginx有很多以$开头的变量,经常需要查找nginx支持的变量。
可能我对Ngixn资源不太熟悉,所以我只是看了一下源代码,分析了一下支持的变量。
The hypertext transfer protocol (abbreviation of Hyper Text Transport Protocol) variable supported by Nginx is implemented in the ngx _ http _ kernel _ variable storage of ngx _ http _ variable.c.
ngx_http_core_variables
1 static ngx_http_variable_t ngx_http_core_variables[]={
2
3 { ngx_string('http_host'), NULL, ngx_http_variable_header,
4 offsetof(ngx_http_request_t, headers_in.host), 0, 0 },
5
6 { ngx_string('http_user_agent'), NULL, ngx_http_variable_header,
7 offsetof(ngx_http_request_t, headers_in.user_agent), 0, 0 },
8
9 { ngx_string('http_referer'), NULL, ngx_http_variable_header,
10 offsetof(ngx_http_request_t, headers_in.referer), 0, 0 },
11
12 #if (NGX_HTTP_GZIP)
13 { ngx_string('http_via'), NULL, ngx_http_variable_header,
14 offsetof(ngx_http_request_t, headers_in.via), 0, 0 },
15 #endif
16
17 #if (NGX_HTTP_PROXY || NGX_HTTP_REALIP)
18 { ngx_string('http_x_forwarded_for'), NULL, ngx_http_variable_header,
19 offsetof(ngx_http_request_t, headers_in.x_forwarded_for), 0, 0 },
20 #endif
21
22 { ngx_string('http_cookie'), NULL, ngx_http_variable_headers,
23 offsetof(ngx_http_request_t, headers_in.cookies), 0, 0 },
24
25 { ngx_string('content_length'), NULL, ngx_http_variable_header,
26 offsetof(ngx_http_request_t, headers_in.content_length), 0, 0 },
27
28 { ngx_string('content_type'), NULL, ngx_http_variable_header,
29 offsetof(ngx_http_request_t, headers_in.content_type), 0, 0 },
30
31 { ngx_string('host'), NULL, ngx_http_variable_host, 0, 0, 0 },
32
33 { ngx_string('binary_remote_addr'), NULL,
34 ngx_http_variable_binary_remote_addr, 0, 0, 0 },
35
36 { ngx_string('remote_addr'), NULL, ngx_http_variable_remote_addr, 0, 0, 0 },
37
38 { ngx_string('remote_port'), NULL, ngx_http_variable_remote_port, 0, 0, 0 },
39
40 { ngx_string('server_addr'), NULL, ngx_http_variable_server_addr, 0, 0, 0 },
41
42 { ngx_string('server_port'), NULL, ngx_http_variable_server_port, 0, 0, 0 },
43
44 { ngx_string('server_protocol'), NULL, ngx_http_variable_request,
45 offsetof(ngx_http_request_t, http_protocol), 0, 0 },
46
47 { ngx_string('scheme'), NULL, ngx_http_variable_scheme, 0, 0, 0 },
48
49 { ngx_string('request_uri'), NULL, ngx_http_variable_request,
50 offsetof(ngx_http_request_t, unparsed_uri), 0, 0 },
51
52 { ngx_string('uri'), NULL, ngx_http_variable_request,
53 offsetof(ngx_http_request_t, uri),
54 NGX_HTTP_VAR_NOCACHEABLE, 0 },
55
56 { ngx_string('document_uri'), NULL, ngx_http_variable_request,
57 offsetof(ngx_http_request_t, uri),
58 NGX_HTTP_VAR_NOCACHEABLE, 0 },
59
60 { ngx_string('request'), NULL, ngx_http_variable_request_line, 0, 0, 0 },
61
62 { ngx_string('document_root'), NULL,
63 ngx_http_variable_document_root, 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
64
65 { ngx_string('realpath_root'), NULL,
66 ngx_http_variable_realpath_root, 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
67
68 { ngx_string('query_string'), NULL, ngx_http_variable_request,
69 offsetof(ngx_http_request_t, args),
70 NGX_HTTP_VAR_NOCACHEABLE, 0 },
71
72 { ngx_string('args'),
73 ngx_http_variable_request_set,
74 ngx_http_variable_request,
75 offsetof(ngx_http_request_t, args),
76 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
77
78 { ngx_string('is_args'), NULL, ngx_http_variable_is_args,
79 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
80
81 { ngx_string('request_filename'), NULL,
82 ngx_http_variable_request_filename, 0,
83 NGX_HTTP_VAR_NOCACHEABLE, 0 },
84
85 { ngx_string('server_name'), NULL, ngx_http_variable_server_name, 0, 0, 0 },
86
87 { ngx_string('request_method'), NULL,
88 ngx_http_variable_request_method, 0,
89 NGX_HTTP_VAR_NOCACHEABLE, 0 },
90
91 { ngx_string('remote_user'), NULL, ngx_http_variable_remote_user, 0, 0, 0 },
92
93 { ngx_string('body_bytes_sent'), NULL, ngx_http_variable_body_bytes_sent,
94 0, 0, 0 },
95
96 { ngx_string('request_completion'), NULL,
97 ngx_http_variable_request_completion,
98 0, 0, 0 },
99
100 { ngx_string('request_body'), NULL,
101 ngx_http_variable_request_body,
102 0, 0, 0 },
103
104 { ngx_string('request_body_file'), NULL,
105 ngx_http_variable_request_body_file,
106 0, 0, 0 },
107
108 { ngx_string('sent_http_content_type'), NULL,
109 ngx_http_variable_sent_content_type, 0, 0, 0 },
110
111 { ngx_string('sent_http_content_length'), NULL,
112 ngx_http_variable_sent_content_length, 0, 0, 0 },
113
114 { ngx_string('sent_http_location'), NULL,
115 ngx_http_variable_sent_location, 0, 0, 0 },
116
117 { ngx_string('sent_http_last_modified'), NULL,
118 ngx_http_variable_sent_last_modified, 0, 0, 0 },
119
120 { ngx_string('sent_http_connection'), NULL,
121 ngx_http_variable_sent_connection, 0, 0, 0 },
122
123 { ngx_string('sent_http_keep_alive'), NULL,
124 ngx_http_variable_sent_keep_alive, 0, 0, 0 },
125
126 { ngx_string('sent_http_transfer_encoding'), NULL,
127 ngx_http_variable_sent_transfer_encoding, 0, 0, 0 },
128
129 { ngx_string('sent_http_cache_control'), NULL, ngx_http_variable_headers,
130 offsetof(ngx_http_request_t, headers_out.cache_control), 0, 0 },
131
132 { ngx_string('limit_rate'), ngx_http_variable_request_set_size,
133 ngx_http_variable_request_get_size,
134 offsetof(ngx_http_request_t, limit_rate),
135 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
136
137 { ngx_string('nginx_version'), NULL, ngx_http_variable_nginx_version,
138 0, 0, 0 },
139
140 { ngx_string('hostname'), NULL, ngx_http_variable_hostname,
141 0, 0, 0 },
142
143 { ngx_string('pid'), NULL, ngx_http_variable_pid,
144 0, 0, 0 },
145
146 { ngx_null_string, NULL, NULL, 0, 0, 0 }
147 };
提取这些变量并总结如下:
nginx抵御DDOS攻击的简单配置
nginx本身就有防军械服务局副局长军火服务司副司长攻击这方面的模块ngx _ http _ limit _ req _模块和ngx_http_limit_conn_module
一、基本介绍
1.ngx_http_limit_req_module
配置格式和描述:
设置一个缓冲区来存储不同键的状态,其中状态指的是当前过量请求的数量。而key是由变量指定的,变量是非空变量。我们在这里使用$binary_remote_addr来表示源IP是键值。
limit_req_zone $variable zone=name:size rate=rate;
指定要限制的缓冲区以及最大请求到达后有多少请求被放入延迟队列(其他的直接丢弃)。如果你不想要求