一、前言
作为一名前端开发,我们除了需要对node
进行学习以外,对Nginx
进行系统性的学习可以帮助我们定位服务出现问题的、以及快速找到解决方案。学习nginx可以让我们更加清晰前端项目上线的整个流程。前端掌握nginx以下的知识点,就可以轻松应对日常项目服务需求了。
Nginx知识清单
1、nginx的安装和使用
2、模块和基本配置
3、正反向代理应用场景
4、CDN
5、浏览器缓存
6、跨域
7、防盗链
8、rewrite
9、负载均衡集群
二、Nginx优点
1、可以高并发连接
官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。原因,主要是Nginx使用了最新的epoll(Linux2.6内核)和kqueue(freeBSD)网路I/O模型,而Apache使用的是传统的Select模型,其比较稳定的Prefork模式为多进程模式,需要经常派生子进程,所以消耗的CPU等服务器资源,要比Nginx高很多。
2、内存消耗少
Nginx+PHP(FastCGI)服务器,在3万并发连接下,开启10个Nginx进程消耗150MB内存,15MB*10=150MB,开启的64个PHP-CGI进程消耗1280内存,20MB*64=1280MB,加上系统自身消耗的内存,总共消耗不到2GB的内存。
如果服务器的内存比较小,完全可以只开启25个PHP-CGI进程,这样PHP-CGI消耗的总内存数才500MB。
3、成本低廉
购买F5BIG-IP、NetScaler等硬件负载均衡交换机,需要十多万到几十万人民币,而Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费试用,并且可用于商业用途。
BSD开源协议是一个给使用者很大自由的协议,协议指出可以自由使用、修改源代码、也可以将修改后的代码作为开源或专用软件再发布。
4、配置文件非常简单
网络和程序一样通俗易懂,即使,非专用系统管理员也能看懂。
5、支持Rewrite重写
能够根据域名、URL的不同,将http请求分到不同的后端服务器群组。
6、内置的健康检查功能
如果NginxProxy后端的某台Web服务器宕机了,不会影响前端的访问。
7、节省带宽
支持GZIP压缩,可以添加浏览器本地缓存的Header头。
8、稳定性高
用于反向代理,宕机的概率微乎其微。
9、支持热部署
Nginx支持热部署,它的自动特别容易,并且,几乎可以7天*24小时不间断的运行,即使,运行数个月也不需要重新启动,还能够在不间断服务的情况下,对软件版本进行升级。
三、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读取配置的入口。
四、模块和基本配置
一般我们在使用nginx部署重启的时候,很多时候用的比较多的文件是nginx.conf,我们一般都是对这个文件进行修改重启,它是nginx的核心配置文件。下面我们来讲讲这个配置文件。
在这个文件里面我们看到很多配置,我们从大类来看:
1. nginx的进程数,一般我们会设置为CPU总核心数
worker_processes 8;
2. nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误
worker_rlimit_nofile 65535;
3.参考事件模型
events
4.设定http服务器,利用它的反向代理功能提供负载均衡支持
里面的配置有许多,upstream jh.w3cschool.cn、server、location /比较常用
http
负载均衡配置
upstream jh.w3cschool.cn
虚拟主机的配置
server
一般在配置静态资源会有nginx直接读取
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
具体的参数可以移步到:https://www.nginx.cn/doc/
Nginx模块
说到模块,我们一般会将模块分为两种,一种是官方提供的,另外一种是第三方的。
下面我们列举下其中的一些模块:
具体模块前往查看(https://www.nginx.cn/doc/)
模块名称 | 模块作用 |
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的备份文件
nginx常用命令
- 常见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的配置文件正确