前端 Nginx 使用札记

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180401B0Q1AR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券