资讯专栏INFORMATION COLUMN

Nginx-场景实践篇

Steven / 917人阅读

摘要:场景实践篇一作为静态资源服务动态资源和静态资源客户端请求的页面如果是静态网页,那么服务器会直接把静态网页的内容响应给客户端。

Nginx-场景实践篇 一、Nginx作为静态资源Web服务 1、动态资源和静态资源
客户端请求的页面如果是静态网页,那么服务器会直接把静态网页的内容响应给客户端。如果客户端请求的是动态网页,服务器需要先把动态网页换成静态网页,然后再把转换后的静态网页响应给客户端

静态资源的几种类型

浏览器渲染:HTML、CSS、JAVASCRIPT

图片:JPEG、GIF、PNG ...

视频:FLV、MPEG ...

文件:TXT、等任意下载文件

2、CDN(Content Delivery Network)内容分发网络
其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
3、配置语法

sendfile(文件读取)

配置语法:sendfile on|off;

默认:无

Context:http,server,location,if in location

tcp_nopush(sendfile开启的情况下,提高网络包的传输效率)

配置语法:tcp_nopush on|off;

默认:无

Context:http,server,location

tcp_nodelay(keepalive连接下,提高网络包的传输实时性)

配置语法:tcp_nodely on|off;

默认:无

Context:http,server,location

gzip(压缩)

配置语法:gzip on|off;

默认:无

Context:http,server,location,if in location

gizp_comp_level(压缩比)

配置语法:gzip_comp_level level;

默认:无;

Context:http,server,location

gzip_http_version(gzip的http的版本)

配置语法:gzip_http_version 1.0|1.1;

默认:无

Context:http,server,location

gzip_static(预读gzip功能)

配置语法:gzip_static on|off|always;

默认:gzip_static off;

Context:http,server,location

4、浏览器缓存
HTTP协议定义的缓存机制(如:Expires;Cache-control等)

浏览器无缓存:

浏览器请求→无缓存→请求WEB服务器→请求相应,协商→呈现

客户端有缓存

浏览器请求→有缓存→校验过期→呈现

校验过期机制

校验方式 对应头信息
校验是否过期 Expires、Cache-Control(max-age)
协议中的Etag头信息校验 Etag
Last-Modified有信息校验 Last-Modified

第一次请求:

第二次请求:

expires(response的headers添加Cache-Control、Expires)

配置语法:expires [modified] time; expires epoch |max |off;

默认:expires off;

Context:http,server,location,if in location

5、跨站访问
Nginx如何打开跨站访问? Access-Controller-Allow-Origin

add_header

配置语法:add_header name value [always];

默认:无

Context:http,server,location,if in location

name可以为 Access-Controller-Allow-Origin 和  Access-Controller-Allow-Method
6、防盗链
基于http_refer防盗链配置模块

配置语法:valid_referers none|blocked|server_names|string...;

默认:无

Context:server,location

valid_referers none blocked IP
if($invalid_referer) {
    return 403;
}

提醒:可以使用curl来测试配置好的防盗链:curl -e "http:www.baidu.com" -I IP


二、Nginx作为代理服务

正向代理

对象是客户端(比如说想访问外网,把代理服务器设到代理地址,客户端可以访问任何网站)

反向代理

对象是服务端(并不需要关心访问的是哪一台服务器,反向代理就放在服务端。反向代理会帮我们处理请求)

proxy_pass

配置语法:proxy_pass URL;

默认:无

Context:location,if in location,limit_except

其他代理的一些语法补充

proxy_buffering(缓冲区)

语法配置:proxy_buffering on | off;

默认:无;

Context:http,server,location

扩展:proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size

proxy_redirect(跳转重定向)

配置语法:proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;

默认:无

Context:http,server,location

proxy_set_header(头信息)

配置语法:proxy_set_header file value;

默认:proxy_set_header Host $proxy_host;proxy_set_header Connection close;

Context:http,server,location

扩展:proxy_hide_header、proxy_set_body

proxy_connect_timeout(超时)

配置语法:proxy_connect_timeout time;

默认:无

Context:http,server,location

扩展:proxy_read_timeout、proxy_send_timeout

配置文件中的例子:
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;

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

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
三、Nginx作为负载均衡服务
负载均衡:建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

upstream

配置语法: upstream name {...}

默认:无

Context:http

简单配置例子

upstream ronaldo {
        server ip:port [param];
        server ip:port [param];
        server ip:port [param];
}
server {
    location / {
        proxy_pass http://ronaldo;
    }
}
param参数解释:
param 意义
down 当前的server暂时不参与负载均衡
weight=num 权重,num越大,轮询到的概率越大
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务暂停的时间(默认是10s)
max_conns 限制最大的接收的连接数
调度算法:
算法 意义
轮询 按时间顺序逐一分配到不同的后端服务器
加权轮询 weight值越大,分配到的访问几率越高
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一个IP就固定访问同一个后端服务器
least_conn 最少连接数,哪个服务器连接数少就分发
url_hash 按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
hash关键字值 hash自定义的key

ip_hash:

只需要在upstream中加入 ip_hash; 即可

缺陷:如果走代理,那么remote_addr就不是用户真实的ip

url_hash(1.7.2版本以后可用):

配置语法:hash key [consistent];

默认:无

Context:upstream

key可以是$request_uri,根据url进行hash
四、Nginx作为缓存服务 1、缓存的类型

服务端缓存。例:memcache、reids

代理缓存。例:Nginx缓存服务端的数据

客户端缓存。

2、常用缓存配置

proxy_cache_path

配置语法proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size] [use_temp_path]...

默认:无

Context:http

proxy_cache

配置语法:proxy_cache zone | off;

默认:proxy_cache off;

Context:http,server,location

proxy_cache_valid(缓存过期周期)

配置语法:proxy_cache_valid [code...] time

默认:无

Context:http、server、location

proxy_cache_key(缓存的维度)

配置语法:proxy_cache_key string;

默认:proxy_cache_key $scheme$proxy_host$request_uri;

Context:http、server、location

常见配置:

proxy_cache_path cache_path levels=1:2 keys_zone=key_name:10m max_size=10g inactive=60m use_temp_path=off;

server {
    loaction / {
        proxy_pass http://ronaldo;
        proxy_cache key_name;
        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;
    }
}
2、清除指定缓存

rm -rf 缓存目录内容

第三方扩展模块:ngx_cache_purge

3、如何让部分页面不缓存

proxy_no_cache

配置语法:proxy_no_cache string ...;

默认:无

Context:http,server,location

简单示例

if ($request_uri ~ ^/(url_3|login|register|password/reset)) {
    set $cookie_nocache 1;
}

location / {
    proxy_no_cache $cookie_nocache;
}
4、大文件分片请求

slice

语法配置:slice size;

默认:slice 0;

Context:http、server,location

优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其他请求不受影响。
缺点:当文件很大或者slice很小的时候,可能会导致文件描述符耗尽等待情况。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39909.html

相关文章

  • Nginx-场景践篇

    摘要:场景实践篇一作为静态资源服务动态资源和静态资源客户端请求的页面如果是静态网页,那么服务器会直接把静态网页的内容响应给客户端。 Nginx-场景实践篇 一、Nginx作为静态资源Web服务 1、动态资源和静态资源 客户端请求的页面如果是静态网页,那么服务器会直接把静态网页的内容响应给客户端。如果客户端请求的是动态网页,服务器需要先把动态网页换成静态网页,然后再把转换后的静态网页响应给客户...

    yeooo 评论0 收藏0
  • redis ----分布式锁

    摘要:假设反向代理层是,里能够配置多个后端,并且能够探测到多个后端的存活性。以为例,天然支持主从同步,官方也有哨兵机制,来做的存活性检测。方法论上,高可用是通过冗余自动故障转移来实现的。 究竟啥才是互联网架构高可用 一、什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服...

    imingyu 评论0 收藏0
  • Nginx践篇(1)- Nginx作为静态资源web服务 - 静态资源压缩

    摘要:一静态资源服务静态资源类型类型文件类型浏览器端渲染图片视频文件等其他下载文件静态资源服务场景二静态资源核心配置文件读取是一种高效传输文件的模式设置为表示启动高效传输文件的模式。语法压缩开启压缩,可以加快资源响应速度,同时节省网络带宽资源。 一、静态资源web服务 showImg(https://segmentfault.com/img/remote/1460000015873025?w...

    luffyZh 评论0 收藏0

发表评论

0条评论

Steven

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<