nginx-ingress设置日志格式-配置转发真实ip-白名单限制

参考官方文档
nginx-ingress官方文档
修改nginx-ingrss的configmap配置文件

apiVersion: v1
data:compute-full-forwarded-for: "true"forwarded-for-header: X-Forwarded-Forlog-format-upstream: '{"time": "$time_iso8601", "proxy_protocol_addr": "$proxy_protocol_addr","proxy_add_x_forwarded_for": "$proxy_add_x_forwarded_for", "request_id": "$req_id",   "remote_user":"$remote_user", "bytes_sent": $bytes_sent, "request_time": $request_time, "status":$status, "vhost": "$host", "request_proto": "$server_protocol",   "path": "$uri","request_query": "$args", "request_length": $request_length, "duration": $request_time,"method": "$request_method", "http_referrer": "$http_referer",   "http_user_agent":"$http_user_agent", "remote_addr":"$remote_addr", "remote_port": "$remote_port","x_forwarded_for": "$http_x_forwarded_for" }'real_ip_header: X-Forwarded-For  #将客户端真实ip替换为请求头的值real_ip_recursive: "on"  #递归排除IP地址,ip串从右到左开始排除set_real_ip_from里面出现的IP,如果出现了未出现这些ip段的IP,那么这个IP将被认为是用户的IPset_real_ip_from: 100.125.0.0/16  #可信任的ip,真实服务器上一级代理的IP地址或者IP段,可以写多行use-forwarded-headers: "true"  #如果Nginx在其他7层代理或负载均衡后面,当期望Nginx将X-Forwarded-*的头信息传递给后端服务时,则需要将此参数设为true,如果设为false(默认为false),Nginx会忽略掉X-Forwarded-*的头信息。false设置适用于Nginx直接对外或前面只有3层负载均衡的场景
kind: ConfigMap
metadata:creationTimestamp: "2021-12-02T02:04:31Z"labels:app: nginx-ingresschart: nginx-ingress-1.2.6component: controllerheritage: Tillerrelease: cceaddon-nginx-ingressname: cceaddon-nginx-ingress-controllernamespace: kube-systemresourceVersion: "4738338"selfLink: /api/v1/namespaces/kube-system/configmaps/cceaddon-nginx-ingress-controlleruid: 38ee4b63-4fcb-43c8-8ed1-1258f28ab13c

nginx-ingress配置域名转发时参数注释添加

上述配置需要配置nginx-ingress的本身的配置文件,下边是给ingress转发创建资源时添加的注释
上传一些大文件参数时需要配置的大小限制和超时时间限制参数

nginx.ingress.kubernetes.io/proxy-body-size=200m
#指定请求大小限制
nginx.ingress.kubernetes.io/proxy-read-timeout=600
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理
nginx.ingress.kubernetes.io/proxy-send-timeout=600
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
#我们这是转发到后端需要在后端上传到oss,所以需要等待后端给响应

如果后端还有nginx,nginx也需要调整时间

client_max_body_size 200M;
#请求主体大小
client_header_buffer_size 32k;
#标准请求头大小
large_client_header_buffers 4 1024k;
#最大请求头大小
#先根据client_header_buffer_size配置的值分配一个buffer,如果分配的buffer无法容纳 request_line/request_header,那么就会再次根据large_client_header_buffers配置的参数分配large_buffer,如果large_buffer还是无法容纳,那么就会返回414(处理request_line)/400(处理request_header)错误。
proxy_send_timeout  600s;
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout  600s;
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理

nginx-ingress限制白名单访问
在ingress资源配置上添加参数

nginx.ingress.kubernetes.io/whitelist-source-range: 127.0.0.1,192.168.8.0/24

nginx-ingress会话保持设置

## 前提

基于kubernetes部署Java项目,发现在多pod模式下,会出现登录成功但是页面无法跳转的问题,在单一pod时却可以成功登录并页面正常跳转,于是推测是cookie的问题。

网上的大部分文章提供的解决方案都是在service的配置文件中加入sessionAffinity: ClientIP,功能是选择与请求来源ip更接近的pod,这样就会固定同一个session,但是好像并不适用于我这个项目。

最终的解决当然还是要靠自己读官方的文档,ingress-nginx有大量的注释配置,官方针对这种情况已经做了说明,需要细细阅读,详见Cookie affinity。

## 解决方案

注释nginx.ingress.kubernetes.io/affinity在Ingress的所有上游中启用和设置相似性类型。这样,请求将始终定向到同一上游服务器。Nginx唯一可用的相似性类型是cookie。

如果为一个主机定义了多个Ingress nginx.ingress.kubernetes.io/affinity: cookie,并且至少一个Ingress使用,则只有Ingress使用的路径nginx.ingress.kubernetes.io/affinity将使用会话Cookie相似性。通过随机选择后端服务器,可以在主机的其他入口定义的所有路径进行负载均衡。

如果您使用Cookie affinity,则还可以使用注释nginx.ingress.kubernetes.io/session-cookie-name来指定将用于路由请求的cookie名称。 默认是创建一个名为INGRESSCOOKIE的cookie。

注释nginx.ingress.kubernetes.io/affinity-mode定义了会话的粘性。如果将部署规模扩大,balance则将此选项设置为(默认)将重新分配一些会话,从而重新平衡服务器上的负载。将此设置为persistent不会重新平衡与新服务器的会话,因此提供了最大的粘性。

以上是官方文档的直译。

简而言之,在ingress-nginx配置中应做以下操作:

设置nginx.ingress.kubernetes.io/affinity属性,启用会话保持。设置nginx.ingress.kubernetes.io/affinity-mode属性,设置为balance在集群扩大pod时,会自动分配一些会话到新创建的pod上,用于平衡服务器的负载;设置为persistent则永远保证用户访问pod的一致性,不会访问到其他pod。设置nginx.ingress.kubernetes.io/session-cookie-name属性,自定义cookie名称。

对我用到了其中的三个属性进行描述:

## 配置文件

使用session会话保持可以用于解决多tomcat的pod下,登录由于session问题导致页面无法跳转的问题。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: ingress-tomcatnamespace: defaultannotations:kubernetes.io/ingress.class: "nginx"nginx.ingress.kubernetes.io/affinity: "cookie"nginx.ingress.kubernetes.io/affinity-mode: "persistent"nginx.ingress.kubernetes.io/session-cookie-name: "route"
spec:tls:- hosts:- your.host.cnsecretName: https-secretrules:                                                          - host: your.host.cn                                            http:                                                        paths:                                                       - path:backend:serviceName: your service nameservicePort: 8280

以下为其他网友提供的解决方案:

在service的配置文件中加入sessionAffinity: ClientIP,功能是选择与请求来源ip更接近的pod,这样就会固定同一个session。

apiVersion: v1
kind: Service
metadata:name: tomcatnamespace: default
spec:selector:app: tomcatrelease: canaryports:- name: httptargetPort: 8280port: 8280sessionAffinity: ClientIP

nginx-ingress设置日志格式-配置转发真实ip-超时参数配置-会话保持参数相关推荐

  1. php负载均衡如何获得真实ip,nginx负载均衡后端RS中获取真实ip

    nginx负载均衡后端RS中获取真实ip 前端proxy配置 #################### worker_processes  1; events { worker_connections ...

  2. log_format为nginx设置日志格式

    nginx服务器日志相关指令主要有两条 1.一条是log_format,用来设置日志格式. 2. 另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,一般在nginx的配置文件 ...

  3. nginx做负载CDN加速获取端真实ip

    nginx做负载CDN加速获取端真实ip在不用cdn的情况下,nginx做负载获取真实ip时,nginx配置如下:Java代码 proxy_set_header Host $host; proxy_s ...

  4. kubernetes ingress更改日志格式

    Ingress Nginx默认访问日志都输出到/var/log/nginx/access.log文件中,但是对于一般的生产环境来说,不可能把所有日志都输到一个日志文件中,一般情况都是根据域名分别输出到 ...

  5. nginx的log_format日志格式和字段介绍

    nginx中access_log记录日志是可以自定义格式的,通过自定义格式,一方面供我们更方便的查询请求,另外还可以做统计,接口访问速度分析等. 语法: log_format name format ...

  6. nginx利用反向代理实现获取用户真实ip

    我们访问互联网上的服务时,大多数时,客户端并不是直接访问到服务端的,而是客户端首先请求到反向代理,反向代理再转发到服务端实现服务访问,通过反向代理实现路由/负载均衡等策略.这样在服务端拿到的客户端IP ...

  7. 使用nginx代理的情况下获取用户真实IP

    ##1.背景知识 1.1. 前提知识点: 还有nginx中的几个变量: remote_addr 代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站 ...

  8. nginx做负载均衡 tomcat获得客户端真实ip

    转 http://www.cnblogs.com/netsa/p/6985990.html 因项目需要做tomcat2台机器的负载均衡,配置好负载环境后,发现tomcat的日志一律是我前置nginx代 ...

  9. Nginx反向代理后无法获取客户端真实IP地址

    当我们使用 Nginx 代理转发服务后,会发现我们无法获取客户端的真实IP地址,从而无法获取客户端的地理位置等信息. 1.原始配置文件如下 worker_processes 1;events {wor ...

最新文章

  1. Redux概念之一: Redux简介
  2. 微服务架构日志集中化 安装 EFK (Fluentd ElasticSearch Kibana) 采集nginx日志
  3. 超硬核 ICML’21 | 如何使自然语言生成提速五倍,且显存占用减低99%
  4. Windows “七大奇迹”:DNS Dynamic Updates 中的7个严重漏洞
  5. paip.提升性能---协程“微线程”的使用.
  6. Delphi 2007 的重构功能
  7. HTML5期末大作业:动漫网站设计——千与千寻(10页) 含设计报告 HTML+CSS+JavaScript 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品
  8. servlet原理及访问时序图
  9. 【机器学习 基本概念】马尔可夫链
  10. 【Flink】(04)Apache Flink 漫谈系列 —— 实时计算 Flink 与 Alibaba Cloud Realtime Compute 剖析
  11. Pickit 3 - MPLAB Target device ID does not match 解决办法之一
  12. 原创 | 以ETF为例——配对交易Python源码全公开
  13. 航空公司客户价值分析R语言实现
  14. 2018年俄罗斯世界杯之Java数据爬虫(一)
  15. 二. Binding 详解
  16. 什么是生物特征识别?有哪些生物特征?
  17. 微信小程序day01
  18. 手把手教您搭建一个跨境电商平台
  19. 摩尔纹的原理与产生条件
  20. Appium Doctor iOS Could not detect Mac OS X Version from sw_vers output: '10.12 '解决方法

热门文章

  1. MultiTech MT9234ZBA 调制解调器Modem的测试方法
  2. 什么是腾讯云云硬盘?有哪些优势?应用于哪些场景?
  3. 登录TOM163VIP邮箱的几种方式,以及常见问题有哪些?
  4. python连接数据库实现登录注册_python实现非数据库模式的用户注册和登录
  5. 单片机与手机应用进行蓝牙通讯
  6. mysql limit acs_Oracle Acs资深顾问罗敏 老罗技术核心感悟:牛! 11g的自动调优和
  7. 热温冷冰,数据存储需要全生命周期管理
  8. c++头文件中的防卫式声明
  9. 登录显示服务器端校验不通过,SMTP服务器需要安全连接或客户端未通过身份验证。服务器响应是:5.7.57 SMTP;...
  10. chall.tasteless.eu 中的注入题