跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 项目经过 Nginx 均衡负载后产生的日志问题
未分類
6 3 月 2021

项目经过 Nginx 均衡负载后产生的日志问题

项目经过 Nginx 均衡负载后产生的日志问题

資深大佬 : LeeReamond 15

如题,Nginx 本身是带有日志功能的,默认设置下可以看到哪些 IP,访问了哪个路由,用的什么设备等等。但是通常业务端还想记录一些业务相关的内容,比如由哪个用户进行访问,使用了什么配置、什么权限等等,这些信息必须要到业务端的日志里才能获取到。但是经过 nginx 反代之后原始的 IP 信息会丢失,业务端日志里看到的请求者全都是 nginx,很令人迷惑,而 nginx 里某一 IP 的对应业务端记录,又不知道去哪个节点里找,

这种问题一般要怎么解决呢?

大佬有話說 (13)

  • 資深大佬 : Ptu2sha

    你是没用过 proxy ? foward_ip 啊转发带过来

  • 資深大佬 : Lax

    Google 关键词:nginx proxy_add_x_forwarded_for

  • 資深大佬 : wunonglin

    又是你哈哈哈哈哈哈。

    你 nginx 配置了 proxy_pass_request_body on;和 proxy_pass_request_headers on;没

  • 資深大佬 : wunonglin

    还有个$proxy_add_x_forwarded_for;和$remote_addr;着两个变量可以给你用。
    还有要配 proxy_set_header X_Forward_For $proxy_add_x_forwarded_for;这个,应该就能拿到了

  • 主 資深大佬 : LeeReamond

    @Ptu2sha 感谢,搜索了一下解决了

  • 主 資深大佬 : LeeReamond

    @wunonglin 大佬住在 v 站么,每次发帖你都能看到。不过我联想到一个问题,看这个 nginx 推 IP 的方式,似乎就是在 http headers 里面加一些信息而已。想起来之前看到 web 后端一般识别路由等都需要依赖 headers 里面的 host 来进行判断,所以有恶意修改 host 的攻击方式。

    我在 fastapi 官网的中间件部分看到这个,它有一个限制可信 host 的中间件专门防止这种攻击。但是我用他这个的话,我的 vue 前端没法控制所有请求的 host 啊,比如 vue 请求 html 的时候会加上 host,请求 js 文件之类的时候,请求会直接进入后端,不跟前端发生关系,没法自定义 host,chrome 默认就加载不出来┓( ´∀` )┏

  • 資深大佬 : wunonglin

    fastapi 没接触过,这个是 python 的东西吧?

    前端的话是因为页面发出 xhr 请求的时候是不能修改请求头的 host 的,但是你为啥有会要用页面控制 host 的需求?

  • 資深大佬 : wunonglin

    @LeeReamond #6 而且,后端识别路由是不由 path 来决定的么

  • 主 資深大佬 : LeeReamond

    @wunonglin 毕竟我 web engine 不是我自己实现的,我也不清楚里面实现细节,不清楚他的解析实现是否有风险,其实我也是第一次听说恶意修改 headers 里面的 host 还能用来攻击。我后来试了一下,也是用那个 nginx 推 headers 的办法可以解决,nginx 可以自动给没有预设 host 参数的请求自动补上,然后由业务端中间件校验一下合法性,似乎可以防御这种攻击。

  • 資深大佬 : wunonglin

    @LeeReamond #9 这种我也没碰到过,我是用 nginx 做反代的,server_name 那里就已经根据请求 url 的 host 来分配 vhost 了,如果是自己写的 web 服务器的话估计需要注意下这个问题

  • 資深大佬 : julyclyde

    @LeeReamond 你以为按 host 识别,说明你的知识领域还仅仅在于开发这方面,而不了解 http 标准

  • 主 資深大佬 : LeeReamond

    @julyclyde 确实不是很了解,大佬了解大佬讲讲标准规范是啥样的。不过 http 协议,想了解也没个集中说明的地方吧,总不可能把标准书背下来,一般都是用到哪里查哪里记哪里,不用的就忽略了

  • 資深大佬 : julyclyde

    @LeeReamond 觉得协议标准没有个集中说明的地方,说明你学习方法有问题啊。http 标准 RFC2616

    web 服务器要先看 host header 然后才能区分虚拟主机。在配置正确的情况下,nginx 不会把“不区分 host 所有的请求”都发给你的应用程序,你的应用程序收到的只有按照 host header 筛选过的部分请求

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具