nginx 反向代理和后端服务器获取真实 ip

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 反向代理和后端服务器获取真实 ip相关的知识,希望对你有一定的参考价值。

参考技术A nginx 反向代理是什么?

为了提高吞吐量,有些服务器是专门跑程序用的,有些服务器是跑静态资源的。

你可能访问一个网页,里面有图片,而这个图片并不是你访问的这个网页的服务器,也叫前端服务器,而是你的图片请求被 Nginx 转发到了一台后端服务器,由后端服务器提供给前端服务器再返回到客户端的。

我这台 nginx 的配置非常细致,有 nginx.conf ,在这个配置中包含了两个文件夹,一个是 sites-available ,一个是 sites-enabled , nginx.cof 一般用来做整个 nginx 的配置。

域名配置段在 sites-avaliable 下,然后建立一个软连接到 sites-enabled 下去。

反向代理就写在域名配置段里,客户端通过访问服务器,服务器将请求分配按照 server 段里的则正匹配,将请求按照 fastcgi 发送到 php-fpm 通过分配再到我们的程序。

反向代理一样,也需要通过正则来捕捉到用户的请求。(2018-12-9,现在流行的做法是将静态资源全部压缩打包,丢到cdn上去,服务器基本只做端口转发,https配置,日志,负载均衡,等很多很多功能)

server 段里多加以上这一条,前端的反向代理的工作就完成了。

(当然要开启反向代理在 nginx.conf 里)以上捕捉到图片格式结尾的就将这种请求转发到服务器地址,后端服务器只要监听这个端口将 root 指向资源目录就行了。

当这一切做完后会发现,后端服务器获取到的并不是用户的 ip 地址而是前端服务器的 ip (通过 nginx 的访问日志),这是正常的。

因为本来就是前段请求的,但是可以通过 proxy_set_header 段将用户的真实ip带到后端服务器去,而后端服务器需要接收传过来的这个参数。

日志的格式默认情况下是不接收这种参数的,日志格式在 nginx.conf 里面定义,默认没有定义,自己加上去就可以了。

这就是日志的格式,可以自己添加和修改,上面主要描述的是定义一个格式这个格式的名字为main。

这个格式里包含了哪些东西顺序是怎样的,定义访问成功的日志的路径,使用main格式来进行写入。

改完后,前端服务器 nginx -s reload ,后端服务器 nginx -s reopen 。

反向代理就是这样。有反向代理,当然也有正向代理了,也很简单。

原文链接: nginx反向代理和后端服务器获取真实ip-服务器

原创多层nginx反向代理,如何获取客户端的真实IP地址

由于业务的需要,通常会遇见Nginx多层代理,造成后端Nginx不能获取客户端真实IP地址。
上图中如果正常情况,Nginx1和Nginx2是不能获取到从Nginx0过来的客户端真实IP地址的。

【解决方法】

这里为大家介绍一个好用的模块,模块名为“http_realip_module”。此模块默认安装Nginx是不自带的,需要编译过程中添加"--with-http_realip_module"

realip主要功能:当本机的Nginx处于一个反向代理的后端时候,可以获取到真实的用户IP地址 

【使用方法】 

在http段中添加 

http{ 

... 

set_real_ip_from  192.168.1.2; 

real_ip_header    X-Forwarded-For; 

real_ip_recursive off; 

...

}



微信公众号:立维网
长按识别二维码
关注我们

以上是关于nginx 反向代理和后端服务器获取真实 ip的主要内容,如果未能解决你的问题,请参考以下文章

服务器 获取用户 真实ip

nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP

nginx 反向代理中proxy_set_header的含义

nginx反向代理后端web服务器记录客户端ip地址

nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP

Nginx反向代理 Laravel获取真实IP地址(PHP)