nginx是什么?
nginx是俄罗斯人 Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的一个十分轻量级的HTTP服务器。它是一个高性能的HTTP和反向代理服务器,同时也可以作为IMAP/POP3/SMTP的代理服务器。nginx使用的是BSD许可。
Nginx 以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。
Nginx 因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名。
nginx适合用来做mongrel clusters 的前端 HTTP 响应。
为什么要用nginx,nginx有什么特点?
nginx的特点(https://www.ctolib.com/topics-101000.html):
核心特点:高并发请求的同时保持高效的服务
热部署
低内存消耗
处理响应请求很快
具有很高的可靠性
同时,nginx也可以实现高效的反向代理、负载均衡。
前端可以用nginx做些什么?
搭建静态资源服务器
反向代理分发后端服务(可以和nodejs搭配实现前后端分离)和跨域问题
根据User Agent来重定向站点
开发环境或测试环境切换(切换host)
url重写,使用rewrie规则本地映射
资源内容篡改
获取cookie做分流
资源合并
gzip压缩
压缩图片
sourceMap调试
如何安装nginx?mac安装:
安装brew之后,执行命令:
windows安装
下载: nginx官网
解压运行:解压至 ,运行 (即 ),默认使用80端口,日志见文件夹
关闭: 或
注:以下皆以mac为例。
nginx如何启动、重启、关闭?
查看nginx版本:
启动nginx服务:
方法一:运行命令:
方法二:运行命令:
访问http://localhost:8080,出现如下界面则表示安装成功:
关闭nginx服务:
方法一:运行命令:
方法二:运行命令:
方法三:
运行命令: ,找到master对应的进程号。
快速停止: 或
从容停止:
强制停止所有nginx进程:
重启nginx服务:
方法一:
方法二: 平滑重启命令:
nginx信号控制:
快速关闭
从容关闭
平滑重启,重新加载配置文件
重新打开日志文件,在切割日志时用途较大
平滑升级可执行程序
从容关闭工作进程
如何查看nginx的配置文件nginx.conf的路径和安装路径?
查看配置文件位置和测试配置文件语法:运行命令 :
查看nginx安装路径:因为是使用brew安装的,所以使用brew命令:
nginx.conf基本配置有哪些?
nginx配置文件主要分成四个部分:
main,全局设置,影响其它部分所有设置
server,主机服务相关设置,主要用于指定虚拟主机域名、IP和端口
location,URL匹配特定位置后的设置,反向代理、内容篡改相关设置
upstream,上游服务器设置,负载均衡相关配置
他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。
如下是一份通用的配置和详解:
location如何匹配?
示例:
说明:
以 开头表示精确匹配
开头表示uri以某个常规字符串开头,不是正则匹配
开头表示区分大小写的正则匹配;
开头表示不区分大小写的正则匹配
通用匹配, 如果没有其它匹配,任何请求都会匹配到
优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
如何配置反向代理?
详解:
举例:
简化:
如何配置rewrite?
rewrite功能就是集合正则表达式和标志位实现url重写和重定向。rewrite只能放在server{}、location{}、if(){}块中,并且只能对域名后边的出去传递参数外的字符串起作用。 如URL: ,只对/proxy/sms/task/querydeleted进行重写。
如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。
表明看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:
执行server块的rewrite指令
执行location匹配
执行选定的location中的rewrite指令
如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。
rewrite规则后边,通常会带有flag标志位:
: 相当于Apache的[L]标记,表示完成rewrite
: 停止执行当前虚拟主机的后续rewrite指令集
: 返回 临时重定向,地址栏会显示跳转后的地址
: 返回 永久重定向,地址栏会显示跳转后的地址
和 区别:
一般写在 和 中,而 一般使用在 中
不终止重写后的url匹配,即新的url会再从 走一遍匹配流程,而 终止重写后的匹配
和 都能组织继续执行后面的rewrite指令
rewrite常用正则:
: 匹配除换行符以外的任意字符
: 重复0次或1次
: 重复1次或更多次
: 重复0次或更多次
:匹配数字
: 匹配字符串的开始
: 匹配字符串的介绍
: 重复n次
: 重复n次或更多次
: 匹配单个字符c
: 匹配a-z小写字母的任意一个
可以使用 来进行分组,可以通过 的形式来引用。
示例:
如何配置负载均衡?
示例:
upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
Nginx的负载均衡模块目前支持4种调度算法:
。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
。这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
。此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
upstream可以设定每个后端服务器在负载均衡调度中的状态,支持的状态参数:
,表示当前的server暂时不参与负载均衡
,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求 机器,因此这台机器的压力最轻。
,允许请求失败的次数,默认为 。当超过最大次数时,返回 模块定义的错误。
,在经历了 次失败后,暂停服务的时间。 可以和 一起使用。
注,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。
如何设置页面缓存?
页面缓存设置指令:
:指定缓存的路径和一些其他参数,缓存的数据存储在文件中,并且使用代理url的哈希值作为关键字与文件名。
参数指定缓存的子目录数。 指定活动的key和元数据存储在共享池(webserver为共享池名称,20m位共享池大小), 参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟 指定缓存空间的大小。
: 设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。
: 为不同的应答设置不同的缓存时间。
如何设置读写分离?
参考
Nginx能为前端开发带来什么?
前端工程师应该知道的Nginx
前端 Nginx https SSL proxy + 后端 Nginx http 应用的布署教程
nginx配置location总结及rewrite规则写法
nginx服务器安装及配置文件详解
http://freeloda.blog.51cto.com/2033581/1288553
领取专属 10元无门槛券
私享最新 技术干货