前端掌握Nginx(二)
本文适合觉对nginx感兴趣的小伙伴阅读
欢迎关注前端早茶,与广东靓仔携手共同进阶~
作者:广东靓仔
一、前言
node
进行学习以外,对Nginx
进行系统性的学习可以帮助我们定位服务出现问题的、以及快速找到解决方案。学习nginx可以让我们更加清晰前端项目上线的整个流程。
1、nginx的安装和使用
2、模块和基本配置
3、正反向代理应用场景
4、CDN
5、浏览器缓存
6、跨域
7、防盗链
8、rewrite
9、负载均衡集群
二、Nginx优点
三、Nginx简单安装和使用、Nginx启动
Linux环境
nginx可以在windows上安装使用,也可以在linux系统上使用。主要是linux,这里我们讲讲在linux上安装。
1、首先我们需要确定使用哪个版本的nginx.tar.gz包,可以从这里下载
http://nginx.org/download/
2、解压 // 版本号自行切换
tar -zxvf nginx-1.9.9.tar.gz
3、解压后进入目录
cd nginx-1.9.9
4、执行以下命令 :
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
【Tip: --prefix 标识安装目录,默认/usr/local/nginx】
5、继续执行命令
make && make install
编译安装,到这一步,基本我们的nginx已经安装成功
centos
yum -y install nginx
nginx.conf 文件是nginx总配置文件也是nginx读取配置的入口。
四、模块和基本配置
worker_processes 8;
worker_rlimit_nofile 65535;
events
http
upstream jh.w3cschool.cn
server
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
模块名称 | 模块作用 |
---|---|
http_access_module | 四层基于IP的访问控制,可以通过匹配客户端源IP地址进行限制 |
http_auth_basic_module | 状态页,使用basic机制进行用户认证,在编译安装nginx的时候需要添加编译参数--withhttp_stub_status_module,否则配置完成之后监测会是提示语法错误 |
http_stub_status_module | 状态统计模块 |
http_gzip_module | 文件的压缩功能 |
http_gzip_static_module | 静态压缩模块 |
http_ssl_module | nginx 的https 功能 |
http_rewrite_module | 重定向模块,解析和处理rewrite请求 |
http_referer_module | 防盗链功能,基于访问安全考虑 |
http_proxy_module | 将客户端的请求以http协议转发至指定服务器进行处理 |
stream_proxy_module | tcp负载,将客户端的请求以tcp协议转发至指定服务器处理 |
http_fastcgi_module | 将客户端对php的请求以fastcgi协议转发至指定服务器助理 |
http_uwsgi_module | 将客户端对Python的请求以uwsgi协议转发至指定服务器处理 |
http_headers_module | 可以实现对头部报文添加指定的key与值 |
http_upstream_module | 负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能 |
stream_upstream_module | 后端服务器分组转发、权重分配、状态监测、调度算法等高级功能 |
http_fastcgi_module | 实现通过fastcgi协议将指定的客户端请求转发至php-fpm处理 |
http_flv_module | 为flv伪流媒体服务端提供支持 |
配置文件
conf //nginx所有配置文件目录
nginx.conf //这个是Nginx的核心配置文件,这个文件非常重要,也是我们即将要学习的重点
nginx.conf.default //nginx.conf的备份文件
常见2种启动命令
> nginx //直接nginx启动,前提是配好nginx环境变量
> systemctl start nginx.service //使用systemctl命令启动
常见的4种停止命令
> nginx -s stop //立即停止服务
> nginx -s quit // 从容停止服务 需要进程完成当前工作后再停止
> killall nginx //直接杀死nginx进程
> systemctl stop nginx.service //systemctl停止
3.常见的2种重启命令
> nginx -s reload //重启nginx
> systemctl reload nginx.service //systemctl重启nginx
验证nginx配置文件是否正确
> nginx -t //输出nginx.conf syntax is ok即表示nginx的配置文件正确
五、nginx反向代理、负载均衡
正向代理
-
访问原来无法访问的资源,如Google -
可以做缓存,加速访问资源 -
对客户端访问授权,上网进行认证 -
代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
负载均衡,通过反向代理服务器来优化网站的负载
负载均衡
-
轮询(默认、加权轮询、ip_hash) -
插件(fair、url_hash),url_hash和ip_hash大同小异,一个基于ip一个基于url,就不过多介绍了
默认轮询
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。
# constPolling 作为存放负载均衡的变量
upstream constPolling {
server localhost:10001;
server localhost:10002;
}
server {
listen 10000;
server_name localhost;
location / {
proxy_pass http://constPolling; #在代理的时候接入constPolling
proxy_redirect default;
}
}
加权轮询
通过设置weight,值越大分配率越大 到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
# constPolling 作为存放负载均衡的变量
upstream constPolling {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
server {
listen 10000;
server_name localhost;
location / {
proxy_pass http://constPolling; #在代理的时候接入constPolling
proxy_redirect default;
}
}
权重越大,被访问的概率越大,比如上面就是33.33%和百分66.66%的访问概率 访问的效果:
localhost:10001、localhost:10002、localhost:10002、localhost:10001、localhost:10002、localhost:10002
ip_hash
每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用),并且可以有效解决动态网页存在的session共享问题
upstream constPolling {
ip_hash;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
fair
个人比较喜欢用的一种负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。
安装upstream_fair模块 附上fair安装教程
哪个服务器的响应速度快,就将请求分配到那个服务器上
upstream constPolling {
server localhost:10001;
server localhost:10002;
fair;
}
nginx错误页面配置
Gzip压缩
root /var/www/html/gzip;
# 开启gzip压缩
gzip on;
# http请求版本
gzip_http_version 1.0;
# 设置什么类型的文件需要压缩
gzip_types text/css text/javascript application/javascript image/png image/jpeg image/gif;
六、nginx使用综合场景
2. 自动适配PC/移动端页面
3. 限制只能通过谷歌浏览器访问
七、总结
-
在看源码前,我们先去官方文档复习下框架设计理念、源码分层设计 -
阅读下框架官方开发人员写的相关文章 -
借助框架的调用栈来进行源码的阅读,通过这个执行流程,我们就完整的对源码进行了一个初步的了解 -
接下来再对源码执行过程中涉及的所有函数逻辑梳理一遍
关注我,一起携手进阶
欢迎关注前端早茶,与广东靓仔携手共同进阶~
参考资料:
.https://blog.csdn.net/lishaojun0115/article/details/53200629
.https://blog.csdn.net/u010098159/article/details/81331522
.https://www.cnblogs.com/caicaizi/p/9566192.html