6. Nginx静态代理与动静分离

一 .Nginx静态代理

把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高。

所以在实际应用中,我们将静态资源比如图片,css,html,js等交给nginx处理,而不是由tomcat处理;

1.Nginx静态代理如何实现?

答:通过在Nginx的nginx.conf文件进行配置即可实现

方式一:(根据静态资源的格式/基于后缀名进行拦截)

通过在nginx.conf配置文件中添加静态资源的location,比如:

当访问静态资源的时候,从linux服务器/opt/static目录下获取(举例)

location ~ .*.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {

  root /opt/static;

}

以下案列根据.png后缀匹配

案列配置:

  
http {
  include       mime.types;
  default_type application/octet-stream;

  #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  #                 '$status $body_bytes_sent "$http_referer" '
  #                 '"$http_user_agent" "$http_x_forwarded_for"';

  #access_log logs/access.log main;

  sendfile       on;
  #tcp_nopush     on;

  #keepalive_timeout 0;
  keepalive_timeout 65;

  #gzip on;
  upstream www.myweb.com{
      ip_hash;
      server 127.0.0.1:9100;
      server 127.0.0.1:9200;
  }


  server {
      listen       80;
      server_name localhost;

      #charset koi8-r;

      #access_log logs/host.access.log main;

      location ~ .*.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
              root /opt/static;
      }

      location / {
          root   html;
          index index.html index.htm;
      }

      location /heal{
          root /opt/static/;
          index index.html index.htm;
      }

      location /myweb{
          proxy_pass http://www.myweb.com;

      }

访问nginx:http://192.168.95.8/myweb/

此时这个资源是由两个部分构成的,页面部分是tomcat返回的,图片是nginx返回的。

效果:

图片位置:

注意:放置静态资源的目录,要注意目录权限,如果权限不足,要给目录赋予权限;

关于location后面的字符串1、~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配;2、第一个点 . 表示任意字符;3、* 表示一个或多个字符;(.*表示一个或多个任意字符,这里匹配文件名)4、. 是转移字符,是后面这个点的转移字符;5、| 表示或者6、$ 表示结尾整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理;

方式二:通过在nginx.conf配置文件中配置静态资源所在的目录实现,比如:

(根据静态资源所在的路径目录进行拦截)

location ~ .*/(css|js|img|images) {     

  root   /opt/static;

}

xxx/css xxx/js xxx/img xxx/images

以下案列更具images这个目录匹配:

nginx.conf文件配置:

  
http {
  include       mime.types;
  default_type application/octet-stream;

  #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  #                 '$status $body_bytes_sent "$http_referer" '
  #                 '"$http_user_agent" "$http_x_forwarded_for"';

  #access_log logs/access.log main;

  sendfile       on;
  #tcp_nopush     on;

  #keepalive_timeout 0;
  keepalive_timeout 65;

  #gzip on;
  upstream www.myweb.com{
      ip_hash;
      server 127.0.0.1:9100;
      server 127.0.0.1:9200;
  }

  server {
      listen       80;
      server_name localhost;

      #charset koi8-r;

      #access_log logs/host.access.log main;

      #location ~ .*.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
      #       root /opt/static;
      #}

      location ~ .*/(css|js|img|images) {
              root /opt/static;
      }

      location / {
          root   html;
          index index.html index.htm;
      }

      location /heal{
          root /opt/static/;
          index index.html index.htm;
      }

图片位置:

http://192.168.95.8/myweb/images/60x60.png

效果:

二.动静分离

我们将静态资源放入/opt/static目录下,然后用户访问时由nginx返回这些静态资源;

Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景;

动态资源:如jsp有tomcat或者其他服务器完成;

静态资源:如图片,css,js等由nginx服务器完成;

他们各司其职,专注做自己擅长的事情;动静分离充分利用了他们各自的优势,从而达到更高效合理的架构;

2.1 动静分离示列:

Nginx在一台Linux上安装一份,可以启动多个nginx,每个Nginx配置文件不一样即可:

  
cp nginx.conf nginx81.conf

cp nginx.conf nginx82.conf

2.2 vi nginx81.conf:删除多余的配置,端口设置为81

 

2.3 vi nginx82.conf:删除多余的配置,端口设置为82

2.4 vi nginx.conf(80端口):

  
upstream static.myweb.com{
      server 127.0.0.1:81;
      server 127.0.0.1:82;
  }

server {
  listen       80;
  server_name localhost;

  #charset koi8-r;

  #access_log logs/host.access.log main;

  #location ~ .*.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
  #       root /opt/static;
  #}

  location ~ .*/(css|js|img|images) {
          proxy_pass http://static.myweb.com;
  }

负载均衡Nginx配置:

静态代理Nginx配置:

 

 列续:

(1)依次启动Nginx的配置文件

[root@localhost conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@localhost conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx81.conf
[root@localhost conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx82.conf

(2)查看启动是否ok

ps -aef |grep nginx

 (3)图片放置目录

/opt/static/myweb/images/60x60.png

  (4)通过Nginx负载均衡访问静态资源

http://192.168.95.8/myweb/images/60x60.png

 

原文地址:https://www.cnblogs.com/KdeS/p/12762455.html