Nginx边学边记
出于好记性不如烂笔头的想法,我开启这篇文章(笔记)。
Nginx
使用场景一般有静态资源WEB服务
、代理服务
、负载均衡
、缓存服务
等
快速查找nginx.conf
文件位置
1 | locate nginx.conf |
查找Nginx.conf文件位置,并检验配置文件是否合法
1 | nginx -t |
得到如下:
1 | nginx: the configuration file /etc/nginx/nginx.conf syntax is ok |
重启Nginx
1 | nginx -s reload |
指定配置文件启动Nginx
1 | nginx -c /etc/nginx/nginx.conf |
Nginx ssl证书配置
1 | http { |
证书文件会作为公用实体發送到每台连接到服务器的客戶端,私钥文件作为安全实体,应该被存放在具有一定权限限制的目录文件,并保证 Nginx 主进程有存取权限。
Nginx端口转发
1 | // 当通过 a.zouyifeng.xyz:80 端口访问这个服务器时 |
减少 CPU 运算量
SSL
的运行计算需要消耗额外的CPU
资源,一般多核处理器系统会运行多个工作进程(worker processes ),进程的数量不会少于可用的CPU
核数。SSL
通讯过程中「握手」阶段的运算最占用CPU
资源,有两个方法可以减少每台客户端的运算量:
· 激活keepalive
长连接,一个连接发送更多个请求
· 复用SSL
会话参数,在并行并发的连接数中避免进行多次SSL
『握手』
这些会话会存储在一个SSL
会话缓存里面,通过命令ssl_session_cache
配置,可以使缓存在机器间共享,然后利用客戶端在「握手」阶段使用的seesion id
去查询服务端的session cathe
(如果服务端设置有的话),简化「握手」阶段。
1M 的会话缓存大概包含4000
個会话,默认的缓存超时时间为 5 分钟,可以通过使用ssl_session_timeout
命令设置缓存超时时间。下面是一個拥有10M
共享会话缓存的多核系统优化配置。
日志轮转配置文件,Nginx日志轮转,用于logrotate服务的日志切割1
/etc/logrotate.d/nginx
配置文件,设置http协议的Content的Content-type与扩展名对应关系
1 | /etc/Nginx/mime.types |
Nginx缓存目录
1 | /var/cache/Nginx |
Nginx的日志目录
1 | /var/log/Nginx |
配置过期时间1
2
3
4location ~ .*\.(html|htm)$ {
expires 24h;
root /etc/app;
}
添加过期属性设置后,报文头信息新增cache-control:max-age=86400,不过浏览器可能会有不一样的request header,例如忽略cache-control:max-age=86400,再次请求服务器,选择协商缓存的形式
配置访问控制
基于ip的访问控制 http_access_module
location ~ ^/index.html {
deny 119.128.189.17;
allow all;
}
禁止119.128.189.17的访问并允许其他ip访问
location ~ ^/index.html {
allow 119.128.189.0/24;
deny all;
}
允许119.128.189.0/24的IP段的访问并拒绝其他IP访问
局限:无法真正限制客户端IP,可能只限制住客户端的代理IP,所以Nginx记录中remote_addr不准确
http_x_forward_for = Client IP,Proxy(1),IP,Proxy(2)IP,则可以记录整个请求经过的代理服务器的IP
基于用户的信任登录 http_auth_basic_module
跨站访问1
2
3
4
5location ~ .*\.(html|htm)$ {
add_header Access-Control-Allow-Origin http://www.zouyifeng.xyz;
add_header Access-Control-Allow-Methods GET,POST,PUT;
root /etc/app;
}
防盗链1
2
3
4
5
6location ~ .*\.(jpg|gif)$ {
valid_referers none blocked 119.128.189.0;
if ($invalid_referer) {
return 403
}
}
none 表示允许没有referer信息的
blocked 表示允许没有协议信息的
IP 允许固定的IP访问
如果满足valid_referer,$invalid_referer则为0,反之则为1
代理服务
Nginx可实现http server、mail server、http server、media server等代理服务
正向代理和反向代理的区别在对象不一样
正向代理代理的对象是客户端,如翻墙,
反向代理代理的对象是服务端,代理服务设置在服务器中,客户端也无需关心实际访问的哪台服务器
Nginx中实现代理主要利用proxy_pass
netstat -luntp | grep nginx
proxy_buffering 打开缓冲区,减少io损耗
proxy_set_header
Nginx代理往后端服务发送请求时添加代理的头信息
负载均衡
根据地域模型划分
- 全局负载均衡 GSLB (Global Server Load Balance),实现CDN的全局负载均衡的调度机制,最常用的基于DNS的GSLB,
- 负载均衡 SLB (Server Load Balance),包含
用户节点
,调度节点
,服务节点
,Nginx是典型的SLB
cdn要确保传输延时的最小化,cdn实际上就是通过DNS智能域名解析,请求解析到最近的静态服务器节点


Nginx 通过proxy_pass,对upstream里的服务进行轮询
负载均衡调度状态:
1 | upstream movie_pool{ |
调度算法,包括静态算法(轮询,加权轮询,ip hash)和动态算法(最小连接,加权最小连接)
缓存
大致分为三类型缓存:服务端缓存
、代理缓存
、客户端缓存
如Nginx中涉及的缓存是代理缓存,浏览器中的缓存是客户端缓存,客户端缓存则是指redis
等
利用Nginx的proxy_cache
、proxy_cache_path
、proxy_cache_valid
,指定缓存位置,空间等,缓存时间,对于静态文件进行缓存处理,减少服务器请求压力
Nginx此处把URL以及相关组合当做key,用MD5算法对key进行哈希,得出硬盘上对应的哈希目录路径,且将缓存内容(动态或静态)保存到该目录。