《前端运维》二、Nginx--3静态资源服务、跨域与其他
一、静态资源服务
首先,静态资源一般是指客户端发送请求到Web服务器,web服务器从内存中取得相应的文件,返回给客户端,客户端解析并渲染出来。动态资源呢,则是由客户端发起请求,先交由web容器,web容器连接数据库,数据库处理数据之后,将内容交给web服务器,web服务器返回给客户端解析并渲染。
一般的静态资源有:HTML、CSS、JS、JPEG、PNG、MPEG、Word、EXCEL等。
CDN的全称是Content Delivery Network,即内容分发网络。CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
一、配置语法
1、sendfile
不经过用户内核发送文件。
语法:
Syntax: sendfile on / off;
Default: sendfile off
Context: http,server,location,if in location
2、tcp_nopush
在sendfile开启的情况下,合并多个数据包,提高网络包的传输效率。
语法:
Syntax: tcp_nopush on / off;
Default: tcp_nopush off
Context: http,server,location
3、tcp_nodelay
在keepalive连接下,提高网络包的传输实时性.
语法:
Syntax: tcp_nodelay on / off;
Default: tcp_nodelay on
Context: http,server,location
4、gzip
压缩文件可以节约带宽和提高网络传输效率。
语法:
Syntax: gzip on / off;
Default: gzip off
Context: http,server,location
5、gzip_comp_level
压缩比率越高,文件被压缩的体积越小。
语法:
Syntax: gzip_comp_level level
Default: gzip_comp_level 1
Context: http,server,location
6、gzip_http_version
压缩版本。
语法:
Syntax: gzip_http_version 1.0/1.1
Default: gzip_http_version 1.1
Context: http,server,location
7、http_gzip-static_module
先找磁盘上找同名的.gz这个文件是否存在,节约CPU的压缩时间和性能损耗。
http_gzip_static_module:预计gzip模块。
http_gunzip_module :应用支持gunzip的压缩方式。
语法:
Syntax: gzip_static on/off
Default: gzip_static off
Context: http,server,location
二、实战例子
首先,我们先建个目录:
mkdir -p /data/www/images
mkdir -p /data/www/html
mkdir -p /data/www/js
mkdir -p /data/www/css
mkdir -p /data/www/download
文件夹有了,我们可以创建一些对应的文件,随便写,放到对应的目录下就好了。(这里,如果觉得vi不好用的话,可以在本地创建后,通过ftp传输到服务器)。
然后,我们到/etc/nginx/nginx.conf中进行配置:
location ~ .*\.(jpg|png|gif)$ {
gzip off;# 关闭压缩
root /data/www/images;
}
location ~ .*\.(html|js|css)$ {
gzip_static on;
gzip on; # 启用压缩
gzip_min_length 1k; # 只压缩超过1K的文件
gzip_http_version 1.1; # 启用gzip压缩所需的HTTP最低版本
gzip_comp_level 9; # 压缩级别,压缩比率越高文件被压缩的体积越小
gzip_types text/css application/javascript;# 进行压缩的文件类型
root /data/www/html;
}
location ~ ^/download {
gzip_static on; # 启用压缩
tcp_nopush on; # 不要着急发,攒一波再发
root /data/www; # 注意此处目录是`/data/www`而不是`/data/www/download`
}
这段代码写在符合语法的位置即可。然后重启nginx服务。但是呢,你访问html页面的时候,发现,欸?http的header中没有gzip的字段。咋回事?可能是因为你的文件体积太小,没有触发压缩。咱们换个大点的试试,比如下载个jquery,复制到你的服务器上试一下。

然后,它就压缩了。
二、跨域与其他
1、跨域
跨域的概念简单来说就是是指一个域下的文档或脚本试图去请求另一个域下的资源。
语法:
Syntax: add_header name value
Default: add_header --
Context: http,server,location
实战:
我们参照之前的模式,创建一个json的文件夹,在里面加上一个json文件。
mkdir -p /data/json
cd /data/json
vi user.json
# 随便写点内容
然后配置:
location ~ .*\.json$ {
add_header Access-Control-Allow-Origin http://127.0.0.1:8080;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
root /data/json;
}
然后再index.html里请求这个json:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
</head>
<body>
<script>
let xhr = new XMLHttpRequest();
xhr.open('GET', 'http://115.29.148.6/user.json', true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.responseText);
}
}
xhr.send();
</script>
</body>
</html>
然后呢,我们可以在本地启动一个http-server,访问咱们的这个index页面,启动的话,在index.html所属的目录下启动http-server即可。要安装node哦,http-server是node的一个模块。
2、浏览器缓存
我们先来看张图,理解下:

浏览器缓存这一块,实际上就是通过nginx配置头字段就可以了。比如:
语法:
Syntax: expires time
Default: expires off
Context: http,server,location
实战:
location ~ .*\.(jpg|png|gif)$ {
expires 24h;
}
3、防盗链
防盗链的作用,主要是用来防止网络资源被盗用,保证信息安全,防止流量过量。需要区别出哪些请求是非正常的用户请求。简单来说,就是允许哪些源(ip地址)来访问我的服务器资源。
语法:
Syntax: valid_referers none、block、server_names、IP
Default: --
Context: server,location
实战:
location ~ .*\.(jpg|png|gif)$ {
expires 1h;
gzip off;
gzip_http_version 1.1;
gzip_comp_level 3;
gzip_types image/jpeg image/png image/gif;
# none没有refer blocked非正式HTTP请求 特定IP
valid_referers none blocked 115.29.148.6;
if ($invalid_referer) { # 验证通过为0,不通过为1
return 403;
}
root /data/images;
}
服务器的nginx里配置好了之后,跟跨域的例子类似,我们可以新建一个html文件,引用服务器的图片,开启了referer后,本地的请求就获取不到图片资源了,因为我们在服务器上做了限制。当然,如果你嫌麻烦的话,也可以使用curl来做测试:
curl -v -e "115.29.148.6" http://115.29.148.6/kf.jpg
curl -v -e "http://www.baidu.com" http://115.29.148.6/kf.jpg
好啦,今天就到这里,后面还有一篇文章,学学代理和重定向啥的。
《前端运维》二、Nginx--3静态资源服务、跨域与其他的更多相关文章
- 如何搞定前端资源服务跨域问题之nginx篇
问题描述 1.首先让我们先看一张图 2.从图中,我们可以很清楚的看到当http请求的站点访问https的资源的时候会报出“Cross-Origin”跨域的问题.为什么会出现这样的错误,这是因为涉及到“ ...
- Nginx作为web静态资源服务器——跨域访问
跨站访问 为什么浏览器禁止跨域访问 Nginx跨站访问 Syntax:add_header name value [always]; Default:—— Context:http,serve ...
- nginx/apache静态资源跨域访问问题详解
1. apache静态资源跨域访问 找到apache配置文件httpd.conf 找到这行 #LoadModule headers_module modules/mod_headers.so把#注释符 ...
- Nginx作为静态资源web服务之文件读取
Nginx作为静态资源web服务之文件读取 文件读取会使用到以下几个配置 1. sendfile 使用nginx作为静态资源服务时,通过配置sendfile可以有效提高文件读取效率,设置为on表示启动 ...
- 二.Nginx反向代理和静态资源服务配置
2018年03月31日 10:30:12 麦洛_ 阅读数:1362更多 所属专栏: nginx 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/M ...
- nginx 配置静态资源路径(url不同于static path)
目的 用nginx做静态资源代理可以减少请求对后台服务器的压力,使响应更加迅速. 配置 情景一 url : 127.0.0.1:8000/images ...
- nginx处理静态资源的配置
修改nginx.conf文件,用于nginx处理静态资源. 主要配置如下(在server配置中加入location配置即可): server { listen 80; server_name 123. ...
- linux使用Nginx搭建静态资源服务器
最近公司需要做一个宣传片播放 视频有点大 好几百M 就想到使用Nginx来代理静态资源,在过程中出现了一些问题,比如端口没开.访问是403等,没有成功,后面慢慢查找问题,才发现大部分博客资料的都不全 ...
- Nginx之静态资源WEB服务
本篇主要记录学习Nginx的静态资源WEB服务的几种常见的功能记录学习 Nginx开发常用的命令 nginx -tc /etc/nginx/nginx.conf vim /etc/nginx/conf ...
随机推荐
- 如何写出优雅又地道的Python代码?【转载】
在Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic.一般说地道(idiomatic)的python代码,就是指这份代码很pyth ...
- CPU优化上下文切换之线程上下文切换案例分析
对于线程上下文切换,如果同进程内就是只是线程上下文切换,如果非同进程内则是进程上下文切换.下面进行线程上下文切换场景模拟. 一.环境准备~模拟工具sysbench. 1)安装git yum -y in ...
- JS 逻辑运算符的特点
致谢 首先说一下,其他数据类型转换为布尔类型的规则: null.undefined.0.NaN.空字符串转换为false,其他转化为 true. 1. 取反 ! 首先把数据转化为布尔值,然后取反,结果 ...
- 在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么?
周末跟朋友讨论了一些 TCP 的问题,在查阅<Linux 服务器高性能编程>这本书的时候,发现书上写了这么一句话: 书上说,处于 TIME_WAIT 状态的连接,在收到相同四元组的 SYN ...
- Oracle之数据库的连接
Oracle 默认用户 数据库创建完毕后,需要设置数据库的默认用户.Oracle中为管理员预置了两个用户分别是SYS和SYSTEM.SYS的初始密码为Oracle安装时设置的数据库口令 admin,在 ...
- Windows Server 2012 在桌面上显示”我的电脑”
转至:https://jingyan.baidu.com/article/f25ef2544f6883482c1b82e5.html Windows Server 2012 沒有快捷方式显示我的电脑到 ...
- 使用Xshell连接VMware上的Linux虚拟机
转至:https://www.cnblogs.com/yenengfeng/p/13684265.html 虚拟机自己安装好,这边直接说步骤.有借鉴这篇文章 https://www.cnblogs.c ...
- springMVC 调查问卷系统 record
Maven下的依赖包有两个 spring-web和springWebMVC springwebMVC包含spring-web依赖, 但是spring-web的等级大于Spring-webmvc 没有 ...
- python浅拷贝与深拷贝浅析
首先我们要明确,python中大多数都是浅拷贝,我们先说原因: 1.时间花费更少 2.内存更小 3.效率更高,浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高. 容器(如列表)切片是浅拷贝
- GBDT 梯度提升决策树简述
首先明确一点,gbdt 无论用于分类还是回归一直都是使用的CART 回归树.不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练 ...