上海金融网站建设公司/个人接外包项目平台
nginx 基础2
更多干货
-
分布式实战(干货)
-
spring cloud 实战(干货)
-
mybatis 实战(干货)
-
spring boot 实战(干货)
-
React 入门实战(干货)
-
构建中小型互联网企业架构(干货)
-
python 学习持续更新
-
ElasticSearch 笔记
-
kafka storm 实战 (干货)
-
scala 学习持续更新
-
RPC
-
深度学习
-
GO 语言 持续更新
-
nginx 相关文章
概述
-
nginx 相关文章
nginx+php
nginx+php的配置比较简单,核心就一句话----把请求的信息转发给9000端口的PHP进程, 让PHP进程处理 指定目录下的PHP文件.
如下例子:
location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
-
1:碰到php文件,
-
2: 把根目录定位到 html,
-
3: 把请求上下文转交给9000端口PHP进程,
-
4: 并告诉PHP进程,当前的脚本是 $document_root$fastcgi_scriptname
(注:PHP会去找这个脚本并处理,所以脚本的位置要指对)
网页内容的压缩编码与传输速度优化
我们观察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亿
2*10^8 * 9*10^4 字节 ==
2*10^8 * 9 * 10^4 * 10^-9 = 12*K*G = 18T
节省的带宽是非常惊人的
-
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
-
gzip_vary on|off # 是否传输gzip压缩标志gzip配置的常用参数
注意:
-
图片/mp3这样的二进制文件,不必压缩
-
因为压缩率比较小, 比如100→80字节,而且压缩也是耗费CPU资源的.
-
-
比较小的文件不必压缩,
-
nginx的缓存设置 提高网站性能对于网站的图片,尤其是新闻站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存.可以, 用到 nginx的expires设置 .nginx中设置过期时间,非常简单,
在location或if段里,来写.
格式 expires 30s;expires 30m;expires 2h;expires 30d;
(注意:服务器的日期要准确,如果服务器的日期落后于实际日期,可能导致缓存失效)
另: 304 也是一种很好的缓存手段
-
原理是: 服务器响应文件内容是,同时响应etag标签(内容的签名,内容一变,他也变), 和 last_modified_since 2个标签值
-
浏览器下次去请求时,头信息发送这两个标签, 服务器检测文件有没有发生变化,如无,直接头信息返回 etag,last_modified_since
-
浏览器知道内容无改变,于是直接调用本地缓存.
-
这个过程,也请求了服务器,但是传着的内容极少.
-
对于变化周期较短的,如静态html,js,css,比较适于用这个方式
nginx反向代理服务器+负载均衡
-
用nginx做反向代理和负载均衡非常简单,
-
支持两个用法 1个proxy, 1个upstream,分别用来做反向代理,和负载均衡
-
以反向代理为例, nginx不自己处理php的相关请求,而是把php的相关请求转发给apache来处理.
----这不就是传说的”动静分离”,动静分离不是一个严谨的说法,叫反向代理比较规范.
-
反向代理后端如果有多台服务器,自然可形成负载均衡,
-
但proxy_pass如何指向多台服务器?
-
把多台服务器用 upstream指定绑定在一起并起个组名,然后proxy_pass指向该组
-
默认的均衡的算法很简单,就是针对后端服务器的顺序,逐个请求.
-
也有其他负载均衡算法,如一致性哈希,需要安装第3方模块.