什么是nginx
Nginx 是一个 高性能的HTTP服务器和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
Nginx专为性能优化而开发,性能是其最重要的考量,实际上非常注重效率,能经受高负载的考验,有报告表明能支持高达5万个并发连接数
(1) 正向代理
在客户端(浏览器)设置代理服务器,通过代理服务器进行互联网访问
(2)反向代理
我们只需要将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
客户端请求的数据,单台服务器处理不了众多数据,我们增加服务器数量,然后将众多请求数据通过调度器分发到各个服务器上
[root@Ansible ~]# yum install -y gcc pcre-devel openssl-devel //安装依赖包
[root@Ansible ~]# useradd -s /sbin/nologin nginx //创建不可登入的用户
[root@Ansible ~]# tar zxf nginx-1.12.2.tar.gz //解压nginx包 (包需要自己下载)
> [root@Ansible nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \ //指定安装路径
> --user=nginx \ //指定用户
> --group=nginx \ //指定组
> --with-http_ssl_module //开启SSL加密功能
1、 检查软件环境是否符合要求或依赖
2、 指定要安装的模块或路径、用户等。with-http_ssl_module就是一个ssl加密模块
3、 生成makefile文件,Makefile中指明要安装哪些模块、指定安装路径等信息,make需要从makefile文件中读取指令然后编译
[root@Ansible nginx-1.12.2]# make & make install //编译并安装
安装后没有启动只有这四个文件夹
conf:存放nginx所有的配置文件目录
html:Nginx的默认站点目录
logs:Nginx默认的日志路径
sbin:Nginx命令目录,如Nginx的启动命令
使用nginx操作命令有个前提条件,必须进入到nginx的/usr/local/nginx/sbin/目录下
[root@Ansible sbin]# ./nginx //启动服务
[root@Ansible sbin]# ./nginx -s stop //关闭服务
[root@Ansible sbin]# ./nginx -s reload //重新加载配置文件
[root@Ansible sbin]# ./nginx –V //查看软件信息
[root@Ansible sbin]# ln -s /usr/local/nginx/sbin/nginx /sbin/nginx //创建软连接,方便在任何目录启停服务
(1)nginx配置文件有三部分组成
第一部分 全局块
丛配置文件的开头到events块之间的内容为全局块,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process(进程)数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等
比如配置文件中的第一行的配置:
这个是nginx服务器并发处理服务的关键配置,worker_processes 的值越大,可以支持的并发处理量越多,但是会受到硬件的、软件等设备的制约。
第二部分 events块
events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对个worker processes(进程)下的网络连接 进行序列化,是否允许同时接受多个网络连接,选取那种事件驱动模型来处理连接请求,每个worker processes(进程)可以同时支持的最大连接数等。
如配置文件中的默认设置是单进程的最大连接数1024
第三部分 http块
http块也可以包括http全局块、server块
http全局块
可以嵌套多个server,配置代理、缓存、日志定义等绝大部分功能和第三方模块的配置,主要包括:定义MIMI-Type类型 自定义服务器日志、连接超时时间、单链接请求上限
server块
这块 和虚拟机有密切的关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一个的,该技术的生产是为了节省互联网服务器硬件成本。
每个http块中可以包括多个server块,而每个server块相当于一个虚拟主机
而每一个server块也分全局server块,以及可以同时包含多个location块
全局server块
最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称和IP配置
location块
一个server块可以配置多个location块
这块的主要作用是基于nginx服务器接收到的请求字符串(例如server_name/url-sting),对虚拟机名称(也可以是IP别名)之外的字符串(例如 前面的/url-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存、和应答控制等功能,还有许多第三方模块的配置也在这里进行。
实现效果:当window浏览器访问192.168.200.129并且端口是80时,nginx会转发到http://127.0.0.1:8080的地址。
首先启动linux虚拟机中的tomcat(进入tomcat的bin目录中,执行./startup.sh文件开启tomcat)
tomcat启动后可以访问到192.168.200.129:8080
修改nginx.conf配置文件,将server_name localhost
修改为linux本机的IP地址,文件路径:/usr/local/nginx/conf/
如图中配置,当window浏览器访问192.168.200.129并且端口是80时,nginx会转发到http://127.0.0.1:8080的地址。
配置完成,还需要重新加载nginx才能生效
如上面的 nginx常用命令 配置中,我们已经对nginx命令做过软连接,所以我们就在当前目录下执行加载命令就可以
[root@Ansible conf]# nginx -s reload //重新加载配置文件
验证反向代理配置是否成功,如果访问192.168.200.129 返回如下页面说明成功了
实现效果:使用nginx反向代理,根据访问的路径跳转到不通端口的服务器中
当访问192.168.200.129:80/a/html 直接跳转到127.0.0.1:8080
当访问192.168.200.129:80/b/html 直接跳转到127.0.0.1:8081
准备2个tomcat服务器,我们已经有一个tomcat服务了,端口是8080,现在还需要在准备一个tomcat服务,端口是8081。
创建 目录tomcat8081
注:此目录创建位置没有要求,那都可以。
[root@Ansible ~]# mkdir tomcat8081
把下载好的tomcat包复制到tomcat8081目录中并进行解压
[root@Ansible tomcat8080]# tar zxf apache-tomcat-7.0.105.tar.gz
[root@Ansible tomcat8080]# ls
apache-tomcat-7.0.105 apache-tomcat-7.0.105.tar.gz
进入tomcat8081目录下,修改端口为8081
配置文件路径为:/tomcat8081/apache-tomcat-7.0.105/conf/server.xml
把配置文件中22行的8005修改为8015
启动tomcat8081端口
启动路径为:/tomcat8081/apache-tomcat-7.0.105/bin
[root@Ansible bin]# ./startup.sh
查看8081端口是否启动
[root@Ansible bin]# ss -tunlp | grep 8080
tomcat8080配置
在/webapps目录下创建我们要访问的文件路径,也就是我们访问192.168.200.129:8080/a/ 直接跳转到127.0.0.1:8080中的a目录
文件路径:/tomcat8080/apache-tomcat-7.0.105/webapps
[root@Ansible webapps]# mkdir a //创建a目录
在a目录下创建我们要访问的html页面
测试8080页面
tomcat80801配置
在/webapps目录下创建我们要访问的文件路径,也就是我们访问192.168.200.129:8081/b/ 直接跳转到127.0.0.1:8080中的a目录
文件路径:/tomcat8080/apache-tomcat-7.0.105/webapps
[root@Ansible webapps]# mkdir b //创建b目录
测试8081页面
nginx.conf文件配置
进入nginx的配置文件目录下,对nginx.conf文件进行反向代理配置
在/usr/local/nginx/conf/nginx.conf文件中添加如下配合
重新记载nginx配置
[root@Ansible conf]# nginx -s reload //重新加载配置文件
当访问192.168.200.129:80/a/html 直接跳转到127.0.0.1:8080
当访问192.168.200.129:80/b/html 直接跳转到127.0.0.1:8081
方向代理到这个就配置好了
实现效果:浏览器访问地址http://192.168.200.129:8000端口,负载到8080和8081端口
准备两台tomcat服务器,一台8080,一台8081,这2台服务在上个实验中已经准备好了,这里就不用准备了。
创建目录
文件路径:/tomcat8081/apache-tomcat-7.0.105/webapps
[root@Ansible webapps]# mkdir a //创建a目录
在a目录下创建我们要访问的html页面
[root@Ansible a]# echo "8081端口" > html
nginx配置
此处需要注意的是,upstream myserver 模块是在http块中配置的
重新加载nginx配置文件 和 测试负载效果
[root@Ansible conf]# nginx -s reload //重新加载配置文件
浏览器访问地址http://192.168.200.129:8000端口,负载到8080和8081端口
刷新下浏览器,会访问到tomcat的8081端口
负载均衡配置也配置好了
1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、加权轮询 weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如: upstream server {
server 192.168.200.129 weight=10;
server 192.168.200.128 weight=10; }
3、ip_hash 根据请求的ip的hash值分配到对应的后台服务器,可以保证同一ip请求总是到同一个后台服务器,可解决session问题。。 例如:
upstream server {
ip_hash;
server 192.168.200.129:8080;
server 192.168.200.128:8081; }
4、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 upstream server {
server server1;
server server2;
fair;}
5、url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
这个暂时没玩过
6、最少连接数least_conn 优先将请求分配给连接最少的服务器,这样可以避免将请求发给压力较大的服务器
实例: upstream bakend{ ip_hash; server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2; server 127.0.0.1:6060; server
127.0.0.1:7070 backup; }
状态说明:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,分配的次数越多。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
如: upstream svrver {
server 192.168.200.129:8080 weight=2 max_fails=2 fail_timeout=2;
server 192.168.200.129:8081 weight=1 max_fails=2 fail_timeout=1;
}
5.backup:热备 如果负载中有两台服务器,一台配置了backup,当另一台服务器挂掉的时候,才会启用这台服务器。