抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

Nginx

Nginx是一个 高性能 的HTTP和 反向代理 服务器,特点是 占有内存少并发能力强。Nginx通常被用来实现 正向代理反向代理负载均衡动静分离等功能。

基本概念

正向代理

用户知道目标服务器地址,但受限于网络条件,无法直接访问。这个时候就需要先连接代理服务器,由代理服务器去访问目标服务器,再把响应信息返回给用户。

反向代理

用户不知道目标服务器的地址,用户访问的是反向代理服务器的IP地址。代理服务器和目标服务器对外就是一个 整体,暴露的是代理服务器,而真正的目标服务器被隐藏了。

负载均衡

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

动静分离

简单来说就是把动态和静态请求分开来,例如Nginx处理静态页面,Tomcat处理动态页面。

  1. 把静态资源独立成单独的域名,放在独立的服务器上去,主流做法

  2. 把动态和静态文件混合一起发布,通过Nginx分开处理。

    img

基本操作

Nginx启动

1
2
nginx //启动Nginx
nginx -c /usr/local/nginx/conf/nginx.conf //指定配置文件启动Nginx

暂停Nginx

1
2
nginx -s stop //直接停止所有操作,退出Nginx
nginx -s quit //处理完已接受到的请求,然后退出

重启Nginx

1
nginx -s reload //当我们修改了配置文件时,就需要重启Nginx

其他小命令

1
2
3
nginx -t //检查配置文件是否正确
nginx -v //查看Nginx简介版本
nginx -V //查看Nginx详细版本

Nginx配置文件

一般按照功能划分,我们将Nginx的配置文件分为三大块,分别是 全局块,events块,http块

全局块

1
2
3
4
5
6
7
user nginx; //Nginx用户及组,在window下不指定
worker_processes auto; //工作进程数目,根据硬件调整,一般为CPU数目或者CPU*2
error_log /var/log/nginx/error.log; //错误日志存放地址
pid /run/nginx.pid; //进程标识符存放地址

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; //配置文件的引入

全局块主要会设置一些影响Nginx服务器整体运行的配置指令,例如工作进程数目,错误日志存放地址等

events块

1
2
3
events {
worker_connections 1024; //每个工作进程的最大连接数量,理论上每台Nginx服务器的最大连接数为:worker_processes*worker_connections;
}

events块主要影响Nginx服务器与用户的网络连接,常用的设置包括是否允许同时接受多个网络连接,选取那种事件驱动模型,每个工作进程的最大连接数量等.

http块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
http {
include mime.types; // 设定mine类型,类型由mine.types文件定义
default_type application/octet-stream; // 默认content-type类型接受二进制流
server {
listen 80; // 设置Nginx监听的端口号

server_name localhost; //服务器的IP地址

index index.html; //主页

root D:\vue-dalidali\dist; //根路径

location / {
}
...
}
}

http块的内容太多了,同时也是配置文件的重点,http块可以分为全局块和server块等

全局块

全局块复制配置文件引入,MIME-TYPE定义,日志自定义,连接超时,单连接请求数上线等.

全局块中常见的配置是 upstream,用来负载均衡

1
2
3
4
5
  ##自定义我们的服务列表
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}

在Nginx中提供了三种方式的负载均衡策略给我们选择.分别是轮询(默认方式),权重,ip_hash

  • 轮询:每个请求按照时间顺序逐一分配到不同的后端服务器上去,就算服务器宕机,也能够自动剔除.(正常使用,不需要额外配置)

  • 权重:weight代表权重,默认为1,权重越高的服务器分配到的客户端也就越多.

    1
    2
    3
    4
    upstream myserver{
    server 127.0.0.1:8080 weight =1;
    server 127.0.0.1:8090 weight =2;
    }
  • ip_hash:每个请求按访问的IP地址进行hash运算后,分配到所对应的后端服务器,这样的负载均衡策略能够解决session共享的问题.

    1
    2
    3
    4
    5
    upstream myserver{
    ip_hash;#可与weight配合使用
    server 127.0.0.1:8080 weight =1;
    server 127.0.0.1:8090 weight =2;
    }

server块

server中可以分为全局块和location块.

其中全局块主要包括了本虚拟机的监听配置和本虚拟主机的名称或者IP配置

location块则用来对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理,地址定向,数据缓存和应答控制功能等.下面将通过配置server块来实现反向代理,负载均衡,动静分离.

location指令
  1. = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
  2. ~:用于表示 uri 包含正则表达式,并且区分大小写。
  3. ~*:用于表示 uri 包含正则表达式,并且不区分大小写。
  4. ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
反向代理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 8888 ; ##设置我们nginx监听端口为8888
server_name [服务器的ip地址];

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
proxy_pass http://127.0.0.1:8080; ##需要代理的服务器地址
index index.html;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
负载均衡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
http {

###此处省略一大堆没有改的配置


##自定义我们的服务列表
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}


server {
listen 8888 ; ##设置我们nginx监听端口为8888
server_name [服务器的ip地址];

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
proxy_pass http://myserver; ##叮,核心配置在这里
proxy_connect_timeout 10; #超时时间,单位秒
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

}
动静分离
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 8886 ;
server_name [你的服务器ip地址];

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
root /html/;
index index.html;
}

#拦截静态资源,static里面存放的我们图片什么的静态资源
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /data/;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}