1、浏览器缓存

  1. server {
  2. listen 8083;
  3. server_name 127.0.0.1;
  4. sendfile on;
  5. access_log /var/log/nginx/static_server_access.log;
  6. error_log /var/log/nginx/static_server_error.log;
  7.  
  8. location ~ .*\.(html|htm) {
  9. expires 24h;(缓存过期时间)
  10. root /Data/work/picture;
  11. }
  12. }

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:允许进行跨站访问的站点
  1. server {
  2. listen 8083;
  3. server_name 127.0.0.1;
  4. sendfile on;
  5. access_log /var/log/nginx/static_server_access.log;
  6. error_log /var/log/nginx/static_server_error.log;
  7.  
  8. location ~ .*\.(html|htm) {
  9. add_header Access-Control-Allow-Origin http://www.jesonc.com;(允许某个站点进行跨站访问)
  10. add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;(允许进行跨站访问的http请求方法)
  11. root /Data/work/picture;
  12. }
  13. }
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的方式访问

  1. server {
  2. listen 8083;
  3. server_name 127.0.0.1;
  4. sendfile on;
  5. access_log /var/log/nginx/static_server_access.log;
  6. error_log /var/log/nginx/static_server_error.log;
  7.  
  8. location ~ .*\.(jpg|gif|png)$ {
  9. valid_referers none blocked 192.168.126.137;
  10. if ($invalid_referer) {
  11. return 403;
  12. }
  13. root /Data/work/picture;
  14. }
  15. }

(4)测试防盗链

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

  1. 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成功码

  1. 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>反向代理

  1. server {
  2. listen 8083;
  3. server_name 127.0.0.1;
  4. sendfile on;
  5. access_log /var/log/nginx/static_server_access.log;
  6. error_log /var/log/nginx/static_server_error.log;
  7.  
  8. location ~ /test_proxy.html$ {
  9. proxy_pass http://192.168.126.137:8082;
  10. }
  11. }

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

  1. server {
  2. listen 8083;
  3. server_name 127.0.0.1;
  4. sendfile on;
  5. access_log /var/log/nginx/static_server_access.log;
  6. error_log /var/log/nginx/static_server_error.log;
  7.  
  8. location / {
  9. proxy_pass http://192.168.126.137:8090;
  10. proxy_redirect default;(重定向)
  11.  
  12. proxy_set_header Host $http_host;(nginx代理往后端server发送信息的时候所添加的头信息,常常会添加的为Host头信息)
  13. proxy_set_header X-Real-IP $remote_addr;(获取前端的真实ip地址)
  14.  
  15. proxy_connect_timeout 30s;(连接请求的超时时间)
  16. proxy_send_timeout 60s;(发送数据超时时间)
  17. proxy_read_timeout 60s;(读取数据超时时间)
  18.  
  19. proxy_buffer_size 32k;(nginx默认缓冲区的内存大小)
  20. proxy_buffering on;(尽可能的读取缓冲区中后端响应信息,一次传递所有信息给前端,减少IO损耗)
  21. proxy_buffers 4 128k;
  22. proxy_busy_buffers_size 256k;
  23. proxy_max_temp_file_size 256k;(当缓存区已满时,将数据存到临时文件中,设置临时文件的大小)
  24. }
  25. }

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

  1. upstream tcache {
  2. server 192.168.126.137:8090;
  3. server 192.168.126.137:8081;
  4. server 192.168.126.137:8082;
  5. }
  6.  
  7. proxy_cache_path /opt/app/cache levels=1:2 keys_zone=test_cache:10m max_size=10g inactive=60m use_temp_path=off;
  8.  
  9. server {
  10. listen 8084;
  11. server_name 127.0.0.1;
  12.  
  13. access_log /var/log/nginx/test_proxy_access.log main;
  14.  
  15. location / {
  16. proxy_cache test_cache;
  17. proxy_pass http://tcache;
  18. proxy_cache_valid 200 304 12h;
  19. proxy_cache_valid any 10m;
  20. proxy_cache_key $host$uri$is_args$args;
  21. add_header Nginx-Cache $upstream_cache_status;
  22.  
  23. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;(如果代理的服务器出现500,502,503,504错误时就默认跳过,访问下一台服务器)
  24. }
  25. }

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

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

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

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

Syntax:proxy_no_cache string ...;

Default:--

Context:http,server,location

  1. 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命令使用(分析命中率)

  1. 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

  1. upstream test {
  2. server 192.168.126.137:8081;
  3. server 192.168.126.137:8090;
  4. server 192.168.126.137:8091;
  5. }
  6.  
  7. server {
  8. listen 8086;
  9. server_name 127.0.0.1;
  10.  
  11. charset UTF-8;
  12. access_log /var/log/nginx/test_proxy_access.log main;
  13. error_log /var/log/nginx/test_proxy_error.log;
  14.  
  15. location / {
  16. proxy_pass http://test;
  17. proxy_redirect default;
  18.  
  19. proxy_set_header Host $http_host;
  20. proxy_set_header X-Real-IP $remote_addr;
  21.  
  22. proxy_connect_timeout 30s;
  23. proxy_send_timeout 60s;
  24. proxy_read_timeout 60s;
  25.  
  26. proxy_buffer_size 32k;
  27. proxy_buffering on;
  28. proxy_buffers 4 128k;
  29. proxy_busy_buffers_size 256k;
  30. proxy_max_temp_file_size 256k;
  31. }
  32.  
  33. error_page 500 502 503 504 /50x.html;
  34.  
  35. location = /50x.html {
  36. root /usr/share/nginx/html;
  37. }
  38. }
 
 

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. 02. Install redis on Linux

    安装下载redis,参考官方文档:https://redis.io/download 下载: shell>wget http://download.redis.io/releases/redis ...

  2. mt8665芯片怎么样?联发科mt8665芯片参数介绍

    MediaTek的MT8665是一款高度集成的LTE片上系统(SoC),它包含了先进的功能,例如LTE cat.4.Octa HMP核心在1.5GHz下工作.3D图形(OpenGLES 3.0).13 ...

  3. 一条SQL生成数据字典

    有个字典表并定期维护,对DBA和开发很重要,终于把他们整合在一起了,看有没问题? 一条SQL生成数据字典,包含所有OPEN用户.表名.字段名.字段序号.字段属性.默认值.是否非空.字段意思.主键标识. ...

  4. Windows server 1709(不含UI)模板部署

    1.系统安装 在虚拟机导入安装镜像,客户端操作系统选择” windows server 2012”,虚拟磁盘类型选择”SCSI”:依照安装向导正确安装操作系统 2.安装vmware tools 选择虚 ...

  5. css+js调整当前界面背景音量

    展示效果 html代码: <div> <audio id="audio" controls src="https://dbl.5518pay.com/r ...

  6. 使用 Node.js 搭建 Web 服务器

    使用Node.js搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到几个比较重要的模块:http模块.文件系统.url解析模块.路径解析模块.以及301重定向技术等, ...

  7. “.Net 社区大会”(dotnetConf) 2018 Day 1 主题演讲

    Miguel de Icaza.Scott Hunter.Mads Torgersen三位大咖给大家带来了 .NET Core ,C# 以及 Xamarin的精彩内容: 6月份已经发布了.NET Co ...

  8. 微信小程序如何像vue一样在动态绑定类名

    微信小程序如何像vue一样在动态绑定类名 更新时间:2018年04月17日 14:08:44   这篇文章主要介绍了微信小程序如何像vue一样在动态绑定类名,文中给大家提到了vue与微信小程序的区别, ...

  9. Pytorch实战1:线性回归(Linear Regresion)

    GitHub代码练习地址:https://github.com/Neo-ML/MachineLearningPractice/blob/master/Pytorch01_LinearRegressio ...

  10. ABP学习笔记总汇

    首先立下一个目标,未来一段时间开始学习ABP. 先立一个flag.之后会再次更新目录和文章连接 目录 1.ABP学习笔记(1)-使用mysql