下载nginx-lua
bash
docker pull fabiocicerchia/nginx-lua
编写配置文件
主要是lua代码的编写,用来获取响应体。
nginx
bash
user nginx;
worker_processes auto;
error_log /dev/stdout;
#error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format my escape=json ''
'{ "timestamp": "$time_iso8601″, '
'"remote_addr": "$remote_addr",'
'"remote_port":"$remote_port",'
'"costime": "$request_time",'
'"status": "$status",'
'"request_method":"$request_method",'
'"request_uri":"$request_uri",'
'"request_body":$request_body,'
'"response_body":$resp_body,'
'"agent": "$http_user_agent" }'
'';
#access_log off;
access_log /dev/stdout my;
#access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
include /etc/nginx/conf.d/*.conf;
}
default.conf
bash
server {
listen 20000;
server_name localhost;
#记录nginx请求返回值
lua_need_request_body on;
set $resp_body "";
body_filter_by_lua '
local resp_body = string.sub(ngx.arg[1], 1, 1000)
ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
if ngx.arg[2] then
ngx.var.resp_body = ngx.ctx.buffered
end
';
#access_log /var/log/nginx/host.access.log main;
# 验证lua
location /hello {
default_type 'text/plain';
content_by_lua 'ngx.say("你好, lua")';
}
location /20001/ {
proxy_pass http://192.168.2.5:20001/;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
location /20002/ {
proxy_pass http://192.168.2.5:20002/;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
location /20003/ {
proxy_pass http://192.168.2.5:20003/;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
location /20005/ {
proxy_pass http://192.168.2.5:20005/;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
运行
bash
docker run --rm -it -p 20000:20000 -v /root/app/tmp/nginx.conf:/etc/nginx/nginx.conf -v /root/app/tmp/default.conf:/etc/nginx/conf.d/default.conf fabiocicerchia/nginx-lua
验证
bash
curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}' http://localhost:20000/hello