反向代理
-
户端对代理服务器是无感知的,客户端不需要做任何配置,用户只请求反向代理服务器,反向代理服务器选择目标服务器,获取数据后再返回给客户端。
-
反向代理服务器和目标服务器对外而言就是一个服务器,只是暴露的是代理服务器地址,而隐藏了真实服务器的 IP 地址。
上图叙述 : 在某项目使用自己的IP地址发布后觉得, 自己的网站访问速度慢, 服务器压力大, 给用户的体验比较差 .
解决方案 : 使用Nginx做代理, 不让用户直接访问到自己的IP地址, 从而可以保护自己的网站, 避免被人攻击的烦恼, 而且还可以大大的提高项目的性能, 因为Nginx web服务器性能非常高, 访问速度更快, 但是有个缺点就是只可以处理静态资源, 不能处理动态资源, 而用户请求的静态资源, 可以由Nginx 直接返回, 将需要处理的业务功能 交给 Tomcat 去处理 , 这样即实现了性能的优化, 还使得服务器减轻压力, 实现动静分离的效果
- 首先在主机中启动一个web项目
- 访问地址 : http://192.168.230.1:8080/Redis_SecondKill
- 代理前, 如图:
- 在Nginx反向代理主机中配置IP : http://192.168.230.1:8080
- 再次浏览器访问项目的时候可以通过 Nginx 代理的IP访问http://192.168.230.200:80 时相当于访问http://192.168.230.1:8080
- 因为HTTP的默认端口就是80 ,所有80 可以省略不写
配置步骤
- 修改Nginx的配置文件:
-
vim /usr/local/nginx/conf/nginx.conf
- 注释掉默认的
- 在Nginx配置文件中 , 添加需要代理的地址如图
配置介绍
# 当浏览器访问 http://虚拟机ip:80/xxx 时,会被nginx接受到,由server解析,匹配访问的地址和location是否对应
# location / 可以匹配所有的访问ngixn的请求
location / {
# root html 第一行 相当于处理请求时,nginx让请求在nginx的家目录下查找(root) , 家目录的html目录下查找访问的路径
# http://虚拟机ip:80/xxx 访问时,nginx会让请求在 /usr/local/nginx/html/xxx
# root html;
# index index.html index.htm;
# proxy_pass http://192.168.230.1:8080; 当浏览器访问http://192.168.230.200:80/xxx时,服务器地址由http://192.168.230.1:8080代替处理查找/xxx资源
proxy_pass http://192.168.230.1:8080;
# 配置超时时间
proxy_connect_timeout 30;
}
location指令说明
-
该指令用于匹配 URL。
-
语法如下:
-
location [=|~|~*|^~|@] pattern{……}
-
=
:用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。 -
语法如下
-
location
= /index
{
proxy_pass http://192.168.230.1:8080;
proxy_connect_timeout 30;
}
浏览器只有访问虚拟机: http://192.168.230.200:80/index才会被此location匹配 -
没有修饰符,必须以指定模式开始
-
语法如下
-
location
/a/b
{
proxy_pass http://192.168.230.1:8080;
proxy_connect_timeout 30;
}
浏览器访问的虚拟机端口号后如果路径是以/a/b开始的,那么就可以匹配, 区分大小写 -
~
:用于表示 uri 包含正则表达式,并且区分大小写。 -
语法如下
-
location
~ ^/abc$
{
proxy_pass http://192.168.230.1:8080;
proxy_connect_timeout 30;
}
访问路径参考正则进行匹配 -
~*
:用于表示 uri 包含正则表达式,并且不区分大小写。 -
语法如下
-
location
~* ^/abc$
{
proxy_pass http://192.168.1.1:8888;
proxy_connect_timeout 30;
} -
^~
:location后有^~ ,表示匹配路径不包含正则,优先级比正则高
注意:如果 uri 包含正则表达式,则必须要有~
或者~*
标识。
查找顺序和优先级
- 带有
“=“
的精确匹配优先 - 没有修饰符的精确匹配
- 正则表达式按照他们在配置文件中定义的顺序
- 带有
“^~”
修饰符的,开头匹配 - 带有
“~”
或“~*”
修饰符的,如果正则表达式与URI匹配 - 没有修饰符的,如果指定字符串与URI开头匹配
- 修改完后, 保存退出 !
- 修改完配置文件,需要重新加载配置文件才可生效
-
nginx -s reload
- 如果出现以下错误
- nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
- 解决方法 : 连接地址
- Nginx代理配置完成就可以使用代理过的地址访问项目了
- 在浏览器中测试访问代理后的 IP, 如图
上述就是对Nginx的反向代理做了一个简单叙述!
感谢阅读, 如有什么更好的建议或方法 ,可以留言或进群交流. 各种疑难杂症QQ交流群:1101584918,欢迎大家加入。