nginx

Nginx

Nginx是一款轻量级的Web服务器,也是一款轻量级的反向代理服务器

Nginx能干什么

  1. 直接支持Rails和PHP的程序

  2. 作为HTTP反向代理服务器

  3. 作为负载均衡服务器

  4. 作为邮件代理服务器

  5. 帮助实现前端动静分离

Nginx在应用程序中的作用

  • 解决跨域

  • 请求过滤

  • 配置gzip

  • 负载均衡

  • 静态资源服务器

Nginx特点

高稳定、高性能、资源占用少、功能丰富、模块化结构、支持热部署

安装Nginx

  1. 环境搭建

    • 自己找个电脑搭建

    • 购买阿里云ECS

    • 使用虚拟软件

  2. 安装依赖:

    yum -y install gcc gcc-c++ pcre-devel autoconf make automake

    yum -y install wget httpd-tools vim

  3. 安装nginx

  4. 检查是否安装成功:nginx -v

配置文件

基本使用

自定义错误页

访问控制

基于端口/IP/域名设置虚拟主机

PC或移动端适配

Gzip压缩

  • gzip : 该指令用于开启或 关闭gzip模块

  • gzip_buffers : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流

  • gzip_comp_level : gzip压缩比,压缩级别是1-9,1的压缩级别最低,9的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长

  • gzip_disable : 可以通过该指令对一些特定的User-Agent不使用压缩功能

  • gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从相应消息头的Content-length中进行获取

  • gzip_http_version:识别HTTP协议版本,其值可以是1.1.或1.0

  • gzip_proxied : 用于设置启用或禁用从代理服务器上收到相应内容gzip压缩

  • gzip_vary : 用于在响应消息头中添加Vary: Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩

正向代理

内网服务器主动去请求外网的服务的一种行为(梯子)

这样就可以做到内网中端口为8080的服务器主动请求到1.2.3.4的主机上,如在Linux下可以:

curl --proxy proxy_server:8080 http://www.taobao.com/

正向代理的关键配置:

1 resolver: DNS服务器IP地址

2 listen:主动发起请求的内网服务器端口

3 proxy_pass:代理服务器的协议和地址

反向代理

是指用代理服务器来接受客户端发来的请求,然后将请求转发给内网中的上游服务器,上游服务器处理完之后,把结果通过nginx返回给客户端

  • proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息

  • proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间

  • proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间

  • proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间

  • proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh

反向代理的关键配置:

1 server_name:代表客户端向服务器发起请求时输入的域名

2 proxy_pass:代表源服务器的访问地址,也就是真正处理请求的服务器

透明代理

也叫做简单代理,意思客户端向服务端发起请求时,请求会先到达透明代理服务器,代理服务器再把请求转交给真实的源服务器处理,也就是是客户端根本不知道有代理服务器的存在。

负载均衡

将服务器接收到的请求按照规则分发的过程,称为负载均衡。负载均衡是反向代理的一种体现。

nginx实现负载均衡有几种模式:

  1. 轮询:每个请求按时间顺序逐一分配到不同的后端服务器,也是nginx的默认模式。轮询模式的配置很简单,只需要把服务器列表加入到upstream模块中即可。

下面的配置是指:负载中有三台服务器,当请求到达时,nginx按照时间顺序把请求分配给三台服务器处理。

ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

下面的配置是指:负载中有三台服务器,当请求到达时,nginx优先按照ip_hash的结果进行分配,也就是同一个IP的请求固定在某一台服务器上,其它则按时间顺序把请求分配给三台服务器处理。

url_hash:按访问url的hash结果来分配请求,相同的url固定转发到同一个后端服务器处理。

fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。

而在每一种模式中,每一台服务器后面的可以携带的参数有:

  • down: 当前服务器暂不参与负载

  • weight: 权重,值越大,服务器的负载量越大。

  • max_fails:允许请求失败的次数,默认为1。

  • fail_timeout:max_fails次失败后暂停的时间。

  • backup:备份机, 只有其它所有的非backup机器down或者忙时才会请求backup机器。

如下面的配置是指:负载中有三台服务器,当请求到达时,nginx按时间顺序和权重把请求分配给三台服务器处理,例如有100个请求,有30%是服务器4处理,有50%的请求是服务器5处理,有20%的请求是服务器6处理。

如下面的配置是指:负载中有三台服务器,服务器4的失败超时时间为60s,服务器5暂不参与负载,服务器6只用作备份机。

下面是一个配置负载均衡的示例(只写了关键配置): 其中: 1. upstream serverList是负载的配置模块 2. server_name是客户端请求的域名地址 3. proxy_pass是指向负载的列表的模块

静态服务器

现在很多项目流行前后分离,也就是前端服务器和后端服务器分离,分别部署,这样的方式能让前后端人员能各司其职,不需要互相依赖,而前后分离中,前端项目的运行是不需要用Tomcat、Apache等服务器环境的,因此可以直接用nginx来作为静态服务器。

静态服务器的关键配置:

root:直接静态项目的绝对路径的根目录。

server_name : 静态网站访问的域名地址

Last updated