1、浏览器缓存

server {
   listen    8083;
   server_name    127.0.0.1;
   sendfile    on;
   access_log    /var/log/nginx/static_server_access.log;
   error_log    /var/log/nginx/static_server_error.log;

   location ~ .*\.(html|htm) {
       expires    24h;(缓存过期时间)
       root    /Data/work/picture;
   }
}

2、跨站访问

(1)概念
   浏览器访问同一个服务端,一个页面中当请求http://www.a.com时,同时会用到某种方式(ajax等)去请求http://www.b.com,这样就出现一个页面请求服务端用到两个域名,这种方式对于浏览器来说一般是默认禁止这么做的,主要是出于安全的考虑
(2)为什么浏览器禁止跨域访问
    不安全,容易出现CSRF攻击
(3)nginx怎么做
    Syntax: add_header name value [always];
    Default: --
    Context:http,server,location,if in location
    name:Access-Control-Allow-Origin
    value:允许进行跨站访问的站点
server {
   listen    8083;
   server_name    127.0.0.1;
   sendfile    on;
   access_log    /var/log/nginx/static_server_access.log;
   error_log    /var/log/nginx/static_server_error.log;

   location ~ .*\.(html|htm) {
       add_header    Access-Control-Allow-Origin    http://www.jesonc.com;(允许某个站点进行跨站访问)
       add_header    Access-Control-Allow-Methods    GET,POST,PUT,DELETE,OPTIONS;(允许进行跨站访问的http请求方法)
       root    /Data/work/picture;
   }
}
3、防盗链

(1)概念

防止资源被盗用

(2)防盗链设置思路

首要方式:区别哪些请求是非正常的用户请求(阻止非正常用户经常访问,保证正常用户正常访问)

(3)基于http_refer防盗链配置模块

Syntax:valid_referers none|blocked|server_names|string...;

Default:--

Context:server,loation

valid_referers:允许哪些referer信息访问

none:允许没有带referer信息的访问

blocked:允许非http://domain样式的请求访问

server_names:只允许ip的方式访问

server {
       listen  8083;
       server_name     127.0.0.1;
       sendfile        on;
       access_log      /var/log/nginx/static_server_access.log;
       error_log       /var/log/nginx/static_server_error.log;

       location ~ .*\.(jpg|gif|png)$ {
               valid_referers none blocked 192.168.126.137;
               if ($invalid_referer) {
                       return  403;
               }
               root    /Data/work/picture;
       }
}

(4)测试防盗链

不予许访问的地址,如百度,返回403错误码

curl -e "http://www.baidu.com" -I http://ip:8083/1.jpg
 HTTP/1.1 403 Forbidden
 Server: nginx/1.14.1
 Date: Sat, 24 Nov 2018 14:50:35 GMT
 Content-Type: text/html
 Content-Length: 169
 Connection: keep-alive

允许访问的地址,返回200成功码

curl -e "http://192.168.126.137" -I http://ip:8083/1.jpg
 HTTP/1.1 200 OK
 Server: nginx/1.14.1
 Date: Sat, 24 Nov 2018 14:51:40 GMT  
 Content-Type: image/jpeg
 Content-Length: 35675
 Last-Modified: Sat, 24 Nov 2018 14:42:10 GMT  
 Connection: keep-alive
 ETag: "5bf96342-8b5b"
 Accept-Ranges: bytes

4、代理服务

(1)原理

  代理--代为办理(代理理财,代理收获等等)

(2)代理分类

按应用场景模式总结

<1>正向代理(客户端通过代理服务器访问网站,如访问谷歌,客户端请求代理服务器由代理服务器去访问谷歌,客户端不需要访问谷歌)

<2>反向代理(服务端用来均衡流量等作用)

(3)代理区别

区别在于形式上服务的对象不一样

正向代理代理的对象是客户端,为客户端服务

反向代理代理的对象是服务端,为服务端服务

(4)配置语法

Syntax:proxy_pass URL;

Default:--

Context:location,if in location, limit_except

  <1>反向代理

server {
   listen    8083;
   server_name    127.0.0.1;
   sendfile    on;
   access_log    /var/log/nginx/static_server_access.log;
   error_log    /var/log/nginx/static_server_error.log;

   location ~ /test_proxy.html$ {
      proxy_pass http://192.168.126.137:8082;
   }
}

(5)代理补充配置和规范

server {
   listen    8083;
   server_name    127.0.0.1;
   sendfile    on;
   access_log    /var/log/nginx/static_server_access.log;
   error_log    /var/log/nginx/static_server_error.log;

   location / {
       proxy_pass    http://192.168.126.137:8090;
       proxy_redirect    default;(重定向)

       proxy_set_header Host $http_host;(nginx代理往后端server发送信息的时候所添加的头信息,常常会添加的为Host头信息)
       proxy_set_header X-Real-IP $remote_addr;(获取前端的真实ip地址)

       proxy_connect_timeout    30s;(连接请求的超时时间)
       proxy_send_timeout    60s;(发送数据超时时间)
       proxy_read_timeout    60s;(读取数据超时时间)

       proxy_buffer_size    32k;(nginx默认缓冲区的内存大小)
       proxy_buffering    on;(尽可能的读取缓冲区中后端响应信息,一次传递所有信息给前端,减少IO损耗)
       proxy_buffers    4    128k;
       proxy_busy_buffers_size    256k;
       proxy_max_temp_file_size    256k;(当缓存区已满时,将数据存到临时文件中,设置临时文件的大小)
   }
}

5、nginx作为缓存服务

(1)缓存类型

<1>如果缓存放到服务端,称为服务端缓存(redis,memcahce)

<2>如果缓存放到代理或者中间件上,称为代理缓存(从服务端获取到数据后,先缓存到本地一份,再返回给客户端使用)

<3>如果缓存放到客户端,称为客户端缓存(缓存到浏览器上)

(2)proxy_cache配置语法

Syntax:proxy_cache_path path[levels=levels] [use_temp_path=on|off] keys_zone=name:size[inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

Default:--

Context:http

定义好path后

Syntax:proxy_cache zone|off;

Default:proxy_cache off;

Context:http,server,location

缓存过期周期

Syntax:proxy_cache_valid [code...] time;

Default:--

Context:http,server,location

缓存的维度

Syntax:proxy_cache_key string;

Default:proxy_cache_key $scheme$proxy_host$request_uri

Context:http,server,location

upstream tcache {
    server 192.168.126.137:8090;
    server 192.168.126.137:8081;
    server 192.168.126.137:8082;
}

proxy_cache_path /opt/app/cache levels=1:2 keys_zone=test_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen 8084;
    server_name 127.0.0.1;

    access_log /var/log/nginx/test_proxy_access.log    main;

    location / {
        proxy_cache    test_cache;
        proxy_pass    http://tcache;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        proxy_cache_key    $host$uri$is_args$args;
        add_header    Nginx-Cache    $upstream_cache_status;

        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;(如果代理的服务器出现500,502,503,504错误时就默认跳过,访问下一台服务器)
    }
}

(3)补充-如何清理指定缓存

方式一:rm -rf 缓存目录内容

方式二:第三方扩展模块ngx_cache_purge

(4)补充-如何让部分页面不缓存

Syntax:proxy_no_cache string ...;

Default:--

Context:http,server,location

upstream tcache {     server 192.168.126.129:8081;}proxy_cache_path /opt/app/cache levels=1:2 keys_zone=test_cache:10m max_size=10g inactive=60m use_temp_path=off;server {      listen 8084;      server_name 127.0.0.1;      access_log /var/log/nginx/test_proxy_access.log    main;      if ($request_uri ~ ^/(url|login|register|password\/reset))    {        set $cookie_nocache 1;    }    (判断请求是否以不能缓存的uri路径开头,如果是则将cookie_nocache设置为1)    location ~ .*\.(jpg|png|gif) {          proxy_cache    test_cache;          proxy_pass    http://tcache;          proxy_cache_valid 200 304 12h;          proxy_cache_valid any 10m;          proxy_cache_key    $host$uri$is_args$args;                  proxy_no_cache    $cookie_nocache    $arg_noache    $arg_comment;(cookie_nocache不为0或者空,这不能缓存)          proxy_no_cache    $http_pragma    $http_authorization;                 add_header    Nginx-Cache    $upstream_cache_status;                  proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;    }    location ~ .*\.(html|htm){          root /Data/work/picture;        index index.html index.htm;      }}

6、缓存命中分析

(1)方式一:通过设置response的头信息Nginx-Cache

add_header Nginx-Cache "$upstream_cache_status";

$upstream_cache_status

状态 意义
MISS 未命中,请求被传送到后台处理
HIT 缓存命中
EXPIRED 缓存已经过期,请求被传送到后台处理
UPDAING 正在更新缓存,将使用旧的应答
STALE 后端得到过期的应答

(2)方式二:通过设置log_format,打印日志分析

缓存命中率 = HIT次数/总请求数

实现方式:分析Nginx里的Access日志

awk命令使用(分析命中率)

awk '{if($NF=="\"HIT\""){hit++}}END{printf "%.2f",hit/NR}' /var/log/nginx/test_proxy_access.log(红色为可变量,蓝色为自定义量)

7、负载均衡

(1)配置语法

Syntax:upstream name {...}

Default:--

Context:http

upstream test {
    server    192.168.126.137:8081;
    server    192.168.126.137:8090;
    server    192.168.126.137:8091;
}

server {
    listen    8086;
    server_name    127.0.0.1;

    charset UTF-8;
    access_log    /var/log/nginx/test_proxy_access.log    main;
    error_log    /var/log/nginx/test_proxy_error.log;

    location / {
        proxy_pass    http://test;
        proxy_redirect    default;

        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;

        proxy_connect_timeout    30s;
        proxy_send_timeout    60s;
        proxy_read_timeout    60s;

        proxy_buffer_size    32k;
        proxy_buffering    on;
        proxy_buffers    4    128k;
        proxy_busy_buffers_size    256k;
        proxy_max_temp_file_size    256k;
    }

    error_page    500 502 503 504    /50x.html;

    location = /50x.html {
        root    /usr/share/nginx/html;
    }
}
 
 

nginx常用场景的更多相关文章

  1. nginx应用场景,特性,目录结构,常用模块,内置变量,URL和URI,http状态码,配置文件详解

    1.nginx介绍 1丶俄罗斯人开发的,开源www服务软件 2丶软件一共780K 3丶nginx本身是一款静态(html,js,css,jpg等)www软件 4丶静态小文件高并发,同时占用的资源很少, ...

  2. 【第六课】Nginx常用配置下详解

    目录 Nginx常用配置下详解 1.Nginx虚拟主机 2.部署wordpress开源博客 3.部署discuz开源论坛 4.域名重定向 5.Nginx用户认证 6.Nginx访问日志配置 7.Ngi ...

  3. nginx的重试机制以及nginx常用的超时配置说明

    nginx的重试机制 现在对外服务的网站,很少只使用一个服务节点,而是部署多台服务器,上层通过一定机制保证容错和负载均衡. nginx就是常用的一种HTTP和反向代理服务器,支持容错和负载均衡. ng ...

  4. nginx常用模块(三)

    Nginx常用模块(三) ngx_http_proxy_module模块配置(http或https协议代理) proxy_pass URL; 应用上下文:location, if in locatio ...

  5. 针对nginx应用场景的配置 知识整理

    本文为转载,原文链接 前言 原本想写整理一篇针对nginx应用场景的相应配置,但发现已经有人整理了,而且写得非常不错,特意转过来 概论 Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 ...

  6. Nginx 常用基础模块

    目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...

  7. Nginx常用功能配置一

    Nginx常用功能配置 参数include配置 说明:如果日常工作中server标签存在太多,可以采用include配置模式,Nginx的主配置文件包含的所有虚拟主机的子配置文件会统一放入extra目 ...

  8. 第十章 nginx常用配置介绍

    一.虚拟主机 1.配置方式 #虚拟主机配置方式:1.基于多IP的方式2.基于多端口的方式3.基于多域名的方式 2.方式一:基于多IP的方式 1.第一个配置文件[root@web02 /etc/ngin ...

  9. Nginx 常用全局变量 及Rewrite规则详解

    每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...

随机推荐

  1. 使用myeclipse修改项目映射路径

    这里主要做下记录,找到myeclipse中对项目路径进行查看以及修改的地址 如图 点击项目右键 实例url:http://localhost:8080/myFirstServlet/one 对应路径中 ...

  2. 基于geoserver的REST服务完成mysql数据源动态发布

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在之前的<简析GeoServer服务的内部文件组织以及 ...

  3. Process 'command 'D:\jdk8\jdk\bin\java.exe'' finished with non-zero exit value 2

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10539006.html 捣鼓了好久,现在已经不想说话,为何会出现这个问题,Process 'comman ...

  4. Git使用详细教程(9):git log

    目录 格式化 检索 显示最近提交 Git中使用git log查看提交日志 如果日志很多的话,默认会以分页方式展示 空格可以翻下一页,ctrl+b翻上一页,q退出 格式化 如果想获取每条日志的简要信息, ...

  5. cmd 执行Dcpromo错误:在该 SKU 上不支持 Active Directory 域服务安装向导,Windows Server 2008 R2 Enterprise 配置AD(Active Directory)域控制器

    今天,要安装AD域控制器,运行dcpromo结果提示:在该 SKU 上不支持 Active Directory 域服务安装向导. 以前弄的时候直接就通过了,这次咋回事?终于搞了大半天搞定了. 主要原因 ...

  6. JVM之GC算法、垃圾收集算法——标记-清除算法、复制算法、标记-整理算法、分代收集算法

    标记-清除算法 此垃圾收集算法分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记对象,它的标记过程前面已经说过——如何判断对象是否存活/死去 死去的对象就会 ...

  7. HTML5 input date属性引起的探索——My97DatePicker(日期选择插件)

    不得不说H5的input date属性真的好用,之前我写的http://www.cnblogs.com/tu-0718/p/6729274.html这篇博客里面也有提到,不过虽然移动端对H5的支持还是 ...

  8. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT权限验证【必看】

    前言 关于JWT一共三篇 姊妹篇,内容分别从简单到复杂,一定要多看多想: 一.Swagger的使用 3.3 JWT权限验证[修改] 二.解决JWT权限验证过期问题 三.JWT完美实现权限与接口的动态分 ...

  9. 【TensorFlow篇】--反向传播

    一.前述 反向自动求导是 TensorFlow 实现的方案,首先,它执行图的前向阶段,从输入到输出,去计算节点值,然后是反向阶段,从输出到输入去计算所有的偏导. 二.具体 1.举例 图是第二个阶段,在 ...

  10. mysql的学习笔记(三)

    1.外键约束(保持数据一致,完整.实现一对多或一对一) 父表(参照的表)和子表(有外键列的表)必须使用相同的存储引擎InnoDB,禁止使用临时表. 外键列和参照列必须具有相似的数据类型.其中数字的长度 ...