1 前端为啥学习 Nginx
-
据统计,世界上每 3 个⽹站中就有⼀个使⽤ Nginx
-
市场上使⽤情况:阿⾥( Tnginx )、腾讯、百度等,这是全球反向代理服务器中排名
-
前端-后端-架构-运维基本都离不开 Nginx
总之一句话:世界流行,大厂在用,能涨工资
2 需要的前置知识
- linux 基础知识
3 Nginx 初步认识
3.1 什么是 Nginx
- 官⽹:nginx.org/
- 是⼀个⾼性能的 [ HTTP ] 和 [ 反向代理 ] web服务器
- Nginx代码完全⽤ [ C语⾔ ] 从头写成
- 兼容系统:Mac/Windows/Linux
3.2 为啥用 Nginx
-
社区活跃
-
⾼性能-⽀持单机千万级连接
-
强⼤的第三⽅库⽀持
-
功能强⼤:负载均衡、静态⽂件服务器、⽀持多种协议 https、POP3 等等
3.3 正向代理服务器与反向代理服务器
- 正向代理服务器
-
客户端和⽬标服务器之间的服务器,客户端向代理发送⼀个请求指定⽬标服务器,然后代理向⽬标服务器请求并获得内容,并返回给客户端,平时说的代理服务器⼀般是正向代理服务器
-
核⼼:⽤户知道⾃⼰访问的⽬标服务器
-
场景:vpn、访问原来⽆法访问的⽹站, ⽐如国外的⼀些站点
-
-
反向代理服务器
-
客户端和⽬标服务器之间的服务器,客户端向代理发送⼀个请求,然后代理向⽬标服务器请求并获得内容,并返回给客户端。反向代理隐藏了真实的服务器
-
核⼼:客户端不知道要访问的⽬标服务器是哪台服务器,代理会根据⼀定的策略选择⼀个真实的服务器进⾏请求
-
场景:访问淘宝,知道访问的域名是 taobao.com, Nginx 分发给对应的业务进行处理
-
4 Nginx 实操
4.1 Nginx 安装
-
购买云服务器进行安装
-
本地虚拟机进行安装
-
下载压缩包 并上传 nginx.org/en/download…
-
安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
-
创建⼀个⽂件夹,上传本地提供的nginx包 解压命令 tar -zxvf nginx-1.18.0.tar.gz
-
执行配置命令 ./configure 编译 make 安装 make install
-
默认安装路径 /usr/local/nginx
-
切换到 Nginx 目录 cd /usr/local/nginx/sbin 执行运行命令 ./nginx
-
防⽕墙开放端⼝,阿⾥云⽹络安全组配置 80 端⼝
-
-
windows 常见工具
-
连接远程服务器 putty,xshell, security CRT
参考资料 jingyan.baidu.com/article/e75… www.jb51.net/softjc/8823…
-
远程连接文件上传 winscp
-
-
mac 常见工具
-
连接远程 通过终端登录
-
远程连接上传⽂件 filezilla
-
4.2 绑定域名到服务器 IP 上
- 可以看看我自己的腾讯云服务器 IP
- 可以在腾讯云花钱直接申请域名也可以在 freenom 上申请免费的域名(需要科学上网),下面绑定的都是上面提到的云服务器 IP
- 注意 需要防火墙开放 80 端口 或者腾讯云网络安全组配置
4.3 Nginx 目录介绍
conf # 所有配置⽂件⽬录
nginx.conf # 默认的主要的配置⽂件
nginx.conf.default # 默认模板
html # 这是编译安装时 Nginx 的默认站点⽬录
50x.html # 错误⻚⾯
index.html # 默认⾸⻚
logs # nginx 默认的⽇志路径,包括错误⽇志及访问⽇志
error.log # 错误⽇志
nginx.pid # Nginx 启动后的进程 id
access.log # Nginx 访问⽇志
sbin # nginx 命令的⽬录
nginx # 启动命令
-
Nginx 常见命令
是要在 /etc/nginx/sbin 执行 ./nginx 才会有效 ./nginx # 默认配置⽂件启动 ./nginx -s reload # 重启,加载默认配置⽂件 ./nginx -c /usr/local/nginx/conf/nginx.conf # 启动指定某个配置⽂件 ./nginx -s stop # 停⽌ # 关闭进程,Nginx 有 master process 和 worker process,关闭 master 即可 ps -ef | grep "nginx" kill -9 PID
4.4 Nginx 核⼼之配置⽂件剖析
配置文件分为三大模块
-
全局配置
-
server 主机设置
-
location( URL 匹配特定位置的设置)
可以打开 nginx.conf.default,这个是默认的配置模板,每次更改配置都可以复制这份出来改 然后更改文件名为 nginx.conf。
4.3 搭建前端静态服务器
-
虚拟主机的概念
- 指在⼀台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是⼀个虚拟主机,每台虚拟主机都可以对外提供 Web 服务,并且互不⼲扰,就类似虚拟机
- 利⽤虚拟主机把多个不同域名的⽹站部署在同⼀台服务器上,节省了服务器硬件成本和相关的维护费⽤
就像图片显示的 2 个域名都是指向一个 IP 地址,但是都能对外提供 web 访问服务,配置如下
server {
listen 80; server_name bob.coder996.cf; location / { # 指定网页路径 root /usr/local/nginx/html; index bob.html; }
}
server {
listen 80; server_name www.coderrao.cf; location / { root html; index bob.html index.htm; }
} 修改完配置一定要在 Nginx sbin 目录下执行 ./nginx -s reload 命令才会生效
4.4 搭建图片服务器
-
图片服务器
-
学 javaweb、node、或者其他基础 web 项⽬,基本都是图⽚上传到项⽬本身
-
公司⼀般会使⽤图⽚服务器或者云⼚商提供的 CDN
-
-
使⽤流程
- 前端提交图⽚ -> 后端处理 -> 存储到图⽚服务器 -> 拼接好访问路径存储到数据库
-
修改配置文件 先在 /usr/local/software/img/ 图片下面放置两张图片 mountain.jpg 和 sea.jpg
server { listen 80; server_name www.coderrao.cf; location /app/img { alias /usr/local/software/img/; } }
4.5 挖掘 accessLog ⽇志
-
Nginx 访问⽇志的⽤处
-
统计站点访问 IP 来源、某个时间段的访问频率
-
查看访问最频的⻚⾯、Http 响应状态码、接⼝性能
-
接⼝秒级访问量、分钟访问量、⼩时和天访问量
-
-
默认配置
# log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';
-
访问案例
150.255.37.51 - - [09/May/2022:15:52:38 +0800] "GET /js/tween.min.js HTTP/1.1" 200 4882 "https://bob.coder996.cf/" "Mozilla/4.047745454 Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)"
-
解析
$remote_addr 对应的是真实⽇志⾥的 150.255.37.51 ,即客户端的 IP。 $remote_user 对应的是第⼆个中杠 “-”,没有远程⽤户,所以⽤ “-” 填充。 [ $time_local ]对应的是 [ 09/May/2022:15:52:38 +0800 ]。 “$request” 对应的是 "GET /js/tween.min.js HTTP/1.1"。 $status 对应的是 200 状态码。 $body_bytes_sent 对应的是 4882 字节,即响应 body 的⼤⼩。 “$http_referer” 对应的是 ”https://bob.coder996.cf/“,若是直接打开域名浏览的时, referer 就会没有值,为 ”-“。 “$http_user_agent” 对应的是 ”Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)”。 “$http_x_forwarded_for” 对应的是 ”-“ 或者空。
-
查看访问最频繁的前 100 个 IP
cat access.log | awk '{print $1}' | sort -n|uniq -c | sort -rn | head -n 100
默认的日志在 /etc/nginx/logs 目录下,使用 awk 命令
前面为访问次数 后面为 IP 地址
-
统计访问最多的 url 前 20 名
cat access.log |awk '{print $7}'| sort | uniq -c | sort -rn | head -20 | more
-
awk 基础
awk 是⽂本处理⼯具,默认按照空格切分,$N 是切割后第 N 个,从 1 开始 sort 命令⽤于将⽂本⽂件内容加以排序, 默认将文本文件的第一列以 ASCII 码的次序排列 -n 按照数值排,-r 按照倒序来排 案例的 sort -n 是按照第⼀列的数值⼤⼩进⾏排序,从⼩到⼤,倒序就是 sort -rn uniq 去除重复出现的⾏列, 当重复的行并不相邻时,uniq 命令是不起作用的 , 一般与 sort 命令结合使用 -c 在每列旁边显示该⾏重复出现的次数。
-
统计接⼝响应耗时
-
⽇志格式增加 $request_time
从接受⽤户请求的第⼀个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时 间、输出响应数据时间 $upstream_response_time:指从 Nginx 向后端建⽴连接开始到接受完数据然后关闭连接为 ⽌的时间 $request_time ⼀般会⽐upstream_response_time ⼤,因为⽤户⽹络较差,或者传递数据 较⼤时,前者会耗时⼤很多
-
-
配置⾃定义⽇志格式
log_format main '$remote_addr - $remote_user [ $time_local ] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time'; server { listen 80; server_name www.coderrao.cf; # 指定输出日志位置 和 模板 access_log logs/host.access.log main; location / { root html; index bob.html index.htm; } location /app/img { alias /usr/local/software/img; } }
进行路径访问后,查看 host.access.log
可以看到最后 $request_time 大多数为 0.000 我们可以修改来模拟访问时间,最后通过命令筛选出来
cat host.access.log| awk '($NF > 2) {print $7}' | sort -n | uniq -c | sort -nr | head -5
备注:$NF 表示最后⼀列, awk '{print $NF}'
4.6 负载均衡策略
-
负载均衡(Load Balance)
-
分布式系统中⼀个⾮常重要的概念,当访问的服务具有多个实例时,需要根据某种“均衡”的策略决定请求发往哪个节点,这就是所谓的负载均衡
-
原理是将数据流量分摊到多个服务器执⾏,减轻每台服务器的压⼒,从⽽提⾼了数据的吞吐量
-
-
负载均衡的种类
-
通过硬件来进⾏解决,常⻅的硬件有 NetScaler、F5、Radware 和 Array 等商⽤的负载均衡器,但⽐较昂贵
-
通过软件来进⾏解决,常⻅的软件有 LVS、Nginx 等,它们是基于 Linux 系统并且开源的负载均衡策略
-
⽬前性能和成本来看,Nginx 是⽬前多数公司选择使⽤的
-
-
环境准备
-
安装 JDK 并配置环境变量, 并立即生效
-
准备好 2 个 jar 包,分别监听 8080 和 8081 端口
-
启动项目,并且在后台运行
-
-
nginx.conf 配置
upstream lbs { # 43.129.29.223 为远程服务器的 IP, 两个端口分别对应 2 个运行中的运用 server 43.129.29.223:8080; server 43.129.29.223:8081; } location /api { proxy_pass http://lbs; proxy_redirect default; } 当我们 访问 /api/ 的路径时就会转发到 http://43.129.29.223:8080 或者 http://43.129.29.223:8081 上
-
Nginx 常⻅的负载均衡策略
-
节点轮询(默认)
-
简介:每个请求按顺序分配到不同的后端服务器
-
场景:会造成可靠性低和负载分配不均衡,适合静态⽂件服务器
-
-
weight 权重配置
-
简介:weight 和访问⽐率成正⽐,数字越⼤,分配得到的流量越⾼
-
场景:服务器性能差异⼤的情况使⽤
upstream lbs { server 43.129.29.223:8080 weight = 5; server 43.129.29.223:8081 weight = 10; }
-
-
ip_hash(固定分发)
-
简介:根据请求按访问 IP 的 hash 结果分配,这样每个⽤户就可以固定访问⼀个后端服务器
-
场景:服务器业务分区、业务缓存、Session 需要单点的情况
upstream lbs { ip_hash; server 43.129.29.223:8080; server 43.129.29.223:8081; }
-
-
upstream 还可以为每个节点设置状态值
-
server 43.129.29.223:8080 down;
- down 表示当前的 server 暂时不参与负载
-
server 192.168.159.133:8080 backup;
- backup 其它所有的⾮ backup 机器 down 的时候,会请求 backup 机器,这台机器平时压⼒是最轻的,配置也会相对低
-
-
-
Nginx 探测后端节点可⽤性
-
如果某个应⽤挂了,请求不应该继续分发过去
-
max_fails 允许请求失败的次数,默认为 1 当超过最⼤次数时就不会请求
-
fail_timeout : max_fails 次失败后,暂停的时间,默认:fail_timeout 为 10s
-
参数解释
-
max_fails = N 设定 Nginx 与后端节点通信的尝试失败的次数
-
在 fail_timeout 参数定义的时间内,如果失败的次数达到max_fails,Nginx 就将这个节点标记不可⽤
-
在下⼀个 fail_timeout 时间段到来前,服务器不会再被尝试
-
失败的尝试次数默认是 1,如果设为 0 就会停⽌统计尝试次数,认为服务器是⼀直可⽤的
-
-
-
具体什么是 nginx 认为的失败呢
-
可以通过指令 proxy_next_upstream 来配置什么失败的尝试
-
注意默认配置时,http_404 状态不被认为是失败的尝试
-
-
配置如下
upstream lbs { server 43.129.29.223:8080 max_fails = 2 fail_timeout = 60s ; server 43.129.29.223:8081 max_fails = 2 fail_timeout = 60s; } location /api { proxy_pass http://lbs; proxy_next_upstream error timeout http_500 http_503 http_404; }
-
4.7 Nginx 经典应用
-
全局异常兜底数据返回
-
简介:Nginx ⾃定义全局异常 json 数据
-
任何接⼝都是可能出错,4xx、5xx 等
-
如果业务没有做好统⼀的错误管理,直接暴露给⽤户,⽆疑是看不懂
-
所以假如后端某个业务出错,nginx 层也需要进⾏转换
-
让前端知道 Http 响应是 200,其实是将错误的状态码定向⾄ 200,返回了全局兜底数据
-
配置如下
location / { proxy_pass http://lbs; proxy_redirect default; # 存放⽤户的真实 ip proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 如果发生下面的情况 服务挂了,希望重新启动其他服务,实现高可用 proxy_next_upstream error timeout http_503 non_idempotent; # 开启错误拦截配置,⼀定要开启 proxy_intercept_errors on; } # 不加 = 200,则返回的就是原先的 http 错误码;配上后如果出现 500 等错误都返回给⽤户 200 状态,并跳转⾄ /default_api error_page 404 500 502 503 504 =200 /default_api; location = /default_api { default_type application/json; return 200 '{"code":"-1","msg":"invoke fail, not found "}'; }
-
-
Nginx 封禁恶意 IP
-
⽹络攻击时有发⽣
-
TCP 洪⽔攻击、注⼊攻击、DOS 等
-
⽐较难防的有 DDOS 等
-
-
数据安全,防⽌对⼿爬⾍恶意爬取,封禁 IP
-
封禁 IP
-
linux server 的层⾯封 IP:iptables
-
Nginx 作为⽹关,可以有效的封禁 IP ,⽅式多种 ( 但 req 还是会打进来,让nginx 返回 403, 占⽤资源 )
单独⽹站屏蔽 IP 的⽅法,把 include xxx; 放到⽹址对应的在 server{} 语句块,虚 拟主机 所有⽹站屏蔽 IP 的⽅法,把 include xxx; 放到 http {} 语句块。 nginx 配置如下: http { # .... include blacklist.conf; } location / { proxy_pass http://lbs; proxy_redirect default; } #blacklist.conf ⽬录下⽂件内容 deny 192.168.159.2; deny 192.168.159.32;
-
-
拓展-⾃动化封禁思路
-
编写 shell 脚本
-
AWK 统计 access.log,记录每秒访问超过 60 次的 IP,然后配合 Nginx 或 iptables 进⾏封禁
-
crontab 定时跑脚本
-
-
-
Nginx 配置解决浏览器跨域
-
跨域:浏览器同源策略 1995 年,同源政策由 Netscape 公司引⼊浏览器。⽬前,所有浏览器都实⾏这个政策。 最初,它的含义是指,A ⽹⻚设置的 Cookie,B ⽹⻚不能打开,除⾮这两个⽹⻚"同源"。所谓"同源"指的是"三个相同"
协议相同 http https 域名相同 www.baidu.com 端⼝相同 80 81 ⼀句话:浏览器从⼀个域名的⽹⻚去请求另⼀个域名的资源时,域名、端⼝、协议任⼀不同, 都是跨域 浏览器控制台跨域提示: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access
-
解决方案
-
JSONP
-
Http 响应头配置允许跨域
-
nginx 层配置
-
程序代码中处理通过拦截器配置
-
-
Nginx 开启跨域配置
-
location 下配置
location / { add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive, User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With, If-Modified-Since,Cache-Control,Content-Type,Range'; add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS'; # 如果预检请求则返回成功,不需要转发到后端 if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; return 200; } }
-
-
-
Nginx 的 location 规则
-
正则表达式
^ 以什么开始 $ 以什么结束 ^/api/user$
-
-
location 路径匹配
-
语法 location [ = | ~ | ~ ( 中间没有空格 )* | ^~ ] uri { ...... }
-
location = /uri = 表示精准匹配,只要完全匹配上才能⽣效
-
location /uri 不带任何修饰符,表示前缀匹配
-
location ^~ /uri/ 匹配任何以 /uri/ 开头的任何查询并且停⽌搜索
-
location / 通⽤匹配,任何未匹配到其他location的请求都会匹配到
-
正则匹配
-
区分⼤⼩写匹配(~)
-
不区分⼤⼩写匹配(~*)
-
-
优先级(不要写复杂,容易出问题和遗忘)
-
精准匹配 > 字符串匹配( 若有多个匹配项匹配成功,那么选择匹配⻓的并录 ) > 正则匹配
-
-
-
nginx 的 rewrite 规则和应⽤
-
重写 - 重定向
-
rewrite 地址重定向,实现 URL 重定向的重要指令,他根据 regex ( 正则表达式 )来匹配内容跳转
-
语法 rewrite regex replacement[flag]
rewrite ^/(.*) https://www.coderrao.cf/$1 permanent # 这是⼀个正则表达式,匹配完整的域名和后⾯的路径地址 # replacement 部分是 https://www.coderrao.cf/$1,$1 是取⾃ regex 部分 () ⾥的内容
-
常⽤正则表达式:
字符 描述 ^ 匹配输⼊字符串的起始位置 $ 匹配输⼊字符串的结束位置 * 匹配前⾯的字符零次或者多次 + 匹配前⾯字符串⼀次或者多次 ? 匹配前⾯字符串的零次或者⼀次 . 匹配除 “\n” 之外的所有单个字符 ( pattern ) 匹配括号内的 pattern -
rewrite 最后⼀项 flag 参数
标记符号 说明 last 本条规则匹配完成后继续向下匹配新的 location URI 规则 break 本条规则匹配完成后终⽌,不在匹配任何规则 redirect 返回 302 临时重定向 permanent 返回 301 永久重定向 -
应⽤场景
-
⾮法访问跳转,防盗链
-
⽹站更换新域名
-
http 跳转 https
-
不同地址访问同⼀个虚拟主机的资源
-
-
-
nginx 配置 websocket 反向代理
-
配置
server { listen 80; server_name www.coderrao.cf; location / { proxy_pass http://lbs; proxy_read_timeout 300s; //websocket 空闲保持时⻓ proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } }
-
核⼼是下⾯的配置 其他和普通反向代理没区别, 表示请求服务器升级协议为 WebSocket
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;
-
服务器处理完请求后,响应如下报⽂ # 状态码为 101
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: upgrade
-
-
服务端缓存前置
-
常⻅的开发⼈员控制的缓存分类
-
数据库缓存
-
应⽤程序缓存
-
Nginx ⽹关缓存
-
前端缓存
-
-
-
让后端结果缓存离⽤户更进⼀步
-
/root/cache 本地路径,⽤来设置 Nginx 缓存资源的存放地址
-
levels = 1:2 默认所有缓存⽂件都放在上⾯指定的根路径中,可能影响缓存的性能,推荐指定为 2 级⽬录来存储缓存⽂件;1 和 2 表示⽤ 1 位和 2 位 16 进制来命名⽬录名称。第⼀级⽬录⽤ 1 位 16 进制命名,如 a ;第⼆级⽬录⽤ 2 位 16 进制命名,如 3a。所以此例中⼀级⽬录有 16 个,⼆级⽬录有 16 * 16 = 256 个,总⽬录数为 16 * 256 = 4096 个。当 levels = 1 : 1 : 1 时,表示是三级⽬录,且每级⽬录数均为 16 个
-
key_zone 在共享内存中定义⼀块存储区域来存放缓存的 key 和 metadata
-
max_size 最⼤ 缓存空间, 如果不指定会使⽤掉所有磁盘空间。当达到 disk 上限后,会删除最少使⽤的 cache
-
inactive 某个缓存在 inactive 指定的时间内如果不访问,将会从缓存中删除
-
proxy_cache_valid 配置 nginx cache 中的缓存⽂件的缓存时间, proxy_cache_valid 200 304 2m 对于状态为 200 和 304 的缓存⽂件的缓存时间是 2 分钟
-
use_temp_path 建议为 off,则 nginx 会将缓存⽂件直接写⼊指定的 cache ⽂件中
-
proxy_cache 启⽤ proxy cache,并指定 key_zone,如果 proxy_cache off 表示关闭掉缓存
-
add_header Nging-Cache "$upstream_cache_status" ⽤于前端判断是否是缓存,miss、hit、expired ( 缓存过期 )、updating ( 更新,使⽤旧的应答 )
-
配置如下
proxy_cache_path /root/cache levels = 1:2 keys_zone = cache : 10m max_size = 1g inactive = 60m use_temp_path = off; server { location / { ... proxy_cache cache; proxy_cache_valid 200 304 10m; proxy_cache_valid 404 1m; proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache "$upstream_cache_status"; } }
-
注意点
-
Nginx 缓存过期影响的优先级进⾏排序为:inactive > 源服务器端Expires/max-age > proxy_cache_valid
-
如果出现 Permission denied 修改 nginx.conf,将第⼀⾏修改为 user root
-
默认情况下 GET 请求及 HEAD 请求会被缓存,⽽ POST 请求不会被缓存,并⾮全部都要缓存,可以过滤部分路径不⽤缓存
-
-
-
Nginx 静态资源压缩
-
对⽂本、js 和 css ⽂件等进⾏压缩,⼀般是压缩后的⼤⼩是原始⼤⼩的 25%
# 开启 gzip,减少我们发送的数据量 gzip on; gzip_min_length 1k; # 4 个单位为 16k 的内存作为压缩结果流缓存 gzip_buffers 4 16k; # gzip压缩⽐,可在 1~9 中设置,1 压缩⽐最⼩,速度最快, # 9 压缩⽐最⼤,速度最慢,消耗 CPU gzip_comp_level 4; # 压缩的类型 gzip_types application/javascript text/plain text/css application/json application/xml text/javascript; # 给代理服务器⽤的,有的浏览器⽀持压缩,有的不⽀持,所以避免浪费不⽀持的也压缩, 所以根据客户端的 HTTP 头来判断,是否需要压缩 gzip_vary on; # 禁⽤ IE6 以下的 gzip 压缩,IE 某些版本对 gzip 的压缩⽀持很不好 gzip_disable "MSIE [1-6]."; # 设置一个路径访问,看是否生效 location /static { alias /usr/local/software/static; }
-
⾯试题:压缩是时间换空间,还是空间换时间?
-
web 层主要涉及浏览器和服务器的⽹络交互,⽽⽹络交互显然是耗费时间的
-
要尽量减少交互次数
-
降低每次请求或响应数据量
-
开启压缩
-
在服务端是时间换空间的策略,服务端需要牺牲时间进⾏压缩以减⼩响应数据⼤⼩
-
压缩后的内容可以获得更快的⽹络传输速度,时间是得到了优化
-
所以是双向的
-
-
-
-
Nginx 配置 Https 证书
-
申请 Https 证书 (可以在购买域名的服务器商免费申请)
-
证书上传至远程服务器
-
删除原先的 Nginx,新增 ssl 模块
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module make make install # 查看是否成功 /usr/local/nginx/sbin/nginx -V
-
再安装好 Nginx 配置 https 证书
server { listen 443 ssl; server_name coderrao.cf; ssl_certificate /usr/local/software/biz/key/4383407_coderrao.cf.pem; ssl_certificate_key /usr/local/software/biz/key/4383407_coderrao.cf.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }
-
Https 访问: 杀掉原先进程,重启 Nginx 防⽕墙关闭或者开放 443 端⼝ ⽹络安全组开放端⼝
- 后面访问网址时,地址栏带把小锁图标,说明配置成功了
-