• nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决


    遇到一个问题,nginx 完全做反向代理的时候,当有请求来的时候,后端服务器,有时可以很快返回结果,但有时根本没有访问到后端服务器

    查了下发现nginx 这个需要手动进行配置,让nginx 支持下划线

    Syntax: underscores_in_headers on | off;
    Default:
    underscores_in_headers off;
    Context: httpserver

    原因就能看到了,默认配置是是不开启的,当一个请求有带有下划线的时候,nginx会直接过滤掉这样的请求

    但是开发那边不会考虑这样的问题,所以在http配置区域里,把这个功能开启,让nginx支http header有下划线的请求

    源码如下:

    rc = ngx_http_parse_header_line(r, r->header_in, cscf->underscores_in_headers);

     if (r->invalid_header && cscf->ignore_invalid_headers)

    在ngx_http_parse_header_line() 函数中

    if (ch == ‘_’) {
                    if (allow_underscores) {
                        hash = ngx_hash(hash, ch);
                        r->lowcase_header[i++] = ch;
                        i &= (NGX_HTTP_LC_HEADER_LEN – 1);

                    } else {
                        r->invalid_header = 1;
                    }

    红色部门就是问题所在

    原来是对header name的字符做了限制,默认 underscores_in_headers 为off,表示如果header name中包含下划线,则忽略掉

    处理办法:

    1:配置中http部分 增加underscores_in_headers on; 配置

    2:用减号-替代下划线符号_,避免这种变态问题。nginx默认忽略掉下划线可能有些原因。

  • 相关阅读:
    调用网易有道词典api
    函数设计
    参数2
    新浪微博API使用初步介绍——解决回调地址的问题
    参数关键点和return返回多个(伪多个)值问题
    函数基本理论
    一个值得思考的例子
    Beego基础学习(五)Golang原生sql操作Mysql数据库增删改查(基于Beego下测试)
    Golang利用select实现超时机制
    Golang利用select和普通函数分别实现斐波那契数列
  • 原文地址:https://www.cnblogs.com/telwanggs/p/14979252.html
Copyright © 2020-2023  润新知