Nginx echo 模块
2016-01-18 by dongnan
开始之前
nginx 从 1.9.11
版本开始支持动态方式加载模块,动态方式让 nginx添加第三方模块更为简单,
首先拿到第三方编译好的动态链接库so
文件, 其次使用 load_module
指令加载这个模块,最后检测并重启 nginx就完成了。
操作步骤
查找模块
# 执行命令
apt search mod-http-echo
Sorting... Done
Full Text Search... Done
libnginx-mod-http-echo/oldstable,oldstable,now 1.10.3-1+deb9u3 amd64
Bring echo and more shell style goodies to Nginx
安装模块
# 执行命令
apt install libnginx-mod-http-echo
# 安装好的模块保存在这个目录里
ls /usr/lib/nginx/modules/ngx_http_echo_module.so
编辑配置文件
# 主配置文件
vim /etc/nginx/nginx.conf
# 确保 `load_module` 指令在配置文件首行。
load_module modules/ngx_http_echo_module.so;
然后在虚拟主机配置文设置 location
和 echo
指令。
cat /etc/nginx/conf.d/default.conf
server
{
#... 其它配置项省略
location = /nginx_var {
default_type 'text/plain';
echo "args:" $args;
echo "content_length:" $content_length;
echo "content_type:" $content_type;
echo "document_root:" $document_root;
echo "host:" $host;
echo "http_user_agent:" $http_user_agent;
echo "http_cookie:" $http_cookie;
echo "limit_rate:" $limit_rate;
echo "request_body_file:" $request_body_file;
echo "request_method:" $request_method;
echo "request_filename:" $request_filename;
echo "request_uri:" $request_uri;
echo "remote_addr:" $remote_addr;
echo "remote_port:" $remote_port;
echo "remote_user:" $remote_user;
echo "x_forwarded_for:" $proxy_add_x_forwarded_for;
echo "query_string:" $query_string;
echo "scheme:" $scheme;
echo "server_protocol:" $server_protocol;
echo "server_addr:" $server_addr;
echo "server_name:" $server_name;
echo "uri:" $uri;
echo "document_uri:" $document_uri;
}
}
重启 nginx
nginx -t && nginx -s reload
验证
curl https://www.demo.com/nginx_var
args:
content_length:
content_type:
document_root: /var/www/html
host: www.demo.com
http_user_agent: curl/7.58.0
http_cookie:
limit_rate: 0
request_body_file:
request_method: GET
request_filename: /var/www/html/nginx_var
request_uri: /nginx_var
remote_addr: 119.188.1xx.1xx
remote_port: 44230
remote_user:
x_forwarded_for: 106.37.2xx.2xx, 119.188.1xx.1xx
query_string:
scheme: https
server_protocol: HTTP/1.1
server_addr: 192.168.128.2
server_name: www.demo.com
uri: /nginx_var
document_uri: /nginx_var
常用变量例如
$http_user_agent: curl/7.58.0
$remote_addr: 119.188.1xx.1xx
$x_forwarded_for: 106.37.2xx.2xx, 119.188.1xx.1xx
全局变量
$args #这个变量等于请求行中的参数。
$content_length #请求头中的Content-length字段。
$content_type #请求头中的Content-Type字段。
$document_root #当前请求在root指令中指定的值。
$host #请求主机头字段,否则为服务器名称。
$http_user_agent #客户端agent信息
$http_cookie #客户端cookie信息
$limit_rate #这个变量可以限制连接速率。
$request_body_file #客户端请求主体信息的临时文件名。
$request_method #客户端请求的动作,通常为GET或POST。
$remote_addr #客户端的IP地址。
$remote_port #客户端的端口。
$remote_user #已经经过Auth Basic Module验证的用户名。
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string #与$args相同。
$scheme #HTTP方法(如http,https)。
$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
$server_name #服务器名称。
$server_port #请求到达服务器的端口号。
$request_uri #包含请求参数的原始URI,不包含主机名,如:"/foo/bar.php?arg=baz"。
$uri #不带请求参数的当前URI,$uri不包含主机名,如"/foo/bar.html"。
$document_uri #与$uri相同。
load_module指令
语法: load_module file;
默认值: 无
使用字段: main
功能: 加载动态模块。
小结
最后来总结下文章中的知识点
- 添加的模块要与nginx版本相对应。
- 动态方式,优势在于操作灵活简洁。
- 静态方式,优势在于提供更好的性能。
- 使用静态方式还是动态方式需要根据项目环境和实际需求来决定。
参考
- http://nginx.org/en/docs/ngx_core_module.html#load_module
- https://github.com/openresty/echo-nginx-module