nginx

简介

Nginx是一个高性能的HTTP和反向代理服务器,特点是占内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,Nginx专为性能优化而开发,性能是其考量的标准,有报告表明可以支持高达50000个并发连接数。

正向代理

Nginx不仅可以作为反向代理,负载均衡,还可以作用为正向代理做上网功能。

正向代理:在客户端配置代理服务器,去访问互联网。

反向代理

客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发到反向代理服务器上,由反向代理服务器去选择目标服务器获取数据后再返回给客户端,可以转发到静态的资源路径上去,也可以转发到动态的服务接口上去。此时反向代理和目标服务器对外就是一个服务器,暴露了代理服务器的IP地址,隐藏了真实服务器的IP

负载均衡

我们可以增加服务器数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况,将请求分发到不同的服务器上,这就是负载均衡。

动静分离

为了加快网站的访问速度,我们可以将一些静态页面和动态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力

安装

  • 官网下载nginxhttp://nginx.org/
  • 依赖 pcre、openssl、zlib

  • 解压安装包后,进入目录 使用命令 ./configure –prefix=/data/server/nginx来指定安装目录

  • 然后执行make && make install 进行编译安装,如果没指定安装目录,会安装在/usr/local下
  • 别忘记开启防火墙,阿里云需要开启安全组规则

常用命令

  • 查看版本号:nginx -v
  • 停止:nginx -s stop
  • 启动:nginx -c 配置文件路径
  • 重新加载:nginx -s reload

配置文件

组成

  • 全局块

    从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务整体运行的配置命令,包括配置运行nginx的用户组,允许产生的worker process数,进程PID存放路径,日志存放路径,以及配置文件的引入

  • events块

    影响nginx服务器与用户的网络连接,常用的包括,是否开启对多worker process下的网络连接序列化,是否允许同时接受多个网络连接,选用哪种事件来驱动模型来处理连接请求,每个worker process可以同时支持的最大连接数等

  • http块

    配置最为复杂频繁的部分

    • http全局块

      包含文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上线等。

    • server块

      与虚拟主机关系密切,每个http块可以包含多个server块,而每个server块就相当于一个独立的虚拟主机,而每个server块有分server全局块和location块

      • server全局块
      • location块

实例

反向代理1

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name ip地址;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}

反向代理2

1
2
3
4
5
6
7
8
9
10
11
#访问81的请求路径里包含A,去8082服务,包含B的去8081服务
server {
listen 81;
server_name ip地址;
location ~ /A/ {
proxy_pass http://127.0.0.1:8082;
}
location ~ /B/ {
proxy_pass http://127.0.0.1:8081;
}
}

location

1
2
3
location [ = | ~ | ~* | ^~ | ] uri{

}
  • =:用于不含正则表达式的uri前,要去请求字符和uri严格匹配,如果匹配成功

负载均衡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
http {
upstream myServer {
server 127.0.0.1:8081;
server 127.0.0.1:8080;
}

server {
listen 80;
server_name ip;
location / {
proxy_pass http://myServer;
}
}
}

常用的分配策略

  • 轮询(默认):按每个请求时间逐一分配到不同的后端服务器上,如果后端服务器down了,可以自动剔除

  • weight:weight表示权重,越大的服务端会被访问的越多

    1
    2
    3
    4
    upstream myServer {
    server 127.0.0.1:8081 weight=1;
    server 127.0.0.1:8080 weight=2;
    }
  • ip_hash:让每个访客固定ip的访问同一个服务器,可以解决session的问题

    1
    2
    3
    4
    5
    upstream myServer {
    ip_hash
    server 127.0.0.1:8081 ;
    server 127.0.0.1:8080 ;
    }
  • fair:按照后端响应时间的长短来分配

    1
    2
    3
    4
    5
    upstream myServer {
    server 127.0.0.1:8081 ;
    server 127.0.0.1:8080 ;
    fair
    }

动静分离

静态文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  server {
listen 80;
server_name ip;

location / {
root /data/blog/blogData;
index index.html;
}
#多个location需要使用alias
location /train {
alias /data/trainning/;
index index.html index.html;
}
}

文档压缩

http {

gzip on; #开启gzip
gzip_disable "msie6"; #IE6不使用gzip
gzip_vary on; #设置为on会在Header里增加 "Vary: Accept-Encoding"
gzip_proxied any; #代理结果数据的压缩
gzip_comp_level 6; #gzip压缩比(1~9),越小压缩效果越差,但是越大处理越慢,所以一般取中间值
gzip_buffers 16 8k; #获取多少内存用于缓存压缩结果
gzip_http_version 1.1; #识别http协议的版本
gzip_min_length 1k; #设置允许压缩的页面最小字节数,超过1k的文件会被压缩
gzip_types application/javascript text/css; #对特定的MIME类型生效,js和css文件会被压缩

include /etc/nginx/conf.d/*.conf;

}