`

在nginx里通过header进行分流

 
阅读更多
在nginx里通过header进行分流

应用场景, 如想灰度部分用户到另一个服务器, 则让这些用户带上指定header, 然后在nginx里通过header判断, 进行分流

实现思路有两种
1.
------------------------------
if (...)
rewrite 跳到内部location
location 里做反向代理

要点: rewrite不支持post, 正确的说, 在post下, 只支持站内重写url, 站外的话重写url的话, 会丢掉body内容, 所以才要重定向到站到的location, 再做proxy_pass


在控制台使用有个问题还没解决,
请求第1次会一直没响应挂住, 第2次会正常返回便带一个warn,
请求第3次会一直没响应挂住, 第4次会正常返回便带一个warn,
请求第5次会一直没响应挂住, 第6次会正常返回便带一个warn


warn信息如下:
六月 14, 2017 9:45:22 上午 org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNING: Cookie rejected: "[version: 0][name: JSESSIONID][value: 9E2CB0E52952B53E554CAB4743D92C01][domain: 192.168.25.217][path: /demo_7/][expiry: null]". Illegal path attribute "/demo_7/". Path of origin: "/demo_8/listheader.jsp"




2.
------------------------------
if (...)
proxy_pass

要点: 在if里做proxy_pass, 只能纯域名, 如http://192.168.25.217:8080;
不能有任何uri成份, 如http://192.168.25.217:8080/abc;
原因是 默认location /,



第一种
------------------------------
完整配置
注意testuser_8的变化
server {
		listen 8008;
		charset utf-8;
		underscores_in_headers on;

		#实现虚拟目录
		#location /httpdemo/ {
		location / {
			alias d:/httpdemo/;
			index index.html;
			
			#测试header转发
			if ($http_yfflag = testuser_7){
				rewrite ^(.*)$ /demo7/$1 last;
			}
			if ($http_yfflag = testuser_8){
				rewrite ^(.*)$ /demo8/$1 last;
				#proxy_pass http://192.168.25.217:8080;
			}
		}

		location /demo7/ {
			proxy_pass http://localhost:8070/demo_7/;
		}

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


第二种
------------------------------
完整配置
server {
		listen 8008;
		charset utf-8;
		underscores_in_headers on;

		#实现虚拟目录
		#location /httpdemo/ {
		location / {
			alias d:/httpdemo/;
			index index.html;
			
			#测试header转发
			if ($http_yfflag = testuser_7){
				rewrite ^(.*)$ /demo7/$1 last;
			}
			if ($http_yfflag = testuser_8){
				#rewrite ^(.*)$ /demo8/$1 last;
				proxy_pass http://192.168.25.217:8080;
			}
		}

		location /demo7/ {
			proxy_pass http://localhost:8070/demo_7/;
		}

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



分享到:
评论

相关推荐

    教你怎么用Nginx往request的header中添加新字段

    总之,通过Nginx的`proxy_set_header`指令,我们可以方便地在HTTP请求头中添加自定义字段,这对于实现API接口的版本控制、增加请求元信息或者满足特定业务需求都非常有用。理解并灵活运用这一特性,能够提升Nginx...

    Windows版nginx去掉header中server后面的信息(nginx版本1.21.1)

    Windows版nginx去掉header中server后面的信息(nginx版本1.21.1) 使用方法: 1、关闭nginx服务 2、将新的nginx.exe替换原有的exe文件 3、重启nginx服务

    nginx add_header指令使用方法

    在nginx配置文件中,我们可以通过使用add_header指令来设置response header。这个指令的基本使用方法就是将header的key和value用空格分隔,然后写在nginx的配置文件中。例如,如果你想设置"Cache-Control"为"no-...

    nginx配置教程之add_header的坑详解

    然而,这个指令在实际使用中存在一些需要注意的坑,本文将通过具体的示例代码进行详细的解释。 ### 基本用法与陷阱 `add_header` 指令的作用是将指定的 HTTP 响应头添加到返回给客户端的响应中。例如,以下配置将...

    Nginx作为反向代理时传递客户端IP的设置方法

    因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...

    oucb#3d-visualization-Iot-blog#nginx解决Too-many-header问题1

    title: nginx解决Too-many-header问题在对接海康卫视WEB无插件开发包时,自己的页面连接单独的摄像头时(连接NVR没这个问题),/ISA

    NGINX如何进行伪装-通过LNMP安装

    - 在开始修改Nginx之前,需要对LNMP的安装路径和安装的组件版本进行确认,例如目录下包含`autoconf-2.13`和`nginx-1.8.0`等。 **Nginx伪装与编译** - 伪装指的是改变服务器对外的标识,避免直接暴露服务器真实的...

    nginx + header 转发 灰度测试

    在本文中,我们将详细介绍如何使用 Nginx 实现 Header 转发灰度测试。灰度测试是一种重要的测试方法,可以帮助我们在不影响生产环境的情况下,测试新的服务或功能。我们将使用 Nginx 作为反向代理服务器,来实现 ...

    Nginx跨域设置Access-Control-Allow-Origin无效的解决办法

    nginx 版本 1.11.3 使用大家说的以下配置,验证无效,跨域问题仍然存在 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow...

    为何要小心Nginx的add_header指令详解

    大家都知道,nginx配置文件通过使用add_header指令来设置response header。 昨天无聊用curl查看一个站点的信息,发现返回的头部与想象中的不一样: HTTP/2 200 date: Thu, 07 Feb 2019 04:26:38 GMT content-type: ...

    Nginx代理时header头中带”_”信息丢失问题的解决

    开发网关项目时,在请求时往请求头header中放入了签名sign_key信息,在接收请求时再从header中拿出,在本地调试时是可以的,但上线之后通过Nginx代理之后发现拿不到。 location / { proxy_set_header X-Real-IP $...

    nginx配置tcp转发(nginx通过白名单访问)

    要配置Nginx进行TCP代理转发,我们需要创建一个新的Nginx配置文件,通常放在`/etc/nginx/conf.d/`目录下,例如命名为`tcp_proxy.conf`。在该文件中,我们需要使用`stream`模块来处理TCP流量。下面是一个基础的配置...

    windows下带fancyindex的nginx

    在Windows环境下配置并使用带有FancyIndex功能的Nginx服务器是一个常见的需求,尤其是在搭建个人网站或测试服务器时。FancyIndex是Nginx的一个模块,它可以为用户提供一个美观且可自定义的目录索引视图,替代默认的...

    nginx-1.10.2_海康;javascript_nginx/1.10.2_nginx转发海康_

    在描述中提到的"海康摄像头实时预览通过nginx反向代理",意味着我们需要设置Nginx服务器作为反向代理,将来自客户端的请求转发到海康摄像头的流媒体服务器,以便用户可以通过Web浏览器实时查看摄像头的视频流。...

    升级gitlab中nginx版本.docx

    在实际生产环境中,GitLab系统的Nginx版本升级和配置是一个非常重要的任务。为确保系统的稳定性和安全性,需要对GitLab系统中的Nginx版本进行升级和配置。本文将详细介绍如何升级GitLab系统中的Nginx版本,使其使用...

    nginx-1.9.12 windos 版本

    nginx-1.9.12 windos 版本 nginx 反向代理 负载均衡

    Nginx 配置文件 nginx.conf 详解

    客户端请求头部缓冲区大小是 Nginx 服务器处理客户端请求的重要组件,我们可以通过 `client_header_buffer_size` 指令来设置客户端请求头部缓冲区大小,例如 `client_header_buffer_size 4k;`,这将设置客户端请求...

    nginx替代方案,nginx代替apache与jboss

    通过将 Apache 替换为 Nginx,并结合 JBoss 使用,不仅可以显著提升系统的性能,还能简化运维工作并降低成本。对于需要处理大量并发请求的现代 Web 应用来说,Nginx + JBoss 的组合是一个非常优秀的选择。

Global site tag (gtag.js) - Google Analytics