一、简介
高性能的HTTP和反向代理服务器,占用内存少,并发能力强,为性能优化而开发,并发连接数高达五万。支持热部署,不间断运行。专门用来做静态资源服务器。
相关概念
正向代理:用户通过浏览器配置代理服务器,然后通过访问代理服务器的方式来访问互联网中的远程服务器。
反向代理:客户端无需做任何配置,只需要将请求发给反向代理服务器,由反向代理服务器去选择目标服务器获取数据,再返回给客户端,对外暴露代理服务器,反向代理服务器实现了将真实服务器IP地址隐藏。
- 负载均衡:实现路由分发,将请求分发到不同的服务器。
- 动静分离:把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低服务器压力。后端部署时,将静态资源与动态资源分开部署,由Nginx来根据客户端不同请求来访问。
- 高可用
二、Docker安装Nginx
预安装
说明: Nginx的运行依赖pcre、zlib、OpenSLL库,
pcre:pcre库支持正则表达式,Nginx的配置文件以及Nginx的HTTP模块需要使用它来解析正则表达式。
安装命令:
sudo apt install libpcre3-dev
查看版本:
pcre-config --version
zlib:zlib库用于对HTTP包的内容做gzip格式的压缩,通过在Nginx中配置gzip on指定某些响应内容使用gzip压缩来减少网络传输量。
安装命令:
sudo apt install zlib1g-dev
查看版本:``
OpenSLL:用来支持https(Ubuntu系统默认已经安装)。
安装命令:
sudo apt-get install openssl libssl-dev
查看版本:
openssl version
安装Nginx
运行命令:最好通过数据卷映射的方式映射配置文件,不然需要在容器内安装vim。
docker run --name my-nginx -p 8080:80 -d 镜像名
- —name:容器名
- -p:端口号
- -d:后台运行
通过宿主机配置文件映射方式启动容器(无法访问问题):
docker run --name my-nginx -p 80:80 -v /xuwei/mynginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /xuwei/mynginx/conf/default.conf:/etc/nginx/conf.d/default.conf -d nginx
进入容器:
docker exec -it 容器ID bash
启动nginx(执行位置:
cd usr/local/sbin
)nginx
配置文件地址:nginx.conf
cd etc/nginx
Nginx命令
命令执行位置
所有的命令在进入容器后,进入下面的目录:
cd usr/local/sbin
常用命令
查看版本号
nginx -v
停止运行(会直接停止容器)
nginx -s stop
启动nginx(重新开启容器)
docker start 容器ID
重新加载(不会重启,在改了配置文件后执行,会重新加载配置文件)
nginx -s reload
配置文件
注:Docker 中 default.conf 与 nginx.conf 将配置文件一分为二,default.conf 即原配置文件中 http server块。
全局块
- 位置:配置文件开始到events之间的部分
- 作用:会影响nginx整体运行的哦欸之指令
- worker_processes 1; 表示支持的并发数。
events块
- 作用:涉及的内容影响Nginx服务器与用户的网络连接
- worker_connection 1024; 支持最大的连接数
http块(用的最多)
http全局块
- 位置:http块中server之前的内容
http server块
- 位置:http块中server中的内容
三、反向代理
直接反向代理
即 http server 块中的location /{ }
1 | location / { |
根据不同的路径进行反向代理
根据请求路径中包含的内容来分别代理到不同服务器。
1 | location ~ /user/ { |
四、负载均衡
说明:
相当于对我访问的接口的ip和端口进行了替换,如nginx服务器的ip为118.25.50.72,则当访问:118.25.50.72:5000/api/user/query 时,将118.25.50.72:5000替换成192.168.1.101:8080或192.168.1.102:8080。
在 http 全局块内添加:(ziyue为项目名字)
1
2
3
4
5upstream ziyue {
# 服务器负载列表
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}在 server 的 location 中添加upstream
1
2
3
4
5location / {
proxy_pass http://ziyue;
root html;
index index.html index.htm;
}
请求策略:
轮询:是默认的策略,当某个服务器宕掉时,nginx会自动将它删除。
权重策略:
在每个配置后加一个权重,默认值为1;根据权重分配,即按照权重比例分配。
1
2
3
4
5upstream ziyue {
# 服务器负载列表
server 192.168.1.101:8080 weight=4;
server 192.168.1.102:8080 weight=2;
}ip_hash策略:
直接加上ip_hash,按照每个请求的hash结果进行分配,这样每个访客固定的访问一个后端服务器,可以解决共享session问题。
1
2
3
4
5
6upstream ziyue {
ip_hash;
# 服务器负载列表
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}fair方式:
按照服务器的响应时间来分配,响应时间短的优先被分配
1
2
3
4
5
6upstream ziyue {
fair;
# 服务器负载列表
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
五、动静分离
什么是动静分离
动态与静态请求分开,不是简单的将动态界面和静态界面分开,即将动态请求和静态请求分开,即用Nginx处理静态界面,用tomcat处理动态界面。
常用的静态资源服务器:Nginx,node,anywhere。
架构图
实现方式
- 将静态资源单独部署到一个服务器上,动态请求单独部署到另外的独立服务器的tomcat中。
- 动态请求和静态请求混合部署,通过nginx将其分开。(不推荐)
实现原理
通过 location指定不同的后缀名,实现不同的请求转发,通过 expires 参数设置,可以设置资源在浏览器缓存的过期时间(如1d),加快访问速度,适合不经常变动的资源。缓存资源的返回码为 304。
配置方式
资源放置:
- 在系统中 /data/xxx/ 目录下放置 a.html文件,配置如下:
在http server块添加内容:
1 | location /xxx/ { |
访问:http://192.168.101:8000/xxx/a.html 即可访问到该资源。
...
...
本文为作者原创文章,未经作者允许不得转载。