NGINX学习(六)--nginx做服务器实现动静分离

Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现,首先看看Nginx做静态资源服务器。

  server {
      listen      80;                                                        
      server_name  localhost;                                              
      client_max_body_size 1024M;

      location / {
              root  /home/wwwroot;
              index  index.html;
          }
  } 

这样如果访问http://localhost 就会默认访问到/home/wwwroot目录下面的index.html,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

动静分离 
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

upstream test{  
      server localhost:8080;  
      server localhost:8081;  
  } 

  server {  
      listen      80;  
      server_name  localhost; 

      location / {  
          root  /home/wwwroot;  
          index  index.html;  
      } 

      # 所有静态请求都由nginx处理,存放目录为html  
      location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {  
          root    /home/wwwroot;
      } 

      # 所有动态请求都转发给tomcat处理  
      location ~ .(jsp|do)$ {  
          proxy_pass  http://test; 
      } 

      error_page  500 502 503 504  /50x.html;  
      location = /50x.html {  
          root  /home/wwwroot;  
      }  
  }  

这样我们就可以把HTML以及图片和css以及js放到wwwroot目录下,而tomcat只负责处理jsp和请求, 
例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外localtion后面其实是一个正则表达式,所以非常灵活。

动静分离有三种方式:

1、通过jenkis发布时,通过脚本,将图片、html、js、css等静态资源文件解压到nginx主机某个目录下,nginx配置,访问静态资源的请求都直接转发到nginx主机的静态资源文件夹中,动态请求都转发到服务主机上。

upstream test{  
      server localhost:8080;  
      server localhost:8081;  
  } 

  server {  
      listen      80;  
      server_name  localhost; 

      location / {  
          root  /home/wwwroot;  
          index  index.html;  
      } 

      # 所有静态请求都由nginx处理,存放目录为html  
      location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {  
          root    /home/wwwroot;
      } 

      # 所有动态请求都转发给tomcat处理  
      location ~ .(jsp|do)$ {  
          proxy_pass  http://test; 
      } 

      error_page  500 502 503 504  /50x.html;  
      location = /50x.html {  
          root  /home/wwwroot;  
      }  
  }

2、当前有A和B两台主机,通过jenkins发布时,所有代码都无差别的发布到服务主机A和B上,都通过tomcat容器启动服务。nginx配置,静态资源请求全都请求A服务器的tomcat,动态页面都请求B服务器的tomcat。

  server {  
      listen      80;  
      server_name  localhost; 

      location / {  
          root  /home/wwwroot;  
          index  index.html;  
      } 

      # 所有静态请求都由A服务主机处理  
      location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {  
          proxy_pass A;
      } 

      # 所有动态请求都转发给tomcat处理  
      location ~ .(jsp|do)$ {  
          proxy_pass  B; 
      } 

      error_page  500 502 503 504  /50x.html;  
      location = /50x.html {  
          root  /home/wwwroot;  
      }  
  }

3、当前有A和B两台主机,通过jenkins发布时,所有代码都无差别的发布到服务主机A和B上,B主机通过tomcat容器启动服务,处理动态请求。A主机不用配置tomcat,只解压静态资源。nginx配置,静态资源请求全都请求A服务器的静态资源,动态页面都请求B服务器的tomcat。

  server {  
      listen      80;  
      server_name  localhost; 

      location / {  
          root  /home/wwwroot;  
          index  index.html;  
      } 

      # 所有静态请求都由A服务主机处理  
      location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {  
          proxy_pass A;
      } 

      # 所有动态请求都转发给tomcat处理  
      location ~ .(jsp|do)$ {  
          proxy_pass  B; 
      } 

      error_page  500 502 503 504  /50x.html;  
      location = /50x.html {  
          root  /home/wwwroot;  
      }  
  }
个人理解,如有错误,欢迎指正!
原文地址:https://www.cnblogs.com/gllegolas/p/11724679.html