nginx根据post请求参数做转发

nginx根据访问的url参数或者是请求 头部判断转发 2019独角兽企业重金招聘Python工程师标准>>> ... 阅读详情

在工作中遇到了根据post请求做转发的需求,决定使用nginx来完成。

1.源码安装nginx,带上form-input-nginx模块

wget http://nginx.org/download/nginx-1.16.0.tar.gz
tar -zxvf nginx-1.16.0.tar.gz 
cd nginx-1.16.0/
git clone http://github.com/simpl/ngx_devel_kit.git
git clone http://github.com/calio/form-input-nginx-module.git
./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=user00 --group=user00 --with-http_stub_status_module --with-http_ssl_module --with-pcre --add-module=ngx_devel_kit --add-module=form-input-nginx-module
make
make install

2.默认配置启动nginx,测试正常

cd /usr/local/nginx/sbin/
./nginx
ps -ef |grep nginx

3.修改配置,完成转发功能

user  user00;
worker_processes  4;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

pid        logs/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

#定义日志格式
log_format main escape=json '{ "@timestamp": "$time_iso8601", '
                       '"remote_addr": "$remote_addr",'
                       '"costime": "$request_time",'
                       '"realtime": "$upstream_response_time",'
                       '"status": $status,'
                       '"x_forwarded": "$http_x_forwarded_for",'
                       '"referer": "$http_referer",'
                       '"request": "$request",'
                       '"upstr_addr": "$upstream_addr",'
                       '"bytes":$body_bytes_sent,'
                       '"dm":$request_body,'
                       '"agent": "$http_user_agent" }';

    access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  60;

    gzip  on;

    upstream env1 {
        server server1:port weight=3;
    }

    upstream env2 {
        server server2:port weight=3;
    }

    upstream env3 {
        server server3:port weight=3;
        server server4:port weight=3;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        access_log  logs/pay.access.log  main;

        #设定参数flag为0
        set $flag 0;
        location / {
        		  #设定form 提交的参数变量
                  set_form_input $app_server_id app_server_id;
                  set_form_input $app_role_id app_role_id;
                  #直接拒绝get请求
                  if ( $request_method = "GET" ) {
                      return 403;
                break;
                }
                  if ( $app_server_id = "10" ) {
                            #010
                            set $flag "${flag}10";
                  }
                  if ( $app_role_id = "15" ) {
                      #015
                      set $flag "${flag}15";
                  }
                  if ( $app_role_id = "14" ) {
                      #014
                      set $flag "${flag}14";
                  }
                  if ( $flag = "01015" ) {
                            proxy_pass http://env1;
                            break;
            }
                  if ( $flag = "01014" ) {
                            proxy_pass http://env2;
                            break;
            }
                  proxy_pass http://env3;
        }
    }
}

这就是根据获取的参数转发到后端相应服务器的设置。

告别官方WebRTC的30G编译:我用libdatachannel给USB摄像头了个轻量级网页监控 本文介绍了一种基于libdatachannel的轻量级WebRTC监控方案,通过USB摄像头实现实时视频推流。相比官方WebRTC库30GB的庞大编译体积,libdatachannel仅需几十MB,大幅简化了开发流程。文章详细讲解了从视频采集、FFmpeg编码到WebRTC传输的全过程,并提供了性能优化和部署方案,帮助开发者快速构建高效的网页监控系统。 阅读详情

相关推荐

初级文章【西门子】字符拼接成字符串

针对S7-400极其以下PLC,1200往上据说有专门的块了呢,首先,我是不用库的,需要什么函数会自己写,OK进入正题。 首先,我们有一个DB块,里面有14个char,一个14位的char数组和一个14位的string。如下图。 我们的目的是将char1-char10拼接成一个string。 第一种方式:第一步,将char放进数组。 ​​​​​​​ 相信大家都能看明白,但是我还是要解释解释 L取值2 T赋值到临时变量DBNO(INT) OPN DB [#DBNO]获取DB块,这一句.

NS_Speak(IVAV) 1万+

Nginx根据post参数转发请求 (OpenResty)

最近有个需求,需要nginx根据POST参数请求转发到不同的后端,调研后决定使用OpenResty(Nginx + Lua)作为代理服务器。 写个小Demo: location /test { set $target_url ''; rewrite_by_lua_block { if "POST" == ngx.req.get_method() then ngx.req.read_body() local args = ngx.req.get_body_data() --

Crazy_zh的博客 5435

Nginx 根据URL带的参数转发的实现

使用场景: 需要根据截取URL动态配置跳转路径,常见于访问内网不固定ip地址的文件图片, 请求地址:http://11.19.1.212:82/bimg4/32.52.62.42:222/DownLoadFile?filename=LOC:12/data/20180208/15/2e0ae54dfd752210083404deed15269c_222403 实际需要访问的内网地址:http://32.52.62.42:222/DownLoadFile?filename=LOC:12/data/20180208/15/2e0ae54dfd752210083404deed15269c_2224

nginx处理post请求之数据转发

上一篇文章分析了nginx在处理post请求时,如何启动upstream这个负载均衡模块。它是一个http框架,由它来调度具体的模块,例如fastcgi, proxyd反向代理等,这些模块负责将来自客户端 的请求包体,请求包体转为与后端服务器通信的格式。本篇文章来分析nginx是如何将已经转换后的报文发给后端服务器。 一、转发请求数据到后端服务器流程 //与后端服务器建立连接,并注册读写事件的

ApeLife技术博客 1万+

nginx gzip 压缩配置

nginx gzip 压缩配置 直接使用如下: gzip on; gzip_min_length 1k; # gzip_disable "msie6"; gzip_comp_level 4; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss

Blau的博客 1295

解决nginx代理转发post请求变get请求方法

post请求经过nginx转发变get请求原因 nginx的机制是所有转发默认是get,所以会导致post请求经过nginx转发后会被转化为get请求。 get----->get post----->get等 解决方法 可以使用return 307进行转发,return 307,对请求类型不转换,意思就是 get----->get post----->post 所以通过原样转发可以解决我们post请求会被转化为get请求问题 具体配置方法 server { listen 8

Habo_的博客 1万+

nginx + lua 根据post请求参数转发

location / { content_by_lua_file "lua/dispatch.lua"; } location @user_profile_api12 { content_by_lua_block { ngx.say("xxxx") ...

weixin_30420305的博客 2134

Nginx转发post请求变get请求

最近用nginx转发请求,但是明明是post请求,打到服务上确实get请求,body中的参数都没了,于是去查背后详细的原因。 背景 Nginx配置 ip及端口:192.20.81.34:8081 conf关键配置: location /select/dosomething/ { proxy_pass http://xx.xx.xx.xx:18000/select/dosomething/; } 请求连接 http://192.20.81.34:8081/select/doso

qq_29500875的博客 1万+

nginx转发post请求

应用场景: 由于项目迁移,旧接口的代码重新部署在了另外一个域名下的项目,比如: 旧接口地址:https://cecshop.com/api/recommend/add 新接口地址:https://capis.com/rec/recommend/add https://cecshop.com/api/recommend/add 转发到 https://capis.com/rec/recom...

t2337025的博客 1万+

nginx如何配置转发GET请求参数

args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;所以在配置nginx转发的时候配置成$args即可。

weixin_50003028的博客 3987

nginx-使用lua进行POST参数解析并转发

有这样一个需求:根据请求中的各参数使用nginx转发到本地或者其他主机的不同端口。 首先需要安装lua模块: 安装LuaJIT wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz tar -xvf LuaJIT-2.0.2.tar.gz cd LuaJIT-2.0.2 make instal 安装nginx及部分组件 下载ngx_devel_kit、lua-nginx-module、nginx并解压 wget https://github.com/sim

weixin_44617722的博客 4825

nginx获取get、post请求参数

使用nginx原生指令、和lua的方法,获取http协议的get、post方法的参数

赶路人儿 2万+

nginx转发请求导致参数丢失

在使用nginx转发请求时,发现get请求获取不到请求参数 原来的配置为: location / { proxy_pass http://localhost:8080; } 配置这样且每次请求的主机域名和ip都为127.0.0.1,无法获取到实际请求的数据,nginx转发的时候会自动将消息头中的 Host和X-Real-IP设置为本地的127.0.0....

Fouse_的博客 2万+

一次说清-Nginx反向代理及参数配置

我们在配置服务时常常会用到Nginx来设置反向代理,虽然常用,但是我们真的了解各个参数的意思吗?不如我们一起来看下吧。

m0_71777195的博客 5160

nginx 变量解析

#nginx.conf   location /foo { set_form_input $data; # read "data" field into $data set_form_input $foo foo; # read "foo" field into $foo } location /bar { set

xiaolei1982致力于Web开发 1053

探索 Form Input Nginx 模块:构建高效、可扩展的 Web 应用

探索 Form Input Nginx 模块:构建高效、可扩展的 Web 应用 ]() Form Input Nginx 模块是一个强大的 Nginx 插件,它允许您在 Nginx 中处理表单输入数据。通过利用此模块,您可以轻松地构建高效且可扩展的 Web 应用程序。 一、项目简介 Form Input Nginx 模块是 Nginx 的一个插件,它提供了一种更简单的方式来处理 HTTP 请求中的...

gitblog_00004的博客 543

Nginx 配置实现请求转发功能

1、找到配置文件 2、文件说明 #开启进程数 <=CPU数 worker_processes 1; #错误日志保存位置 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #进程号保存文件 #pid logs/nginx.pid; #每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024 e

CSDN_Admin0的博客 5万+

nginx根据post请求体内容转发

因为nginx自带的$request_body最早是在content阶段读取,uri已经确定,无法用if等判断进行重新转发,故使用nginx+lua实现,使用lua在rewrite阶段把请求体读出来,然后写脚本判断,进行转发。 代码示例如下: 使用方法: ①http下增加 ②对应接口的location下增加 ③增加一个新的location,appid匹配成功的会转到这里(proxy_pass最后要加斜杠)...

qq_37201232的博客 4553

Tomcat 单机单实例一键安装

第一组必传入参:Tomcat 安装模式(在线示例:apache-tomcat-11.0.0-M18 离线示例:/tmp/apache-tomcat-10.1.19.tar.gz)第五组必传入参:Tomcat 执行权限(示例-1:root 示例-2:tomcat:tomcat:123456)为保证脚本的时效性,使用到期时间为 2025-01-05。如果采用非 root 权限执行脚本,可能在执行过程中需要输入当前用户的密码,请留意控制台的实时动态。统一研发、测试、生产环境的部署模式、部署结构、维护手册的标准。

Rambo's Blog 745

Nginx快速入门:nginx各类转发、代理配置详解|location、proxy_pass参数详解(五)

上述案例我们讲解到了需要重定向跳转的问题,上述案例中可以看到我们重定向后地址栏的地址也发生了变化,这实际上也暴露了一些后台服务的地址信息,如果我们想地址不变化,内容进行转发即可,要怎么实现呢?这就需要详细学习nginx 重定向的内容,下一章我们将针对这块内容继续攻克。

55555的博客 1万+

HighD大型自然车辆轨迹数据集

德国亚琛工业大学汽车工程研究所新近发布的HighD数据集是德国高速公路的大型自然车辆轨迹数据集,数据搜集自德国科隆附近的六个不同地点, 位置因车道数量和速度限制而异,记录的数据中包括轿车和卡车。数据集包括来自六个地点的11.5小时测量值和110 000车辆,所测量的车辆总行驶里程为45 000 km,还包括了5600条完整的变道记录。通过使用最先进的计算机视觉算法,定位误差通常小于十厘米。适用于驾驶员模型参数化、自动驾驶、交通模式分析等任务。

上一篇: mysql 配置文件设置最大链接数 max_connections不生效
下一篇: ELK部署安装以及配置
乱弹世界
博客等级 码龄11年 37粉丝 70原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值