五分钟了解Nginx反向代理

反向代理

  • 户端对代理服务器是无感知的,客户端不需要做任何配置,用户只请求反向代理服务器,反向代理服务器选择目标服务器,获取数据后再返回给客户端。

  • 反向代理服务器和目标服务器对外而言就是一个服务器,只是暴露的是代理服务器地址,而隐藏了真实服务器的 IP 地址。
    在这里插入图片描述

上图叙述 : 在某项目使用自己的IP地址发布后觉得, 自己的网站访问速度慢, 服务器压力大, 给用户的体验比较差 .

解决方案 : 使用Nginx做代理, 不让用户直接访问到自己的IP地址, 从而可以保护自己的网站, 避免被人攻击的烦恼, 而且还可以大大的提高项目的性能, 因为Nginx web服务器性能非常高, 访问速度更快, 但是有个缺点就是只可以处理静态资源, 不能处理动态资源, 而用户请求的静态资源, 可以由Nginx 直接返回, 将需要处理的业务功能 交给 Tomcat 去处理 , 这样即实现了性能的优化, 还使得服务器减轻压力, 实现动静分离的效果

  1. 首先在主机中启动一个web项目
  2. 访问地址 : http://192.168.230.1:8080/Redis_SecondKill
  3. 代理前, 如图:
    在这里插入图片描述
  4. 在Nginx反向代理主机中配置IP : http://192.168.230.1:8080
  5. 再次浏览器访问项目的时候可以通过 Nginx 代理的IP访问http://192.168.230.200:80 时相当于访问http://192.168.230.1:8080
  6. 因为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 包含正则表达式,则必须要有~或者~* 标识。

查找顺序和优先级

  1. 带有“=“的精确匹配优先
  2. 没有修饰符的精确匹配
  3. 正则表达式按照他们在配置文件中定义的顺序
  4. 带有“^~”修饰符的,开头匹配
  5. 带有“~”“~*”修饰符的,如果正则表达式与URI匹配
  6. 没有修饰符的,如果指定字符串与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,欢迎大家加入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章