openresty通过lua增加header信息

一、准备lua的模块信息

地址:https://github.com/cloudflare/lua-resty-cookie

二、openresty配置示例

# cat nginx.conf
user  dataanalyze;
worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;


#error_log  /data/logs/nginx/nginx_error.log  crit;

#error_log  logs/error.log  notice;

#pid        /var/run/nginx/nginx.pid;

worker_rlimit_nofile 50000;

events
{
     use epoll;
     worker_connections 50000;
}



http {
    include       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"';

     server_names_hash_bucket_size 128;

     sendfile on;
     tcp_nopush     on;
     tcp_nodelay on;
     server_tokens off;

#     limit_req_zone  $binary_remote_addr  zone=perreq:10m rate=66r/s;
#     limit_req   zone=perreq  burst=120 nodelay;

#limit_req_zone $binary_remote_addr zone=perreq:10m rate=166r/s;
#limit_conn_zone $binary_remote_addr zone=perip:10m;


     log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                  '"$status" $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$http_cookie" "$msec"';
     log_format  time  '$remote_addr $time_local $request_time $request $status';
     #access_log /data/logs/nginx/access.log main buffer=24k;



     keepalive_timeout 120;
     client_header_timeout 3m;
     client_body_timeout 3m;
     client_max_body_size 100m;




     connection_pool_size 256;
     client_header_buffer_size 64k;
     large_client_header_buffers 4 64k;
     request_pool_size 64k;
     output_buffers 4 64k;
     postpone_output 1460;
     client_body_buffer_size 256k;


     fastcgi_connect_timeout 100;
     fastcgi_send_timeout 100;
     fastcgi_read_timeout 100;

     fastcgi_buffer_size 256k;
     fastcgi_buffers 8 256k;
     fastcgi_busy_buffers_size 256k;
     fastcgi_temp_file_write_size 256k;
#     fastcgi_temp_path /dev/shm;
#     fastcgi_intercept_errors on;

#     open_file_cache max=50000 inactive=20s;
#     open_file_cache_min_uses 1;
#     open_file_cache_valid 30s;

     gzip on;
     gzip_min_length  4k;
     gzip_buffers     4 16k;
     gzip_http_version 1.1;
     gzip_comp_level 2;
     gzip_types       text/plain application/x-javascript text/css application/xml;
     gzip_vary on;



     include vhosts/*.com;
     include vhosts/*.conf;


     lua_package_path "/opt/lua-resty-cookie-master/lib/?.lua;;";

}

---------------------------------------------------

# cat vhosts/ggtf.wanyanzhenjiang.com
#lua_package_path "/opt/lua-resty-cookie-master/lib/?.lua;;";
server{
    listen   443;
    server_name ggtf.wanyanzhenjiang.com;

    ssl on;
    ssl_certificate /data/openresty/nginx/ssl/wanyanzhenjiang.crt;
    ssl_certificate_key /data/openresty/nginx/ssl/wanyanzhenjiang.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;

    error_log /data/openresty/nginx/logs/ggtf_error.log;
    access_log /data/openresty/nginx/logs/ggtf_access.log;
    location / {
        set $tgkey $arg_tgkey;
        set $referer $arg_to;
        set_by_lua $expires_time 'return ngx.cookie_time(ngx.time()+1800)';
        set_by_lua $referer_url 'return string.gsub(ngx.var.referer, "%%(%x%x)", function(h) return string.char(tonumber(h, 16)) end)';
        add_header Set-Cookie 'tgkey=$tgkey; Domain=.wanyanzhenjiang.com; expires=$expires_time;Max-Age=1800;';

        default_type text/html;
        set $a 0;
        set $b 0;
        if ( $referer ~* "wanyanzhenjiang.com(%2f|%20|/)(.*)"){
                set $a 1;
        }
        if ( $referer ~* "wanyanzhenjiang.com$"){
                set $a 1;
        }
        if ( $a = 1 ){
                set $b 1;
                rewrite  ^/(.*)$  $referer_url? redirect;
        }

    }
}

--------------------------------------
# cat vhosts/storecps.wanyanzhenjiang.com

server{
    listen   443;
    server_name storecps.wanyanzhenjiang.com;

    ssl on;
    ssl_certificate /data/openresty/nginx/ssl/wanyanzhenjiang.crt;
    ssl_certificate_key /data/openresty/nginx/ssl/wanyanzhenjiang.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;

    error_log /data/openresty/nginx/logs/storecps_error.log;
    access_log /data/openresty/nginx/logs/storecps_access.log;
    location / {
        set_by_lua $expires_time 'return ngx.cookie_time(ngx.time()+604800)';
        set_by_lua $click_time 'return ngx.now(ngx.time())';
        set_by_lua $http_referer_url 'return string.gsub(ngx.var.http_referer, "([^%w%.%- ])", function(c) return string.format("%%%02X", string.byte(c)) end)';
        add_header Set-Cookie 'union_id=$arg_union_id;euid=$arg_euid;mid=$arg_mid;referer=$http_referer_url;click_time=$click_time; Domain=.wanyanzhenjiang.com; expires=$expires_time; Max-Age=604800';


        default_type text/html;
        set $a 0;
        set $b 0;
        if ( $arg_to ~* "wanyanzhenjiang.com(%2f|/)(.*)"){
                set $a 1;
        }
        if ( $arg_to ~* "wanyanzhenjiang.com$"){
                set $a 1;
        }
        if ( $a = 1 ){
                set $b 1;
                rewrite  ^/(.*)$  $arg_to? redirect;
        }
}
}

PS:自定义header的信息

        set $tgkey $arg_tgkey;
        set $referer $arg_to;
        set_by_lua $expires_time 'return ngx.cookie_time(ngx.time()+1800)';
        set_by_lua $referer_url 'return string.gsub(ngx.var.referer, "%%(%x%x)", function(h) return string.char(tonumber(h, 16)) end)';
        add_header Set-Cookie 'tgkey=$tgkey; Domain=.wanyanzhenjiang.com; expires=$expires_time;Max-Age=1800;';

另外lua之urlEncode和urlDecode方法

local function urlEncode(s)  
     s = string.gsub(s, "([^%w%.%- ])", function(c) return string.format("%%%02X", string.byte(c)) end)  
    return string.gsub(s, " ", "+")  
end  

local function urlDecode(s)  
    s = string.gsub(s, '%%(%x%x)', function(h) return string.char(tonumber(h, 16)) end)  
    return s  
end  

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
### 回答1: openresty lua 可以通过 ngx.req.get_body_data() 函数来获取请求报文数据。如果请求报文是以 application/x-www-form-urlencoded 或 multipart/form-data 格式提交的,也可以通过 ngx.req.get_post_args() 函数来获取请求参数。如果请求报文是以 application/json 格式提交的,可以通过 ngx.req.get_body_data() 函数获取请求体数据,然后使用 json.decode() 函数将其解析为 Lua table。 ### 回答2: 要在OpenResty中接受请求报文数据,可以使用ngx.req模块。这个模块提供了处理请求内容的功能。 首先,我们可以使用ngx.req.get_method函数获取请求的方法,例如GET或POST。接下来,可以使用ngx.req.get_headers函数获取请求头的信息,例如User-Agent、Content-Type等。 要获取请求体的内容,可以使用ngx.req.read_body函数来读取请求体。然后,可以使用ngx.req.get_post_args函数来获取请求体的参数。如果请求体的类型是application/x-www-form-urlencoded,那么可以使用ngx.req.get_post_args函数直接获取参数。如果请求体是JSON格式,可以使用ngx.req.get_body_data函数获取请求体的原始数据,然后使用Lua中的json库进行解析。 另外,还可以使用ngx.req.get_uri_args函数来获取URL中的参数。这个函数返回一个Lua表,其中包含了URL中的所有参数。 除了获取请求报文数据,OpenResty还提供了ngx.req.set_header函数来设置请求头的信息。可以使用ngx.req.set_header函数来添加、修改或删除请求头的参数。 在处理完请求报文数据后,可以使用ngx.say函数来像客户端返回响应内容。可以将任何数据作为ngx.say函数的参数进行返回,包括字符串、数值、表等。 总结起来,通过ngx.req模块的函数,我们可以获取请求的方法、请求头、请求体、URL参数等请求报文数据,并且还可以设置请求头和返回响应内容。 ### 回答3: 在OpenResty中,可以通过使用ngx.req.get_body_data()方法接收请求报文数据。 ngx.req.get_body_data()方法用于获取请求报文主体的数据,并且可以在ngx_lua中方便地进行处理。 使用方法如下: local body_data = ngx.req.get_body_data() if body_data then -- 处理请求报文数据 -- ... else -- 请求报文没有主体数据 -- ... end 需要注意的是,ngx.req.get_body_data()方法只能获取请求报文中的主体数据,并不能获取请求报文的其他信息。如果需要获取其他请求信息,可以使用ngx.req.get_uri_args()获取查询参数,ngx.req.get_headers()获取请求头部信息,以及ngx.req.get_method()获取请求方法等。 在使用ngx.req.get_body_data()方法前,需要保证在nginx配置文件中已启用了请求体内容的接收。可以在http或server配置块中添加以下指令: http { # ... client_body_buffer_size 8k; client_max_body_size 8m; # ... } 以上是OpenResty Lua如何接收请求报文数据的方法。通过使用ngx.req.get_body_data()方法,我们可以方便地获取到请求报文的主体数据,并进行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

完颜振江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值