1.什么是代理服务器?什么是反向代理?
2.反向代理需求
需求一:节约ip资源。假设我公司开发了三个软件,三个软件部署在三个tomcat服务器上,但是只买了一个公网ip,这时该怎么办,可以运用我们之前所学的http服务的虚拟机知识来解决,一个ip可以对应多个域名,所以这三个软件都绑定的这一个ip,现在用户要通过公网ip来访问我这三个软件其中的一个,这时候,nginx起到反向代理的作用,将这个唯一的公网放在nginx服务器上,它根据域名的不同,来把请求转发到对应的应用服务器tomcat上,tomcat把返回结果给nginx然后再回馈给用户。
需求二:掘取客户ip。前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式来实现接口跨域的方式,在降低开发成本的的同时也带来了诸多问题,例如客户端真实ip的获取。在一些特殊场景下,比如风控和支付流程,往往需要获取用户的ip信息,但是nginx的反向代理实现跨域的同时,也彻底改变了服务器的请求来源,隔离了用户和服务器的连接这并不是我们想要的,因此对于客户端ip的解析是必要的
需求三:保护真实服务器。在很多如果有恶意用户如果知道我们的真实服务器ip,那他可能会使用一些,破坏手段对我们的RS进行攻击而造成麻烦。这时我们采用反向代理策略,代理服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上;因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。
3.nginx做反向代理配置
1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址; 2.$remote_user :用来记录客户端用户名称; 3.$time_local : 用来记录访问时间与时区;4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200, 6.$body_bytes_s ent article录发送给客户端文件主体内容大小;7.$http_referer :用来记录从那个页面链接访问过来的; 8.$http_user_agent :记录客户端浏览器的相关信息;
server1(真实服务器RS)配置:
###就写在配置文件本来的sever下面就行了
server {
listen 80;
server_name localhost;
set_real_ip_from 172.25.254.12;##代理服务器ip
real_ip_header X-Forwarded-For;##获取客户端ip
real_ip_recursive on;##接收客户端ip
server2配置(代理服务器):
upstream westos {
server 172.25.0.101:80; #上游真实服务器
}
server {
listen 80;
server_name www.westos.org;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://westos; ##调用westos upstream模块
}
}
测试:
在物理机修改本地域名解析
物理机访问 hh.westos.org,
然后在server1真实服务器上查看access.log,可以看到请求来自172.25.254.3(物理机)
真实RS获取客户端ip: