[转帖]nginx 白名单处理

nginx,白名单,处理 · 浏览次数 : 0

小编点评

**1. 根据 cookie 中的值来判断跳转:** ```nginx location / { if ($cookie_openid = \"5\") { set $lodurl "http://www.www.com/xx"; } proxy_pass $lodurl; } ``` **2. 通过 header 中的值来判断跳转:** ```nginx location / { if ($http_foo = "bar") { proxy_pass http://default-new-nginx-80; } proxy_pass http://default-old-nginx-80; } ``` **3. 使用 $arg_ 获取请求参数:** ```nginx location / { if ($arg_foo ~ "^bar") { proxy_pass http://default-new-nginx-80; } proxy_pass http://default-old-nginx-80; } ```

正文

Nginx如何配置根据cookie或header自定义字段进行跳转

一、根据cookie中的值来判断跳转

 $http_cookie这个关键词是读取cookie的全部信息,那么我们是需要判断cookie中包含的某个字段的值,比如我设置openid=5,我该如何获取那么,我们可以通过$cookie_openid,其中openid是你设置的,这里需要加前缀cookie就可以获取了。

在location中设置,注意此跳转支持post传输。
 

  1. location / {
  2. #设置一个变量来接收跳转的地址
  3. set $lodurl "http://xxx.xx.xx/xx"; #这里设置了默认地址
  4. #注意if和(之间要又一个空格,否则无法执行,会出错
  5. if ($cookie_openid = "5")
  6. {
  7. set $lodurl "http://www.www.com/xx";#需要跳转的地址
  8. }
  9. proxy_pass $lodurl;
  10. }

二、其实header和cookie设置是一样,只是获取字段的值不一样而已

  1. location / {
  2. ....
  3. if ($http_foo = "bar") { //完全匹配
  4. #if ($http_foo ~ "bar") { //正则匹配
  5. proxy_pass http://default-new-nginx-80;
  6. break;
  7. }
  8. proxy_pass http://default-old-nginx-80;
  9. ....
  10. }

三、使用$arg_获取http的请求参数,根据配置中是否为完整或者正则匹配,匹配foo的值

  1. location / {
  2. ....
  3. if ($arg_foo ~ "^bar") { //正则匹配
  4. #if ($arg_foo = "bar") { //完全匹配
  5. proxy_pass http://default-new-nginx-80;
  6. break;
  7. }
  8. proxy_pass http://default-old-nginx-80;
  9. ...

我的实战:

        请求中cookie中工号,进行白名单

使用了nginx的map,参考:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/121418974   

  1. http {
  2. map $cookie_cookie中key1 $white_employee {
  3. xxx11 1;
  4. yyy22 1;
  5. }
  6. map $cookie_cookie中key2 $white_employee {
  7. xxx11 1;
  8. yyy22 1;
  9. }
  10. server {
  11. listen 80;
  12. server_name 域名;
  13. location /yyyy/ {
  14. alias /usr/local/nginx/html/;
  15. }
  16. location /xxxyyy/ {
  17. if ($white_employee = "1" ) {
  18. rewrite ^/xxxyyy/(.*)$ /$1 break;
  19. proxy_pass http://ip:port;
  20. break;
  21. }
  22. if ($white_employee_p = "1" ){
  23. rewrite ^/xxxyyy/(.*)$ /$1 break;
  24. proxy_pass http://10.54.19.7;
  25. break;
  26. }
  27. #匹配不到跳转到静态页面,是nginx的html目录下的自定义页面
  28. rewrite ^/xxxyyy/(.*)$ /yyyy/screen.html;
  29. }
  30. }
  31. }

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览9476 人正在系统学习中

与[转帖]nginx 白名单处理相似的内容:

[转帖]nginx 白名单处理

Nginx如何配置根据cookie或header自定义字段进行跳转 一、根据cookie中的值来判断跳转 $http_cookie这个关键词是读取cookie的全部信息,那么我们是需要判断cookie中包含的某个字段的值,比如我设置openid=5,我该如何获取那么,我们可以通过$cookie_op

[转帖]nginx如何实现负载均衡、限流、缓存、黑白名单和灰度发布

https://zhuanlan.zhihu.com/p/464491494 挺好的文章. nginx负载均衡配置 1.负载均衡配置 http { upstream real_server { server 192.168.1.100:8082 weight=1; #轮询服务器和访问权重 serve

[转帖]记一次压测引起的nginx负载均衡性能调优

https://xiaorui.cc/archives/3495 这边有个性能要求极高的api要上线,这个服务端是golang http模块实现的。在上线之前我们理所当然的要做压力测试。起初是 “小白同学” 起头进行压力测试,但当我看到那压力测试的结果时,我也是逗乐了。 现象是,直接访问Golang

[转帖]专注于GOLANG、PYTHON、DB、CLUSTER 记一次压测引起的nginx负载均衡性能调优

https://xiaorui.cc/archives/3495 rfyiamcool2016年6月26日 0 Comments 这边有个性能要求极高的api要上线,这个服务端是golang http模块实现的。在上线之前我们理所当然的要做压力测试。起初是 “小白同学” 起头进行压力测试,但当我看到

[转帖]Nginx(四)负载均衡

一 nginx目录的说明 1 nginx/ 3 |-- client_body_temp 4 |-- conf #这是Nginx所有配置文件的目录,极其重要 5 | |-- fastcgi.conf 'fastcgi相关参数的配置文件' 6 | |-- fastcgi.conf.default #f

[转帖]nginx限速

https://www.cnblogs.com/fengzi7314/p/16541440.html 第一步,先创建限制的规则,我这里直接在nginx默认的配置文件目录下配置,如果想自定义,需要在主配置文件添加include xx/xxx/xxx/*.conf配置 [root@node5 nginx

[转帖]Nginx支持WebSocket反向代理

https://www.cnblogs.com/zhengchunyuan/p/12923692.html WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类

[转帖]Nginx内置变量以及日志格式变量参数详解

补充 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为空字符串 $uri #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$reques

[转帖]nginx proxy_pass keepalive

Syntax: keepalive connections; Default: — Context: upstream This directive appeared in version 1.1.4. Activates the cache for connections to upstream

[转帖]Nginx超时timeout 设置

Nginx 超时配置,连接时间过长直接关闭连接,显示timeout http { #每个 TCP 连接最多可以保持多长时间 keepalive_timeout 60; #客户端向服务端发送一个完整的 request header client_header_timeout 10; #客户端发送服务端