当前位置:   article > 正文

nginx实现静态资源代理、动静分离、代理服务(负载均衡)_静态资源代理和容器代理的配置

静态资源代理和容器代理的配置

Nginx是什么?

开源且高性能、可靠的HTTP中间件、代理服务。

类似于nginx的?

HTTPD-apache基金会、IIS-微软、GWS-Google

为什么使用nginx?

  • IO多路复用epoll

  • 轻量级(功能模块少、代码模块化)

  • CPU亲和:把CPU核心和nginx工作进程绑定的方式,把每个worker进程固定在一个cpu上执行,以获取最好的性能

  • sendfile(资源处理高效)

nginx的使用场景?

  • 代理服务
  • 静态资源服务
  • 动静分离
  • ……

一、代理服务

nginx的代理服务使用到的是nginx的ngx_http_proxy_module模块,官网地址http://nginx.org/en/docs/http/ngx_http_proxy_module.html。说到代理就得搞清楚正向代理与反向代理的区别:两者的区别在于代理的对象不一样,正向代理代理的是客户端,反向代理代理的是服务端,如下图

语法

  1. Syntax:proxy_pass URL;
  2. Default:—
  3. Context:location, if in location, limit_except

示例配置

  1. server {
  2. server_ name http://vip.aqiyi.com;
  3. ……
  4. }
  5. location / {
  6. proxy_pass http://12.121.57.121:8080;
  7. ……
  8. }

这样便可以将http://vip.aqiyi.com的域名代理到后端服务http://12.121.57.121:8080中去,,核心配置就是server块里的server_name和location块里的proxy_pass。当然,实现了反向代理,我们肯定会考虑是否要服务的负载均衡,nginx配置反向代理的负载均衡也很简单:

语法

  1. #upstream必须在http模块里
  2. upstream apiservice {
  3. server vip.example1.com weight=5;
  4. server vip.example2.com:8080; down
  5. server 192.168.0.121:8080;
  6. server backup1.example.com:8080 backup;
  7. }
  8. server {
  9. ……
  10. server_ name movie.vip.com;
  11. ……
  12. location / {
  13. proxy_pass http://apiservice; #apiservice即upstream的名字
  14. }
  15. }

down表示该server不提供服务,backup表示该server为备份服务。如上,客户端多次访问http://movie.vip.com/××便会将请求分发到upstream中的可用服务中。负载均衡策略如下:

默认平均轮询
ip_hash基于ip进行hash,确保同一客户端的请求始终传递到同一服务器
least_conn基于最少连接数
hash key对key进行hash算法,比如hash $request_uri,对请求url进行hash,也能确保同一请求传递到同一服务器
weight加权轮询,权重weight自定义

二、静态资源代理

nginx的主要功能之一,静态资源代理,从这个层面来看的话,可以看到nginx作为web服务器的影子。也就是说,你启动nginx后便可以访问到服务器上的资源了。

静态资源代理配置语法:

  1. location / {
  2. root /opt/html/;
  3. index index.html index.htm;
  4. }

如上配置,将所有请求资源会指代到你服务器上的/opt/html/目录下查找,启动nginx后,访问http://servername/index.html便可以访问到该页面了。这里要区分一下关键字root和alias的区别?比如存在这么一个配置:

  1. location /request_path/image/ {
  2. root /local_path/image/;
  3. }
  4. location /request_path/image/ {
  5. alias /local_path/image/;
  6. }

请求http://servername/request_path/image/cat.png,root配置的实际是到  /local_path/image/request_path/image/目录下查找cat.png;而alias配置的实际是到 /local_path/image/目录下查找cat.png,alias配置的不会再拼接上请求里的/request_path/image了。

注意:当用了正则表达式,proxy_pass后面不能加URL_part,比如:

  1. location ~ /test-proxy.html$ {
  2. proxy_pass http://movie.vip.com/index;
  3. }

酱紫是错误的,当使用了正则表达式后,proxy_pass后不能再追加路径(/index)


三、动静分离

项目中的css/js/gif/png/jpg/flv等静态内容可以部署在nginx服务器中,nginx作为静态资源服务器加载这些资源是非常快的,动态的数据内容则通过调用后端服务读取,从而极大加快页面的响应速度。

1、新建一个site.html静态页面,里面的图片1.png从nginx服务中获取,而动态数据test.jsp是通过ajax动态加载渲染的。

site.html在/opt/code目录下,该目录下还有一个  /img/1.png 文件

  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title>测试nginx动静分离</title>
  5. <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
  6. </head>
  7. <script type="text/javascript">
  8. $(document).ready(function() {
  9. $.ajax({
  10. type: "GET",
  11. url: "http://movie.vip.com/test.jsp",
  12. success: function(data) {
  13. $("#get_data").html(data);
  14. },
  15. error: function() {
  16. alert("fail");
  17. }
  18. });
  19. });
  20. </script>
  21. <body>
  22. <h1>测试动静分离</h1>
  23. <img src="http://movie.vip.com/img/1.png"/>
  24. <div id="get_data"></div>
  25. </body>
  26. </html>

服务器上新建的test.jsp的放在你的 /tomcat8/webapps/ROOT/ 目录下

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <html>
  3. <head>
  4. <title>jsp页面</title>
  5. </head>
  6. <body>
  7. <h1>我是jsp的内容!!!</h1>
  8. </body>
  9. </html>

nginx的配置文件信息如下

  1. http {
  2. upstream java_api {
  3. server 10.200.121.53:8080;
  4. }
  5. ……
  6. }
  7. server{
  8. server_name movie.vip.com;
  9. ……
  10. #所有静态请求都由nginx处理
  11. location ~ \.(html|gif|jpg|jpeg|png|bmp|swf)$ {
  12. expires 1h;
  13. gzip on;
  14. root /opt/code; #该目录下放html文件和静态资源
  15. }
  16. #所有动态请求都转发给tomcat处理
  17. location ~ \.(jsp|do)$ {
  18. proxy_pass http://java_api;
  19. proxy_set_header Host $host;
  20. index index.html index.htm;
  21. }
  22. }

我这里设置的servername为movie.vip.com,我是通过windows系统发起这些请求的,有配置host(域名指代ip)。接着服务器上启动nginx和8080端口的tomcat,windows直接访问验证:浏览器访问http://movie.vip.com/site.html,正常访问,里面也能加载出jsp(从后端加载的),关闭tomcat后再访问,html也能正常访问,只是动态的那部分加载不了。如此便实现了服务的动静分离。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/518506
推荐阅读
相关标签
  

闽ICP备14008679号