nginx能做什么?
(1) 反向代理
(2) 负载均衡
(3) 动静分离
正向代理
在客戶端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。代理的是客户端
反向代理
客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址,代理的是服务端
负载均衡
由于并大访问量大,单个服务器解决不了,增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上。将负载分发到不同的服务器,也就是负载均衡。
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。nginx来处理静态页面,tomcat处理动态页面。
nginx的安装
ifconfig:查看linux的IP地址
下载地址nginx:http://nginx.org/
安装nginx之前需要的相关依赖:pcre openssl zlib
安装prce
1、下载安装包:https://sourceforge.net/projects/pcre
2、把安装包放入的linux的系统中(rz命令)
3、解压压缩文件(tar -xzvf XXXX压缩包)
4、进入到解压之后的目录中,执行 ./configure
5、使用make && make install 命令进行编译安装
6、查看pcre的版本号:pcre-config --version
安装openssl 和 zlib
yum -y intall make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装nginx
1、下载nginx压缩包:http://nginx.org/
2、把安装包放入的linux的系统中(rz命令)
3、解压压缩文件(tar -xzvf XXXX压缩包)
4、进入到解压之后的目录中,执行 ./configure
5、使用make && make install 命令进行编译安装
安装完成之后,在usr目录中多出来了一个nginx文件夹local/nginx,在nignx中有个sbin,sbin中有启动nginx的启动脚本。
6、启动nginx:进入到nginx启动脚本的目录,执行 ./nginx
7、测试nginx是否可用,访问 linux的ip:80
如果不能访问,可查看防火墙是否开放80端口:
1、查看开放的端口:firewall-cmd --list-all
2、设置开放的端口号:
firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=80/tcp --permanment
3、重启防火墙:firewall-cmd --reload
nginx中的常用命令
使用nginx操作命令的前提条件:必须进入到nginx的目录 /usr/local/nginx/sbin
1、查看nginx的版本号:./nginx -v
2、启动nginx:./nginx
3、关闭nginx:./nginx -s stop
4、重新加载nginx,是的nginx.conf配置文件生效:./nginx -s reload
nginx的配置文件
nginx的配置文件在哪里?
nginx配置文件的位置:/usr/local/nginx/conf/nginx.conf
nginx配置文件的组成
nginx的配置文件由三部分组成
全局快
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组),允许生成process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等。
worker_processes 1;
worker_processes值越大,可以支持的并发处理量也越多。
events块
events涉及的指令主要影响nginx服务器与用户的网络连接。
worker_connections 1024
支持的最大连接数
http块
http块是nginx服务器配置中最频繁的部分,http块可以包括http全局块、server块。
http全局块
http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单连接请求数上限等。
server块
server块和虚拟主机由密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
而每个server块也分为全局server块,以及可以同时包含多个location块。
全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟机主机的名称或IP配置。
listen 80;
监听的端口
server_name 10.2.165.83;
本虚拟机主机的IP
location块
一个server块可以配置多个location块。
这块的主要作用是基于nginx服务器收到的请求字符串(eg:server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(eg:前面的/uri-string)进行匹配,对特定的要求进行处理,地址定向、数据缓存和应答控制等功能,还有许多第三方的配置也在这里进行配置。
location指令说明
location [ = | ~ | ~* | ^~] uri{
}
1、=:用于不含正则表达式的uri钱,要求请求字符串与uri严格匹配,如果匹配成功就继续向下搜索并立即处理该请求。
2、~:用于表示uri包含正则表达式,并且区分大小写。
3、~*:用于表示uri包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配最高的location后,立即使用此location处理请求,而不再使用location块中的uri和请求字符出纳做匹配。
注意,如果uri包含正则表达式,则必须要有或*标识。
nginx的实例
实例1——反向代理
实现效果
在浏览器中输入www.123.com可以跳转到linux系统中tomcat的主页面
具体实现
在linux中安装tomcat,使用默认的端口号8080
安装tomcat
1、下载安装包
2、把安装包放入的linux的系统中(rz命令)
3、解压压缩文件(tar -xzvf XXXX压缩包)
4、启动tomcat:进入tomcat目录下的bin目录,执行./startup.sh
5、测试是否可以访问,访问 linux的ip:8080
如果不能访问,可查看防火墙是否开放8080端口:
1、查看开放的端口:firewall-cmd --list-all
2、设置开放的端口号:
firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=8080/tcp --permanment
3、重启防火墙:firewall-cmd --reload反向代理访问过程
访问过程
具体配置
1、在windows系统的host文件中配置域名与ip地址的映射关系:192.168.224.34 www.123.com
2、在nginx中(nginx.conf)进行请求转发的配置(反向代理)
server_name 192.168.224.34;
proxy_pass http://127.0.0.1:8080;
3、重新加载nginx、重启nginx
测试
在浏览器中输入www.123.com跳转到了tomcat的首页
实例2——反向代理
实现效果
使用nginx反向代理,根据访问的路径跳转到不同端口的服务器中:
nginx的监听端口为9001
访问 http://192.168.224.34/edu/ 直接跳转到127.0.0.1:8080
访问 http://192.168.224.34/vod/ 直接跳转到127.0.0.1:8081
192.168.224.34:虚拟机的IP地址
具体实现
1、准备两个tomcat服务器,一个是8080端口,一个是8081端口 (端口:在server.xml中进行修改端口)
2、创建文件夹和测试页面:在tomcat(8080)的webapps目录下创建edu/a.html和tomcat(8081)的webapps目录下创建vod/a.html
3、启动tomcat
如果不能访问,可查看防火墙是否开放9001端口、8080端口和8081端口:
1、查看开放的端口:firewall-cmd --list-all
2、设置开放的端口号:
firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=9001/tcp --permanment
sudo firewall-cmd --add-port=8080/tcp --permanment
sudo firewall-cmd --add-port=8081/tcp --permanment
3、重启防火墙:firewall-cmd --reload反向代理访问过程
具体配置
1、在nginx的配置文件(nginx.conf)中,进行反向代理的配置
2、重新加载nginx、重启nginx
测试
在浏览器中访问:http://192.168.224.34:9001/edu/a.html 可访问。出现8080
在浏览器中访问:http://192.168.224.34:9001/vod/a.html 可访问。出现8081
实例3——负载均衡
实现效果
在浏览器中输入http://192.168.224.34/edu/a.html ,负载均衡效果,平均分摊到8080和8081端口中去。
具体实现
1、准备两个tomcat服务器,一个是8080端口,一个是8081端口 (端口:在server.xml中进行修改端口)
2、创建文件夹和测试页面:在tomcat(8080)的webapps目录下创建edu/a.html和tomcat(8081)的webapps目录下创建edu/a.html
3、启动tomcat
具体配置
1、在nginx的配置文件(nginx.conf)中,进行反向代理的配置
2、重新加载nginx、重启nginx
测试
在浏览器中访问 http://192.168.224.34/edu/a.html ,会出现在8080和8081之间进行切换
nginx负载均衡分配服务器的策略
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
weight代表权重,默认为1,权重越高被分配的客户端就越多。
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。
4、fair(第三方访问方式)
按照后端服务器的响应时间来分配请求,相应时间短的优先分配。
实例4——动静分离
方法一:纯粹把静态文件独立成单独的域名,放在独立的服务器上。
方法二:将动态和静态文件混合在一起发布,通过nginx来分开。
expires:
通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量。具体expires定义:给一个资源设定一个过期时间,也就是说无需去服务器验证。直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,非常适合经常不变的资源。
eg:比如设置一个3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器上该文件的最后更新时间是否有变化,如果没有变化,则不会从服务器抓取,返回状态码304;如果有变化,则直接从服务器重新下载,返回状态码200。
实现效果
具体实现
1、在linux中准备静态资源,用于进行访问。创建www文件夹和image文件夹(www:html页面 、 image:存放图片)
具体配置
1、在nginx的配置文件(nginx.conf)中,进行动静分离的配置
2、重新加载nginx、重启nginx
测试
1、在浏览器中访问:http://192.168.224.34/image/
2、在浏览器中访问:http://192.168.224.34/www/xxx.html
nginx高可用的集群
使用Nginx会遇到的问题:
问题解决:
什么是nginx的高可用
当nginx宕机之后,请求还会继续执行。
具体实现
环境准备
两台服务器:192.168.224.34和192.168.224.35
虚拟IP:192.168.224.223
具体实现
1、两台服务器分别安装nginx
2、两台服务器分别安装keepalived
安装linux
参考:nginx的安装
安装keepalived
使用yum命令进行安装:yum install keepalived -y
安装之后,在etc里面生成目录keepalived,keepalived中有keepalived.conf配置文件
具体配置
两台服务器分别做一下操作:
1、修改keepalived.conf配置文件
2、添加检测脚本
3、启动nginx(./nginx)、keepalived(systemctl start keepalived.service)
测试
1、在浏览器中输入虚拟IP:192.168.224.223,可进入到nginx页面
2、停止主服务器(192.168.224.34)的nginx和keeplived,再次在浏览器中输入虚拟IP:192.168.224.223,还可进入到nginx页面
停止keepalived:systemctl stop keepalived.service
可以使用 ip a 命令查看该服务器是否绑定虚拟IP