Nginx
什么是Nginx(what) ?
- Nginx(“engine x”) 是一个开源的高性能的Http和反向代理服务软件。
- nginx因具有高并发(特别是静态资源),占用系统资源少等特性,且功能丰富而逐渐变得流行。
Nginx的功能(为何要使用Nginx(why))?
反向代理
-
正向代理
客户端指定目标服务器,而中间代理只是起到转发的作用。客户端需要配置代理服务器地址。正向代理最大的特点是客户端明确要访问的服务端的地址,对于服务端来说,屏蔽了客户端或者隐藏了真实客户端的地址。(如下图所示) -
反向代理
客户端指向代理服务器,由反向代理对客户端的请求进行转发。即服务端对于客户端是不可
见的。暴露的是代理服务器ip,隐藏真实服务器的ip。可以在一定程度上防御黑客攻击。(如下图所示)
- nginx能够提供反向代理功能,而且与专业的代理软件相比,nginx部署起来更为简单,方便。
负载均衡
- 当一台服务器无法满足高并发要求时,我们可以通过增加服务器的数量来提高并发量。这时请求就不知道到底该发往哪个服务器,于是我们需要一个额外的服务器来将这些负载(请求)“均匀”的
分发到不同的服务器。 - 将服务器收到的请求按照一定的规则进行分发的过程其实就是负载均衡。
动静分离
- 以前我们都是把动态资源和静态资源放在同一个服务器中,这其实给同一台服务器增加了很多的负担,
也降低了响应速度。因此我们可以将静态资源和动态资源分别放到不同的服务器,通过nginx将不同的
资源请求分发到不同的服务器,从而提高响应速度。
高可用
- 简单说:当nginx服务器挂掉后,另一台nginx服务器能够顶替,保证能够继续提供服务
邮件代理
Nginx的应用现状
Nginx 已经在俄罗斯最大的门户网站── Rambler Media(www.rambler.ru)上运行了3年时间,同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。在国内,已经有 淘宝、新浪博客、新浪播客、网易新闻、六间房、56.com、Discuz!、水木社区、豆瓣、YUPOO、海内、迅雷在线 等多家网站使用 Nginx 作为Web服务器或反向代理服务器。
怎么用?(how)
1.安装(安装方式有很多)
安装nginx需要依赖第三方库
- 安装pcre依赖
a. wget https://ftp.pcre.org/pub/pcre/pcre-8.37.tar.gz
b. tar -xvf pcre-8.37.tar.gz
c. 进入解压后的目录,然后执行./configure
d. 然后执行make && make install (编译然后安装)
e. 安装完成后,可以使用pcre-config --version查看版本 - 安装其他依赖(zlib和openssl)
a. yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel(yum这个命令需要看操作系统类型,如果可以,这个命令就直接将zlib和openssl全部安装好)
b. wget http://www.zlib.net/zlib-1.2.11.tar.gz ,其余过程同pcre安装。
安装nginx
- 先下载nginx安装包,在linux中新建一个文件夹,然后使用wget命令下载(可进入官网自选版本): wget http://nginx.org/download/nginx-1.12.2.tar.gz
- 解压 tar -xvf nginx…
- 进入解压目录,然后执行./configure
- 执行make && make install
- 安装成功后,进入/usr/local/目录会发现有一个nginx目录,然后该目录里面有一个sbin目录,里面有启动脚本
2.启动nginx
- 进入/usr/local/nginx/sbin目录,然后执行./nginx即可,有可能80端口已经被占用,则需要修改配置文件。
- 启动之后,可以在浏览器中输入ip:端口号访问到nginx主页,端口号就是配置文件中的端口号,如果没改的话是80。注意服务器对应的端口号需要开放(防火墙)
- 图片所示是配置文件中Server块端口号修改为6379的结果
3.nginx常用命令(需进入nginx的sbin目录)
- 查看nginx版本号: ./nginx -v
- 开启nginx: ./nginx
- 关闭nginx: ./nginx -s stop
- 重加载: ./nginx -s reload
nginx配置文件
nginx配置文件位置:/usr/local/nginx/conf/nginx.conf
nginx配置文件组成:
- 全局块 :主要有进程数目设置(w ork_process),用于进行nginx全局信息的配置。
- events块: 主要影响nginx服务器与用户的网络连接。常用的设置包括是否允许同时接受多个网络连接,每个worker_processer可以同时支持的最大连接数(worker_connections)。
- http块(配置最频繁的部分),包括http全局块和server块。Server块包括Server全局块和location块。 http块中可包含一个或多个Server块,每个Server块中又可有一个或多个location块。 server块用于进行服务器访问信息的配置,location块用于进行访问路由的配置
- upstream:用于进行负载均衡的配置
nginx配置实例
nginx配置反向代理实例一
-
**目标效果:**在url栏输入目标服务器的ip+6379端口号,然后可以访问到该服务器上的8080端口号对应的tomcat欢迎页(服务器有限)
-
步骤如下:
a. 配置好tomcat,访问ip+8080能够到达tomcat欢迎页b. 修改nginx的配置文件:
c. 重启nginx,浏览器输入相应url,效果如下:
nginx配置反向代理实例二
- 目标效果:
访问 域名:9000/edu/ 直接跳转到 域名:8080
访问 域名:9000/vod/ 直接跳转到 域名:9080
比如:访问http://118.66.66.66:9000/edu/,直接跳转到 http://118.66.66.66:8080
若访问http://118.66.66.66:9000/vod/,直接跳转到 http://118.66.66.66:9080
- 准备工作:
1.准备两个Tomcat服务器,一个8080端口,一个9080端口
2.在两个服务器目录下分别创建两个文件夹edu 和 vod ,然后放一个测试页面进去(a.html)
- 具体配置(进入nginx配置文件)
server {
listen 9000; #nginx监听9000端口
server_name localhost; #nginx所在服务器ip
#~符号表示后面的uri包含正则表达式,并且区分大小写, 如果用~*则表示不区分大小写
location ~ /edu/ { #若匹配上edu路径,则跳转到本机的8080端口
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:9080;
}
}
- 注意:防火墙要对外开放所需的端口
- 最终测试
nginx配置负载均衡
- 目标效果
在浏览器中输入地址http://118.66.66.66:9000/edu/a.html
然后通过nginx的负载均衡,将请求平均分配到8080和9080这两台服务器中
- 准备工作
1.准备两台tomcat服务器,一台8080,一台9080
2.在两台tomcat的webapps目录中创建名称为edu的文件夹,在文件夹中创建页面b.html,模拟
同一个应用被在两台服务器上配置两个实例。
-
在nginx的配置文件中进行如下配置:
http { .... upstream myserver{ server 118.66.66.66:8080; server 118.66.66.66:9080; } server { listen 9000; server_name localhost; .... location / { proxy_pass http://myserver; } .... } .... }
-
效果:不停刷新页面,会来回显示两台服务器上的页面。
负载均衡的常用策略
- 轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用的过程中,某一台服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。在这种方式下,可以给不同的服务器设置一个权重值(weight),用于调整不同的服务器被分到请求的概率。权重数据越大,被分配到请求的几率就越大。
upstream myserver{
server 118.66.66.66:8080 weight=5;
server 118.66.66.66:9080 weight=10;
}
- iphash ;对ip进行hash,这种方法可以使一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了session共享的问题。
upstream myserver{
ip_hash;
server 118.66.66.66:8080;
server 118.66.66.66:9080;
}
- fair(第三方):智能调整调度算法,动态的根据后端服务器的响应时间进行均衡分配。这样一来,响应时间短,处理效率高的服务器分配到请求的概率高,而响应时间长,处理效率低的服务器分配到的请求会少。但是需要注意的是nginx默认不支持fair算法,若需要使用这种调度策略,需安装upstream_fair模块。
upstream myserver{
server 118.66.66.66:8080;
server 118.66.66.66:9080;
fair;
}
- url_hash:按照访问的url的hash结果分配请求。每个请求的url会指向后端固定的某个服务器
upstream myserver{
hash $request_uri;
server 118.66.66.66:8080;
server 118.66.66.66:9080;
}
动静分离配置
- 目标效果:
1.访问http://118.66.66.66:9000/www/a.html
得到a.html这个静态页面,不经过tomcat服务器
2.访问http://118.66.66.66:9000/images/beauty.jpg
得到一张图片,不经过tomcat解析
- 准备工作:准备一个目录data,然后在该目录中创建www和images目录,再分别创建a.html,beauty.jpg放入这两个文件夹
- 配置文件具体配置:
location /www/ {
root /data/;
index index.html index.htm;
}
location /images/ {
root /data/;
autoindex on; #自动显示文件目录
}
- 测试结果:
输入:http://118.66.66.66:9000/www/a.html
来源:CSDN
作者:TINY_SPOT
链接:https://blog.csdn.net/qq_41550842/article/details/103532550