每日一学之Nginx系列NO.5反向代理
Posted 进击的Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一学之Nginx系列NO.5反向代理相关的知识,希望对你有一定的参考价值。
图片来自于百度图片
在上一篇公众文中已经介绍了什么是反向代理,以及反向代理服务器所担任的角色。今天我们就来试着配一下nginx的反向代理服务。
Tomcat服务器
首先,反向代理服务器是为最终的服务器而服务,因此我们先利用Tomcat发布一个测试网站,路径为 localhost:8080/sessiontest/index.jsp
注意:我们的tomcat配置的是8080端口,而Nginx是80端口
Nginx服务器
配置nginx.conf文件,在locaton下加入下面的配置项
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/sessiontest/index.jsp;
}
在浏览器输入localhost,访问nginx服务器,成功显示为Tomcat服务器中的项目的首页
在实际的项目当中我们不可能只有一个页面,那这个时候我们应该怎么办?其实很简单,同前面Nginx基础知识是一样的道理,请看下面的配置
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/sessiontest/;
}
注意:在sessiontest后面一定要加上斜杠哦。当我们输入localhost/index.jsp,其实实际访问的路径为 ($proxy_pass)index.jsp;因此要求在sessiontest后面加上斜杠。
名词解释
名词 |
作用 |
实例 |
|
proxy_pass | 实际访问的URL路径 | 上例中的tomcat中发布的项目的实际路径 |
|
proxy_redirect | 修改从被代理服务器传来的应答头中的"Location"和"Refresh"字段 | 假设被代理服务器返回 Location字段为: http://localhost:8000/two/some/uri/ |
|
proxy_set_header | 设置自定义header,通过request.getAttribute() 获取 |
X-real-ip $remote_addrP: 这句话之前已经解释过,有了这句就可以在web服务器端获得用户的真实ip但是,实际上要获得用户的真实ip,不是只有这一个方法,下面我们继续看。 X-Forwarded-For $proxy_add_x_forwarded_for: X-Forwarded-For $proxy_add_x_forwarded_for: 意思是增加一个$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增加,而不是覆盖,当然由于默认的X-Forwarded-For值是空的,所以我们总感觉X-Forwarded-For的值就等于$proxy_add_x_forwarded_for的值,实际上当你搭建两台nginx在不同的ip上,并且都使用了这段配置,那你会发现在web服务器端通过request.getAttribute("X-Forwarded-For")获得的将会是客户端ip和第一台nginx的ip |
下期提要
下期主要介绍利用Nginx的反向代理实现负载均衡。
以上是关于每日一学之Nginx系列NO.5反向代理的主要内容,如果未能解决你的问题,请参考以下文章