主页»服务器»Nginx入门到实战(2)场景完成篇

Nginx入门到实战(2)场景完成篇

来历:海岛 发布时刻:2019-07-02 阅览次数:

一、静态资源WEB服务

1.静态资源类型

非服务器动态运转生成的文件,换句话说,便是能够直接在服务器上找到对应文件的恳求

  1. 阅览器端烘托:HTML,CSS,JS
  2. 图片:JPEG,GIF,PNG
  3. 视频:FLV,MPEG
  4. 文件:TXT,恣意下载文件

2.静态资源服务场景-CDN

什么是CDN?例如一个北京用户要恳求一个文件,而文件放在的新疆的资源存储中心,假如直接恳求新疆间隔太远,推迟久。运用nginx静态资源回源,分发给北京的资源存储中心,让用户恳求的动态定位到北京的资源存储中心恳求,完成传输推迟的最小化

2.nginx静态资源装备

装备域:http、server、location 
#文件高速读取
http {  
     sendfile   on;
}
#在 sendfile 敞开的情况下,敞开 tcp_nopush 进步网络包传输功率
#tcp_nopush 将文件一次性一同传输给客户端,就好像你有十个包裹,快递员一次送一个,来回十趟,敞开后,快递员讲等候你十个包裹都派件,一趟一同送给你
http {  
     sendfile   on;
     tcp_nopush on;
}
#tcp_nodelay 敞开实时传输,传输办法与 tcp_nopush 相反,寻求实时性,可是它只要在长连接下才收效
http {  
     sendfile   on;
     tcp_nopush on;
     tcp_nodelay on;
}
#将拜访的文件紧缩传输 (削减文件资源巨细,进步传输速度)
#当拜访内容以gif或jpg结束的资源时
location ~ .*\.(gif|jpg)$ {  
    gzip on; #敞开
    gzip_http_version 1.1; #服务器传输版别
    gzip_comp_level 2; #紧缩比,越高紧缩越多,紧缩越高可能会耗费服务器功用
    gzip_types   text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss image/jpeg image/gif image/png;     #紧缩文件类型
    root /opt/app/code;     #对应目录(去该目录下寻觅对应文件)
}

#直接拜访已紧缩文件
#当拜访途径以download最初时,如www.baidu.com/download/test.img
#去/opt/app/code目录下寻觅test.img.gz文件,返回到前端时已是能够阅览的img文件
location ~ load^/download {  
    gzip_static on #敞开;
    tcp_nopush on;
    root /opt/app/code;
}

二、阅览器缓存

HTTP协议界说的缓存机制(如:Expires; Cache-control等 )
削减服务端的耗费,下降推迟

1.阅览器无缓存

阅览器恳求 -> 无缓存 -> 恳求WEB服务器 -> 恳求相应 -> 出现

在出现阶段会依据缓存的设置在阅览器中生成缓存

2.阅览器有缓存

阅览器恳求 -> 有缓存 -> 校验本地缓存时刻是否过期 -> 没有过期 -> 出现

若过期重新恳求WEB服务器

3.语法装备

location ~ .*\.(html|htm)$ {  
    expires 12h;    #缓存12小时
}

服务器呼应静态文件时,恳求头信息会带上 etag 和 last_modified_since 2个标签值,阅览器下次去恳求时,头信息发送这两个标签,服务器检测文件有没有发生变化,如无,直接头信息返 etag 和last_modified_since,状况码为 304 ,阅览器知道内容无改动,所以直接调用本地缓存,这个进程也恳求了服务,可是传着的内容很少

三、跨站拜访

开发nginx跨站拜访设置

location ~ .*\.(html|htm)$ {  
     add_header Access-Control-Allow-Origin *;
     add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
     #Access-Control-Allow-Credentials true #答应cookie跨域
}

在呼应中指定 Access-Control-Allow-Credentials 为 true 时,Access-Control-Allow-Origin 不能指定为 *,需求指定到详细域名

相关跨域内容可参阅 Laravel 跨域功用中间件 运用代码完成跨域,原理与nginx跨域装备相同

四、防盗链

避免服务器内的静态资源被其他网站所套用
此处介绍的 nginx 防盗链为根底办法,其它愈加深化的办法将在之后的文章介绍

首要,需求了解一个nginx变量

$http_referer #表明当时恳求上一次页面拜访的地址,换句话说,拜访 www.baidu.com 主页,这是第一次拜访,所以 $http_referer 为空,可是 拜访此页面的时分还需求获取一张主页图片,再恳求这张图片的时分 $http_referer 就为 www.baidu.com 

然后装备

location ~ .*\.(jpg|gif)$ {  
    #valid_referers 表明咱们答应哪些 $http_referer 来拜访
    #none 表明没有带 $http_referer,如第一次拜访时 $http_referer 为空
    #blocked 表明 $http_referer 不是规范的地址,非正常域名等
    #只答应此ip
    valid_referers none blocked 127.xxx.xxx.xx
    if ($invalid_referer) {     #不满足情况下变量值为1
        return 403;
    }
}

五、HTTP署理服务

Nginx能够完成多种署理办法

  • HTTP
  • ICMPPOPIMAP
  • HTTPS
  • RTMP

1. 署理差异

差异在于署理的目标不一样

正向署理署理的目标是客户端
反向署理署理的目标是服务端

2. 反向署理

语法:proxy_pass URL
默许:——
方位:loaction
#署理端口
#场景:服务器80端口敞开,8080端口对外封闭,客户端需求拜访到8080
#在nginx中装备proxy_pass署理转发时,假如在proxy_pass后边的url加/,表明肯定根途径;假如没有/,表明相对途径,把匹配的途径部分也给署理走
server {
    listen 80;
    location / {
        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; #获取客户端实在IP
        
        proxy_connect_timeout 30; #超时时刻
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        
        proxy_buffer_size 32k;
        proxy_buffering on; #敞开缓冲区,削减磁盘io
        proxy_buffers 4 128k;
        proxy_busy_buffers_size 256k;
        proxy_max_temp_file_size 256k; #当超越内存答应储蓄巨细,存到文件
    }
}
QQ群:凯发娱乐官网官方群(515171538),验证音讯:10000
微信群:加小编微信 849023636 邀请您参加,验证音讯:10000
提示:更多精彩内容重视微信大众号:全栈开发者中心(fsder-com)
网友谈论(共0条谈论) 正在载入谈论......
沉着谈论文明上网,回绝歹意咒骂 宣布谈论 / 共0条谈论
登录会员中心