zoukankan      html  css  js  c++  java
  • nginx 05-Nginx静态资源web服务

    静态资源配置

    • 非服务器动态运行生成的文件
      1. 浏览器端渲染(html、css、js)
      2. 图片(jpeg、gif、png)
      3. 视频(flv、mpeg)
      4. 文件(txt...)
    • 静态资源服务场景--CDN
    • 文件读取语法配置
    sendfile on|off;
    (http、server、location、if in location)
    引读:--with-file-aio 异步文件读取
    
    tcp_nopush on|off;
    (http、server、location)
    作用:sendfile开启的情况下,提高网络包的传输效率
    
    tcp_nodelay on|off;
    (http、server、location)
    作用:Keepalive连接下,提高网络包的传输实时性
    
    gzip on|off;
    (http、server、location、if in location)
    作用:压缩传输
    
    gzip_comp_level level;
    (http、server、location)
    作用:压缩比,默认是1
    
    gzip_http_version 1.0 | 1.1;
    (http、server、location)
    作用:http版本,默认是1.1
    
    http_gzip_static_module  --预读gzip功能
    http_gunzip_module  --应用支持gunzip的压缩方式
    
    • 配置案例
    server {
        listen       80;
        server_name  116.62.103.228 jeson.imooc.com;
        
        sendfile on;
        access_log  /var/log/nginx/log/static_access.log  main;
    
        
        location ~ .*.(jpg|gif|png)$ {
            gzip on;
            gzip_http_version 1.1;
            gzip_comp_level 2;
            gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
            root  /opt/app/code/images;
        }
    
        location ~ .*.(txt|xml)$ {
            gzip on;
            gzip_http_version 1.1;
            gzip_comp_level 1;
            gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
            root  /opt/app/code/doc;
        }
    
        location ~ ^/download {
            gzip_static on;
            tcp_nopush on;
            root /opt/app/code;
        }
    }
    

    浏览器缓存

    • 第一次请求
    浏览器请求 --> 无缓存 --> 请求web服务器 --> 请求响应 --> 协商 --> 呈现
    
    • 再次请求
    浏览器请求 --> 有缓存 --> 校验过期 --> 呈现
    
    • 校验过期机制
      1. 校验是否过期:expires(http1.0)、Cache-Control(max-age)(http1.1)
      2. 协议中Etag头信息校验:Etag(字符串)
      3. Last-Modified头信息校验:Last-Modified(具体时间)
    案例:
    Cache-Control: max-age=0
    ETag: "5ba13918-2c27"
    Last-Modified: Tue, 18 Sep 2018 17:42:48 GMT
    

    缓存配置语法:expires

    expires [modified] time;
    expires epoch | max |off;
    (http、server、location、if in location)
    作用:添加Cache-Control、Expires头,默认expires off
    

    跨域访问

    • 浏览器一般都会禁止跨域访问
    • 原因是不安全,容易出现CSRF攻击
    • nginx开启跨域访问设置语法
    add_header name value [always];
    (http、server、location、if in location)
    
    • 配置案例:
    server {
        listen       80;
        server_name  new.test.com;
    
        location ~ .*.(htm | html)$ {
            add_header Access-Control-Allow-Origin http://www.test.com;
            add_header Access-Control-Allow-Methods GET,POST.PUT.DELETE.OPTIONS;
            root  /opt/app/code;
        }
    }
    

    防盗链

    • 防止资源被盗用
    • 设置思路:区别哪些请求是非正常的用户请求
    • 基于http_refer防盗链配置模块
    • 配置语法:
    valid_referers none | blocked | server_names | string ...;
    (server、location)
    
    • 配置案例:
    server {
        listen       80;
        server_name  new.test.com;
    
        location ~ .*.(htm | html)$ {
            valid_referers none blocked 192.168.10.10 ~/baidu./;
            if ($invalid_referer) {
                return 403;
            }
            root  /opt/app/code;
        }
    }
    

    nginx动静分离

    • 通过nginx将动态请求和静态请求进行分离。
    • 作用:分离资源,减少不必要的请求消耗,减少请求延时。
    • 配置案例:
    http{
        upstream java_api{
            server 127.0.0.1:8080;
        }
        
        server {
            listen 80;
            server_name location;
            root /opt/app/code;  
            location ~ .jsp$ {
            proxy_pass http://java_api;
                    index  index.html index.htm;
                }
            
            location ~ .(jpg|png|gif)$ {
                    expires 1h;
                    gzip on;
                }
            
            location / {
                    index  index.html index.htm;
                }
        }
    }
    
  • 相关阅读:
    老贴纪念九(蓝色 白色 绿色(前四天))
    进入6月
    老贴纪念七!(敏感:二十年了,而青春从来没有离开过)
    一个关于inet_ntoa的奇怪问题
    一个通用的Makefile模板
    【记录】find+tar命令组合
    Linux SDIO WIFI驱动的编译
    编译静态库和动态库的Makefile文件
    分解成连续数字的和
    linux nc命令示例
  • 原文地址:https://www.cnblogs.com/liangjingfu/p/10677090.html
Copyright © 2011-2022 走看看