精华内容
下载资源
问答
  • nginx根据post请求参数转发

    万次阅读 2019-07-23 09:16:22
    在工作中遇到了根据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-...

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

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

    展开全文
  • nginx配置根据参数转发

    万次阅读 2018-08-23 17:27:50
    因此,设计解决方案为:由程序将需要跳转的完整url作为参数pic_url的值,加入整个url内,所以需要在代理中实现中转,将请求转发给pic_url url: 原: https://n1-test.xxx.com/angentImg/?type=image&pic...

    需求:
    因浏览器安全策略,在reference为https类型时,无法跳转获取http协议链接的数据。
    因此,设计解决方案为:由程序将需要跳转的完整url作为参数pic_url的值,加入整个url内,所以需要在代理中实现中转,将请求转发给pic_url

    url:
    原:
    https://n1-test.xxx.com/angentImg/?type=image&pic_url=http://www.wipo.int/branddb/jsp/data.jsp?SOURCE=EMTM&TYPE=jpg&KEY=014835301&qi=2-FbonCURiPwm/abnckAV

    希望转发给:
    http://www.wipo.int/branddb/jsp/data.jsp?SOURCE=EMTM&TYPE=jpg&KEY=014835301&qi=2-FbonCURiPwm/abnckAV

    实现方法:

        location ~/angentImg/ {
          if ($query_string ~*  ^(.*)type=image&pic_url=(.*)$){
             set $pic_url $2;
             # set $pic_url $arg_pic_url
             proxy_pass $pic_url;
             }
        }
    
    解释:  
    1.set $1 $2 将$2变量的值赋值给$1变量
    2.arg_(VAR_NAME)用来获取url后指定参数对应的值,比如arg_pic_url可以获取到连接中pic_url这个参数的值
    3.$query_string 可以获取路径之后包含所有参数kv的string
    4.但是如果要获取的参数本身也是一个url,且该url包含有自带的参数,例如在这个例子里,直接使用$pic_url只能捕获http://www.wipo.int/branddb/jsp/data.jsp?SOURCE=EMTM这一段值,它后方的&之后的参数是无法捕捉到。因此使用正则匹配,将pic_url=后方的字符串全部赋予给了变量$2,将流量转发向$2值的url
    

    配置完上面这些后,发现链接还是无法打开,报错502:
    这里写图片描述

    怀疑目标url做了防盗链处理,但经过测试,这是个cdn地址,并没有配置防盗链,继续检查,发现nginx日志有异常记录:
    这里写图片描述

    域名无法解析?dns已经配置了呀,本地也是可以浏览器正常访问该图片url,尝试在nginx服务器上添加/etc/hosts 固定dns记录,发现依然有同样的报错,求助万能的google,找到了问题的原因:

    在Ngnix中如果用变量作为反向代理的地址时,可能会出现“no resolver defined to resolve xxx.xxx”的问题,原因是 Nginx 0.6.18以后的版本中启用了一个resolver指令,在使用变量来构造某个server地址的时候一定要用resolver指令来指定DNS服务器的地址,所以解决这个问题的方法很简单:在nginx的配置文件中的http{}部分添加一行DNS解析即可,注意,要写在nginx配置的http{}内:

    resolver 8.8.8.8 ipv6=off;
    

    再次尝试,图片可以正常访问,检查浏览器控制台可以看到各项url参数均正常携带:
    这里写图片描述

    展开全文
  • 主要给大家介绍了一次关于nginx实现根据URL转发请求的实战经历,文中通过示例代码介绍的非常详细,对大家学习或者使用nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • nginx转发请求导致参数丢失

    万次阅读 2019-05-14 14:00:13
    在使用nginx转发请求时,发现get请求获取不到请求参数 原来的配置为: location / { proxy_pass http://localhost:8080; } 配置这样且每次请求的主机域名和ip都为127.0.0.1,无法获取到实际请求的数据,nginx在...

    在使用nginx转发请求时,发现get请求获取不到请求的参数
    原来的配置为:

     location / {
               proxy_pass http://localhost:8080;
            }
    

    配置这样且每次请求的主机域名和ip都为127.0.0.1,无法获取到实际请求的数据,nginx在转发的时候会自动将消息头中的 HostX-Real-IP设置为本地的127.0.0.1,造成数据丢失,但是POST请求正常,GET请求方式的QueryString将丢失
    将配置修改为如下所示:

     location / {
             proxy_set_header Host $host;   //nginx的变量$host,代表实际的host
             proxy_set_header X-Real-IP $remote_addr;  //nginx的变量$host,代表实际的address
             proxy_pass http://localhost:8080/$request_uri   ;//nginx的变量$host代表实际的主机,$request_uri代表实际的请求链接,也可以用$args代替
          }
    

    配置检测:nginx -t
    重启nginx:nginx -s reload
    测试GET请求正常,mark一下!

    展开全文
  • 主要介绍了Nginx 根据URL带的参数转发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • nginx配置根据url参数转发

    千次阅读 2018-05-03 15:49:00
    1,举例说明 若url为:http://localhost/index.htm?PAGE=dhcp 根据参数PAGE的值dhcp,转发到dhcp.html页面 2,nginx配置实现 ①编辑nginx/conf/的nginx.conf配置文件 loc...

    1,举例说明

         若url为:http://localhost/index.htm?PAGE=dhcp

          根据参数PAGE的值dhcp,转发到dhcp.html页面

    2,nginx配置实现

        ①编辑nginx/conf/的nginx.conf配置文件

    location ^~/index.htm {    
          proxy_pass http://127.0.0.1:81/web_router/$arg_PAGE.html;
    }

    其中$arg_PAGE就是获取到的PAGE参数值。

        由于在html页面中,获取的js相对路径有改变,就要对js或css等文件进行根路径配置,否则找不到文件

    153730_N8gY_3553496.png

    153934_hYbm_3553496.png

    我js所在路径:nginx-1.13.8\html\web_router\js

    由于我的nginx根路径是html文件夹。路径不正确所有找不到指定文件。

          加上如下配置,即可解决问题:

    前提条件是我请求的js文件是在web_router文件夹下面

    location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {  
       root html/web_router/;  
    }

      ②保存文件,重启nginx.

    3,验证

        通过浏览器输出url,更改PAGE参数值,查看是否装发到目标页面。

     

    转载于:https://my.oschina.net/u/3553496/blog/1806194

    展开全文
  • 1.Nginx下载 nginx下载地址 2.解压即可使用 3.运行nginx ...ngxin根目录地址栏输入cmd,之后enter,进入命令行 ...4.运行nginx.exe可执行文件 ...6.配置请求转发 打开配置文件,下面是配置文件中的重要参数 ...
  • nginx转发登陆请求失败,如下是.conf的配置 upstream my_server { server 10.45.162.140:80; keepalive 1500; } server { listen 80; server_name insdkserver.uniugame.com; access_log /data/nginxlog/insdk_...
  • nginx + lua 根据post请求参数转发

    千次阅读 2019-10-04 06:47:50
    location / { content_by_lua_file "lua/dispatch.lua"; } location @user_profile_api12 { content_by_lua_block { ngx.say("xxxx") ...
  • nginx 配置请求转发 和 负载均衡

    万次阅读 2017-11-08 17:31:27
    这里没有安装Nginx的朋友请移步:http://blog.csdn.net/qq_27292113/article/details/78189500 1、nginx 配置请求转发 找到自己安装目录下的 nginx.conf 文件 找到 server { listen 80; server_name localhost;
  • nginx转发get请求丢失参数

    千次阅读 2020-01-17 17:17:21
    nginx转发请求时,需要剥离某些字段。 如: http://127.0.0.1/myname/api/baseinfo/getlist?class=1 需要将请求设置为: http://127.0.0.1:8080/api/baseinfo/getlist?class=1 一开始的location配置为: ...
  • 例如我的请求路径是http://localhost/test1?a=1,希望此请求转发到http://localhost/test2上,proxy_pass 之后还是会携带?后面的参数请求的地址是http://localhost/test2?a=1,需要去掉?后面的参数
  • Nginx 根据URL带的参数转发

    万次阅读 2018-02-10 09:19:52
    使用场景: 需要根据截取URL动态配置跳转路径,常见于访问内网不固定ip地址的文件图片,请求地址:...http://...
  • nginx 这个问题 还是上周 需要记录的, 最近公司 要倒闭了, 跟着老板 去了另一个公司,两边跑,有些累,今天记录下 问题 我们开发了一个 社区管理系统, 本来只有我前台页面写了一套 静态页面。通过 定时器 模拟了...
  • nginx 请求转发webSocket连接

    千次阅读 2019-04-30 10:22:39
    nginx 是一个反向代理的轻量服务器,能对http请求进行转发,同样,对于webSocket ws/wss协议的请求能否进行一个转发 以下为nginx的配置文件,与普通的端口转发差不多,只需要修改或加多一两个配置信息 location /...
  • nginx map配置根据请求头不同分配流量到不同后端服务,nginx版本为:nginx version: nginx/1.17.9 配置nginx.conf文件 http { ... map_hash_bucket_size 64; map $http_x_group_env $svc_upstream { default ...
  • Nginx请求转发内容丢失 现象;昨天测试环境下通过了,切到线上环境测试,http请求的heade内容丢失,线上用到了nginx代理,nginx对下划线的头信息做了限制 解决方案一 既然nginx对下划线不支持,那没关系,不用下划线就是...
  • 在http请求后端时,token是一种非常常见的使用方式,但是如果url请求参数不带token,或者请求头部不带token这样的请求应当直接返回401,而不要代理给后端服务器做处理了。可以有效降低后台服务器的负载。 location /...
  • Nginx根据url参数匹配跳转 例如请求地址是htpp://www.xx.com,想要根据某个参数跳转到不同的地址,htpp://www.xx.com?type=a跳转到A地址,htpp://www.xx.com?type=b跳转到B地址 可以通过nginx的$query_string、$...
  • 关键词: nginx + lua 脚本 lua 获取 http 请求参数 ...用 nginx 向外提供统一接口,在 nginx 内用 lua 脚本获取请求参数根据参数中的平台信息将请求发送给不同的平台。 具体实现: 在 CentOS7 服务器上安装
  • nginx 添加post请求参数

    2021-03-19 16:59:52
    排查请求需添加nginx入参, (1)需要在log_format main后加escape=json (2)nginx的版本需要是1.15.1及以上 (3)满足以上最终打印出的结果
  • $remote_addr 是nginx的自带变量,代表客户端的ip。 但是$remote_addr未必就一定是客户端的真实ip,如果你的客户端经过代理再到达nginx,那么nginx的$remote_addr就是代理的ip。 如果这种情况也想要获取客户端的...
  • nginx-get请求参数丢失

    2020-10-15 20:43:14
    问题:nginx转发的是时候发现,get请求时传的参数丢失,当upstream中含参数时,upstream会重新拼接,可以使用以下方法解决。 方法一: 原配置: proxy_pass http://$appname/; 修改后配置: proxy_pass http://$...
  • nginx根据url中的参数进行转发 在实际项目中,由于https安全策略,我们无法直接跳转到我们想要跳转到的地址 例如 url:https://abc.dc.com/image?url=https://vpic.video.qq.com/1641213/p0685fxrwij.png 我们想要的...
  • 举例,访问test.com,通过nginx转发到了127.0.0.1:8080的项目,现在需要在项目中通过代码获取到test.com 在nginx配置中添加如下配置即可。 proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header...
  • 在本地可以正常获取前端header传的参数,但是部署到服务器后无法获取前端传的请求header(服务器地址使用nginx做了代理转发) 原因: nginx对header name的字符做了限制,默认 underscores_in_headers 为off,...
  • nginx处理post请求之数据转发

    万次阅读 2017-09-15 06:42:50
    上一篇文章分析了nginx在处理post请求时,如何启动upstream这个负载均衡模块。它是一个http框架,由它来调度具体的模块,例如fastcgi, ...一、转发请求数据到后端服务器流程 //与后端服务器建立连接,并注册读写事件的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,747
精华内容 15,498
关键字:

nginx根据请求参数转发