Nginx网络架构实战学习笔记(三):nginx gzip压缩提升网站速度、expires缓存提升网站负载、反向代理实现nginx+apache动静分离、nginx实现负载均衡...

news/2024/5/19 7:41:27/文章来源:https://blog.csdn.net/as403045314/article/details/101337425

文章目录

  • nginx gzip压缩提升网站速度
  • expires缓存提升网站负载
  • 反向代理实现nginx+apache动静分离
  • nginx实现负载均衡

nginx gzip压缩提升网站速度

网页内容的压缩编码与传输速度优化
我们观察news.163.com的头信息
请求:

Accept-Encoding:gzip,deflate,sdch

响应:

Content-Encoding:gzip
Content-Length:36093

再把页面另存下来,观察,约10W字节,实际传输的36093字节
原因-------就在于gzip压缩上.

原理:
浏览器—请求----> 声明可以接受 gzip压缩 或 deflate压缩 或compress 或 sdch压缩
从http协议的角度看–请求头 声明 acceopt-encoding: gzip deflate sdch (是指压缩算法,其中sdch是google倡导的一种压缩方式,目前支持的服务器尚不多)
服务器–>回应—把内容用gzip方式压缩(类似于二进制文件)---->发给浏览器
浏览<-----解码gzip-----接收gzip压缩内容----

推算一下节省的带宽:
假设 news.163.com PV 2亿
210^8 * 910^4 字节 ==
210^8 * 9 * 10^4 * 10^-9 = 12K*G = 18T
节省的带宽是非常惊人的

gzip配置的常用参数

gzip on|off;  #是否开启gzip
gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)
gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA 什么样的Uri不进行gzip
gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在)
gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_proxied          # 设置请求者代理服务器,该如何缓存内容
gzip_types text/plain  application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css,html是默认的可以不写
gzip_vary on|off  # 是否传输gzip压缩标志

例子

配置可以写在http、server、location中都可以
,以server为例

server{listen 80;gzip on;gzip_budders 32 4k;gzip_comp_level 6;gzip_min_length 200;gzip_type text/css text/xml/ application/x-javascript...
}

如果文件太小,压缩不会生效。

注意:

  1. 图片/mp3这样的二进制文件,不必压缩,因为压缩率比较小, 比如100->80字节,而且压缩也是耗费CPU资源的,因为图片/MP3是二进制文件,压缩率很小,文本文件压缩率很高。
  2. 比较小的文件不必压缩。

expires缓存提升网站负载

nginx的缓存设置 提高网站性能
对于网站的图片,尤其是新闻站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存.
可以, 用到 nginx的expires设置 .
nginx中设置过期时间,非常简单,
在location或if段里,来写.
格式
expires 30s;
expires 30m;
expires 2h;
expires 30d;
例子:
注意:这里的正则匹配,下面只需要访问192.168.11.xx即可,虽然没有访问具体的图片,但是页面中有,即这列的匹配其实不只是匹配地址栏,是通过前端页面调试后的network里的所有东西。

locatin ~ image{
//location ~* \.(jpg|jpej|gif|png)就会匹配任何图片,但是如果
//location ~* \.(jpg|jpej|gif|png|)最后的”|“,相当于|”“,即只要访问,包括
//”.“,比如index.html,jquery.js等都能匹配上。root html;//1天expires 1d;
}

在这里插入图片描述
可以看到上图中的cache-control 是一天的秒数,即缓存1天;date是十月一号;expires,是十月二号,即过期时间是十月二号。
在这里插入图片描述
虽然上限的jquery.js也有from cache,但是点进去查看详细信息,只有png有expires,而jquery.js没有。


(注意:服务器的日期要准确,如果服务器的日期落后于实际日期,可能导致缓存失效)

另: 304 也是一种很好的缓存手段
原理是: 服务器响应文件内容是,同时响应etag标签(内容的签名,内容一变,他也变), 和 last_modified_since 2个标签值
浏览器下次去请求时,头信息发送这两个标签, 服务器检测文件有没有发生变化,如无,直接头信息返回 etag,last_modified_since
浏览器知道内容无改变,于是直接调用本地缓存.
这个过程,也请求了服务器,但是传着的内容极少.
对于变化周期较短的,如静态html,js,css,比较适于用这个方式

反向代理实现nginx+apache动静分离

nginx反向代理服务器+负载均衡
用nginx做反向代理和负载均衡非常简单,
支持两个用法 1个proxy, 1个upstream,分别用来做反向代理,和负载均衡
以反向代理为例, nginx不自己处理php的相关请求,而是把php的相关请求转发给apache来处理.
在这里插入图片描述

----这不就是传说的”动静分离”,动静分离不是一个严谨的说法,叫反向代理比较规范.

修改配置文件

location ~ \.php{//全部注释掉
}

这个时候再去访问 192.xx.xx.xx/test.php,会提示下载,因为此时的php对于nginx来说只是一个可以下载的php文本文件而已。

cd /usr/local/http
vim conf/httpd.conf  //Listen 8080Listen 8080# Virtual hosts//打开这个注释,引入下面即将编辑的配置文件Include conf/extra/httpd-vhosts.conf//将所有的允许覆盖<Directory />AllowOverride all//将Deny from all 改为allow from allAllow from all<Directory>
vim conf/extra/httpd-vhosts.confNameVirtualHost *:8080//配置虚拟主机<VirtualHost *:8080>	DocumentRoot ”/usr/local/nginx/html“ServerName "192.xx.xx.xx"</VirtualHost>./bin/apachectl restart//重启apache

浏览器访问: http://192.xx.x.xx:8080/indexheml
apache配置成功
设置反向代理

//之前的依赖是nginx,这里重新添加依赖
cd php-5.4.19
make clean ./configure  --prefix=/usr/local/fastphp \
--with-mysql=mysqlnd \
--enable-mysqlnd \
--with-gd \
--enable-gd-native-ttf \
--enable-gd-jis-conv
//一定要这一行,说明是fpm形式运行
//为什么一定要用fpm形式,因为php和nginx是两个独立的进程
//--enable-fpm
//如果安装过程中穿什么问题就把/usr/local/fastphp \文件删除重新开始//将--enable-fpm替换为下面这句话,--enable-fpm意思是php是一个独立进程,
//下面这句话的意思是php是apache的一个模块
--prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxscd /usr/local/nginx
vim conf/nginx.conf
//修改为
location ~ \.php{proxy_pass 192.xx.xx.xx:8080
}

浏览器访问:http://192.xx.xx.xx/test.php
查看apache日志

more /usr/local/httped/logs/dummy-host.example.com-access.log....
...GET /ecshop/index.html ...

说明本次访问是apache完成的。
查看nginx日志

more logs/access.log
...
...GET /image/logo.png

说明图片是nginx访问的

nginx实现负载均衡

如果:

location ~ \.php{proxy_pass 192.xx.xx.xx:8080proxy_pass 192.xx.xx.xx:8081
}

执行reload配置文件,发现报错,因为proxy_pass只允许配置一个

反向代理后端如果有多台服务器,自然可形成负载均衡,
但proxy_pass如何指向多台服务器?

把多台服务器用 upstream指定绑定在一起并起个组名,
然后proxy_pass指向该组

//添加上游服务器
upstream imgserver{server 192.xx.xx.xx:81  weight=1(权重) max_fails=2 (两次连不上就算失败了)fail_time=3(几秒钟算是服务器连不上);server 192.xx.xx.xx:82  weight=1(权重) max_fails=2 (两次连不上就算失败了)fail_time=3(几秒钟算是服务器连不上);
}
//添加新的虚拟主机
server{listen 81;server_name localhost;root html/image;access_log logs/81-access.log mian;
}
server{listen 82;server_name localhost;root html/image;access_log logs/82-access.log mian;
}
//配置完上面两个访问 http://192.xx.xx.xx:81(82)/logo.png,检验是否能够成功访问
//下面是原来的80虚拟主机
server{listen 80;location ~* \.(jpg|jpeg|gif|png)${//将原来代理给主机,变成上面定义的上游服务器,具体的负载均衡在上游服务器进行proxy_pass http://imgserver;}}
./sbin/nginx -s reload

地址栏访问http://xxxx.png
查看日志

cd logs
ls
//发现有如下的目录
81-access.log 82-access.log

只要是图片,就会走这里
不断访问,发现两个日志分布均匀

默认的均衡的算法很简单,就是针对后端服务器的顺序,逐个请求.
也有其他负载均衡算法,如一致性哈希,需要安装第3方模块.
(自行预习nginx第3方模块的安装,以安装ngx_http_upstream_consistent_hash为例)

假如本地的ip为 xxx.xx.xx.100,通过access.log,发现是100,可是通过81-access.log,发现是通过xxx.xx.xx.200访问的
因为后端经过了nginx代理,客户端的ip被前端所接受,但是前端多了代理请求后端,后端只能识别到nginx。
反向代理导致了后端服务器的IP,为前端服务器的IP,而不是客户真正的IP,怎么办?

location ~ \.php${//传递请求给代理的时候,设置头信息,X_Forwarded_For为访问的地址proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://xx.xx.xx.xx:8080;
}
./sbin/nginx -s reload
tail logs/81-access.log
//发现开始显示的还是200,可是每行日志的字后有一个“xxx.xxx.xx.100”,
//即将真实的ip复制给了头信息X_Forwarded_For

转载于:https://www.cnblogs.com/LeesinDong/p/10835300.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_845684.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot打jar包部署在linux(阿里云)服务器上项目启动成功但页面访问时提示无法访问此网站

项目打jar包放在阿里云服务器上&#xff0c;启动成功&#xff0c;但是页面访问时提示无法访问此网站。 问题分析&#xff1a;项目启动成功说明程序没有问题。无法访问可能是端口的问题。首先检查项目中使用的端口号&#xff0c;再检查阿里云服务器是否开启该端口号。如果阿里云…

mysql 视图 中文_Mysql视图-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

1.初识视图 1.视图的概念和作用 什么是视图:是从一个或多个表中导出来的表&#xff0c;它是一种虚拟存在的表&#xff0c;表的结构和数据都依赖于基本表。 作用&#xff1a; 简化查询语句:简化用户的查询操作&#xff0c;使1.初识视图1.视图的概念和作用什么是视图:是从一个或多…

适合前端开发者的一些超级实用小工具及网站合集

本篇文章用于像大家分享一些前端开发者必备的一些工具和网站&#xff0c;目前推荐的较少&#xff0c;但会持续更新~也欢迎各位大佬在评论区下留下你觉得前端人员必备的一些工具或网站等。 一、工具 1.Snipaste Snipaste是一个简单但强大的截图工具&#xff0c;可以复制截图&am…

html 文件调用 网站的绝对路径_前端开发入门——HTML基础标签lt;二gt;

本文创建于2020年8月&#xff0c;以下为正文&#xff1a;HTML是用于创建可以从一个平台移植到另一平台的超文本文档的一种简单标记语言&#xff0c;经常用来创建web页面、HTML是制作网页的基础&#xff0c;我们在网络营销种讲的静态网页&#xff0c;就是以HTML为基础制作的网页…

php网站模板文件名,thinkphp5因模板文件名在windows服务器正常在linux服务器报错问题...

最近微构网络接手了一个从其他团队转移过来的一个项目&#xff0c;因为客户之前的服务团队解散了。在交接过程中客户描述了一些问题&#xff0c;其中一个基础问题就是说这个系统只能在windows系统里面运行&#xff0c;而在centos等linux系统中运行不了&#xff0c;直接出现报错…

网课查题公众号/网站制作方法

网课查题公众号/网站制作方法获取api接口复制token&#xff0c;输入自定义id&#xff0c;确认授权即可下载网站查题源码此教程使用的方法可免费实现公众号/网站查题功能 获取api接口 php务必设置成php5.6 否则可能出现查题无响应现象 获取api token地址&#xff1a; 复制tok…

为什么要选择PHP开发网站,PHP有什么优势?

http://www.weeeb.net/c1032.html 在打算开发一个网站时&#xff0c;选择什么语言&#xff0c;是首先需要面对的问题。目前主流的WEB开发语言有ASP.NET、PHP、JSP; 作为MS上世纪老将ASP&#xff0c;就不再提及&#xff0c;如果是因为维护方面的原因而必须使用&#xff0c;可考…

Bootstrap Jetstrap-快速构建你的网站

http://www.iteye.com/topic/1126947 原文地址&#xff1a;Bootstrap & Jetstrap-快速构建你的网站 Boostrap来自于Twitter&#xff0c;是一个基于html&#xff0c;css&#xff0c;javascript的时尚的、直观的、强大的流行前端框架及交互组件集&#xff0c;可用于快速&…

21个免费的UI界面设计工具、资源及网站

本文将介绍一些UI界面与设计使用的元素、软件和网站。内容很丰富&#xff0c;适合用户体验设计师、界面设计师、产品设计师、JS前段开发、手机产品设计以及iPad和平板电脑产品设计等使用。 Lumzy 官方地址&#xff1a;http://www.lumzy.com/ Lumzy是一个网站应用和原型界面制作…

分享实用福利网站

BDY搜 这是一个专注于资源搜索的平台&#xff0c;非常的良心&#xff0c;而且基本上什么类型的资源都有&#xff08;随便搜索一个“PPT模板”你看看效果&#xff0c;再也不用去公共号集赞领取模板了&#xff09; 传送地址&#xff1a;http://www.bdyso.com ZD423 超多实用的…

网站数据挖掘与分析:系统方法与商业实践 宋天龙 著

网站数据整合的范畴 网站数据整合的范畴指的是整合的数据范围&#xff0c;从数据在企业中不同的支持作用来看&#xff0c;数据整合范畴包括业务数据整合、IT数据整合和职能数据整合&#xff1b;除了企业内部数据外&#xff0c;还包括 企业外部数据&#xff0c;如市场数据、行业…

到外国的网站写英语留言

最近flash sandy官方博客以为被黑了&#xff0c;今天去上了 原来是服务器出了点问题。现在修复了&#xff0c;哈哈&#xff0c;留了一个英语给他们&#xff0c;不过他们应该还是很难看&#xff0c;中国式的语言&#xff0c;但是总的来讲&#xff0c;flashsandy 还是算一个不错的…

优质网站分享,无需下载

今天我和大家分享几个优质的网站&#xff0c;不用我们下载软件&#xff0c;十分省心方便。有需要的朋友就将这些网站收藏起来吧。 1、Pexels Pexels 是一个的免费高清图片网站。打开它的主页&#xff0c;中间一个输入框&#xff0c;下面会出现搜索热门的关键词、图片&#xff0…

Flash与组件:国外收费组件网站

http://www.flashcomponents.net/index.html 今天无意中光顾了这个国外flash组件网站&#xff0c;虽然基本上上都是收费但是可给我们提供一些灵感&#xff0c;同时也让我们扩展视野是个不错的平台。国内也是非常少见&#xff0c;有这样的情况。

cdns个人博客asp_新手如何用wordpress建站之博客网站建站流程

wordpress是目前世界范围内数一数二的建站程序&#xff0c;它是由PHP语言开发而成一套博客系统&#xff0c;全球范围内的站点有30%的站点都建立wordpress程序上&#xff0c;但是随着系统程序的不断升级更新&#xff0c;wordpress已经不仅限于博客站点的建站&#xff0c;很多企业…

怎么知道 网站是否直接明文保存密码_浏览器已保存密码可以明文显示,小心你的密码泄露...

如今的电脑浏览器&#xff0c;都有保存密码功能。为了方便用户快速登录&#xff0c;它还会自动填充密码。我们打开登录页面&#xff0c;无需任何输入&#xff0c;直接点击登录按钮就行了。说实话&#xff0c;这个功能真的挺实用的&#xff0c;可以避免繁琐的登录操作。相信大部…

PPT模板超多的网站,不用再害怕制作演示文稿了

最近一直有朋友问我&#xff0c;哪里可以下载免费的PPT模板&#xff0c;总是自己新建空白演示文稿实在是太费时间了&#xff0c;下载模板又需要花钱。所以今天我和大家分享几个拥有海量模板的网站&#xff0c;让你月省上千块&#xff0c;既省钱又能提高效率&#xff0c;而且PPT…

分享一些实用的网站给大家

大家平时办公的时候都会需要一些素材吧&#xff0c;接下来我就来分享一些实用的网站给大家。 51PPT模板 51PPT网内置了上万个PPT模板、上千个PPT图片以及众多的PPT图表、PPT特效、PPT教材等资源&#xff0c;并且每天都会更新办公资源网 这是一款职场人手必备的办公资源网站&…

免费php系统下载资源网,PbootCMS(开源免费PHP建站系统)

PbootCMS开源免费PHP建站系统是一套高效、简洁、强悍的可免费商用的PHPCMS源码&#xff0c;能够满足各类企业网站开发建设的需要&#xff0c;系统采用简单到想哭的模板标签&#xff0c;只要懂HTML就可快速开发企业网站。相关软件软件大小版本说明下载地址PbootCMS(开源免费PHP建…

趣味网站分享,让你爱不释手

今天我就给大家分享几个有趣又实用的网站&#xff0c;每一个都值得体验&#xff0c;快来看看吧&#xff01; 分享一&#xff1a;今天吃什么 作为一个打工仔&#xff0c;每天都要思考的问题就是今天吃什么。有了这个工具&#xff0c;就不用再纠结到底要吃什么了&#xff0c;它会…