nginx根据post请求参数做转发

本文介绍了在工作中如何利用nginx实现根据POST请求参数进行转发的解决方案,包括源码安装nginx,加载form-input-nginx模块,以及配置和测试转发功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在工作中遇到了根据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;
        }
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值