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. ArcGIS API for JavaScript 入门教程[5] 再讲数据——Map类之底图与高程

    [回顾]前4篇交代了JsAPI的背景.资源如何获取,简介了数据与视图分离的概念与实现,剖析了页面的大骨架. 这篇开始,讲Map类. 转载注明出处,博客园/CSDN/B站/知乎:秋意正寒 目录:http ...

  2. 对比 Git 与 SVN,这篇讲的很易懂

    ---恢复内容开始--- 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯工蜂发表于云+社区专栏 导语 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始 ...

  3. Install Windows 2016 on VirtualBox

    Download ISO file for Windows 2016 (180 days free).  https://www.microsoft.com/en-us/evalcenter/eval ...

  4. 露脸!钉钉通过SOC2隐私性原则审计,安全和隐私保护达超一流国际标准

    2018年4月3日,阿里巴巴钉钉宣布已经正式通过了两项安全方面的权威资质:SOC2Type1服务审计报告和ISO27018(公有云体系下的隐私保护)证书. 钉钉方透露,此次通过美国注册会计师协会(AI ...

  5. 超级简单!把文档转换成网页格式(Core)

    因为需要把好多的文档放在服务器上访问,最开始是使用第3方网站www.aconvert.com,这个其实也挺方便的, 最后由于一些需求原因,最终只有依靠代码来进行,以下是简化后的代码 创建一个控制台应用 ...

  6. .NET Core 性能分析: xUnit.Performance 简介

    xunit-performance 是xUnit的一个扩展, 使用它可以对.NET Core项目进行性能测试. 官网:https://github.com/Microsoft/xunit-perfor ...

  7. WindowUtils【窗口工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 判断当前界面是横屏还是竖屏: 获取当前界面方向. 效果图   代码分析 isLandscape(Context context): ...

  8. vue.js移动端配置flexible.js

    前言 最近在用vue做移动端项目,网上找了一些移动端适配的方案,个人觉得手淘团队flexible.js还是比较容易上手,在这里做下总结. 主体 flexible.js适配方案采用rem布局,根据屏幕分 ...

  9. SQL优化 MySQL版 - 多表优化及细节详讲

    多表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...

  10. HttpClient在.NET Core中的正确打开方式

    问题来源 长期以来,.NET开发者都通过下面的方式发送http请求: using (var httpClient = new HttpClient()) { var response = await ...