目录
/etc/keepalived/keepalived.conf
一、nginx简介
1.ngnix是什么
Nginx是高性能的HTTP和反向代理的web服务器,处理高并发能力。
其特点:占有内存少,并发能力强。注重效率,为性能优化而开发
nginx可以作为静态页面的web服务器。支持CGI协议的动态语言,如perl, php,但不支持java。
2.nginx作用
提供负载均衡和反向代理。还能用做正向代理进行上网等操作。
支持热部署,可以再服务器不关闭的情况下进行系统版本的升级和更新。
正向代理:通过客户端配置代理服务器访问服务器的过程。在客户端配置代理服务器进行指定网站的访问。
反向代理:客户端将请求发送给反向代理服务器,又反向代理服务器选择目标服务器,获取数据后再返回给客户端。隐藏了目标服务器的ip地址。
正向代理和反向代理的区别:
正向代理相对于目标服务器隐藏了客户端真实的ip地址,对于目标服务器而言所有的请求都是从代理服务器发出。用于科学上网和隐藏客户端ip地址
反向代理对于客户端而言隐藏了目标服务器的ip地址。主要功能是负载均衡和安全防护
二者都加快客户端的访问效率,对代理中的数据具有缓冲作用
负载均衡:将发送过来的请求从原来由单个服务器进行处理转换为平均分发到多个服务器上,即负载均衡。
动静分离:在负载均衡的理念上,为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器进行解析。降低原来单个服务器的压力。
二、nginx安装
- 先安装其依赖软件,最后安装nginx。
- 依赖工具:pcre-8.3.7.tar.gz, openssl-1.0.1t.tar.gz, zlib-1.2.8.tar.gz, nginx-1.11.1.tar.gz
1.安装openssl, zlib
yum -y install make zlib zlib-devel gcc-c+ libtool openssl openssl-devel
2.安装pcre
这里使用压缩包安装
解压文件, 进入pcre目录,
./configure 完成后,
执行命令: make && make install
3.安装nginx
解压文件, 回到 nginx 目录下,
./configure 完成后,
执行命令: make && make install
安装完nginx后,会在 路径 /usr/local 下自动生成 nginx 文件夹。这是自动生成的。
进入这个目录:
cd /usr/local/nginx
目录内容如下:
*+进入sbin文件夹,里面有两个文件:nginx 和 nginx.old。
执行命令:./nginx 即可执行
执行后:
测试启动: ps -ef | grep nginx
已经启动。
nginx的默认端口: 80; 位置:cd /usr/local/nginx/conf 下的 nginx.conf文件。
windows中访问nginx:
注:使用nginx操作命令前提:必须进入到nginx的自动生成目录的下/sbin文件夹下。
三、Nginx 反向代理 配置实例 1.1
1.实现
- 打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页 面中
2.准备
- 安装jdk以及tomcat, tomcat运行在java环境下,所以需要下载jdk
- 进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器。
./startup.sh
我直接关闭了防火墙:
systemctl stop firewalld
3.访问过程
4.配置
a). Windows环境下:C:\Windows\System32\drivers\etc 修改host文件, 添加
192.168.52.126是虚拟机的ip地址
b). Linux环境中修改nginx的配置文件:
最后再windows环境中输入 www.123.com, 最终成功跳转到tomcat的欢迎页
四、Nginx 反向代理 配置实例 1.2
1.实现目标
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
启动服务:nginx, tomcat:8081, tomcat:8082
2.tomcat配置
准备两个 tomcat,一个 8081 端口,一个 8082 端口。
在**/usr/righteye/Tomcat/下 新建tomcat8081和tomcat8082两个文件夹,将 Tomcat安装包 分别上传到两个文件夹,进行解压缩安装,8081的Tomcat只改一个http协议默认端口就行,直接启动即可。
这里需要改8082的端口号,需要修改三个端口,只修改一个端口号的话,是启动不了的,(如果只修改http协议默认端口的话,8081和8082只会启动一个)。
文字来源:https://blog.csdn.net/qq_40036754/article/details/102463099
tomcat8082配置: conf/server.xml
准备测试页面放到tomcat_xx/webapps/righteye_8081|righteye_8082目录下面
3.修改nginx配置文件
4.显示结果
五、负载均衡 配置实例
1.实现效果
浏览器地址栏输入地址 http://192.168.52.126/righteye_8081/a.html,负载均衡效果,平均 8081 和 8082 端口中
2.tomcat配置
拷贝端口8082的tomcat下webapps中的righteye_8082修改为righteye_8081
3.nginx配置
修改配置文件:conf/nginx.conf,在配置实例1的基础上进行修改
# 负载均衡 配置实例 新加部分 start
upstream myserver {
server 192.168.52.126:8081;
server 192.168.52.126:8082;
}
# 新加部分 end
server {
listen 80;
server_name 192.168.52.126;
location / {
root html;
# proxy_pass http://127.0.0.1:8080;
proxy_pass http://myserver;
index index.html index.htm;
}
}
4.实现效果
默认80端口,可以省略
访问地址相同,但是负载到的tomcat不一定是哪个端口
5.nginx负载均衡分配策略
负载均衡:负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应 足够快,给用户很好的体验。
负载策略:
a.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
b. weight
weight 代表权重, 默认为 1,权重越高被分配的客户端越多
# 负载均衡 配置实例 新加部分 start
upstream myserver {
server 192.168.52.126:8081 weight 5;
server 192.168.52.126:8082 weight 10; # 承受的客户端是上面的一倍
}
# 新加部分 end
server {
listen 80;
server_name 192.168.52.126;
location / {
root html;
# proxy_pass http://127.0.0.1:8080;
proxy_pass http://myserver;
index index.html index.htm;
}
}
c. ip_hash
ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
# 负载均衡 配置实例 新加部分 start
upstream myserver {
ip_hash;
server 192.168.52.126:8081;
server 192.168.52.126:8082;
}
# 新加部分 end
server {
listen 80;
server_name 192.168.52.126;
location / {
root html;
# proxy_pass http://127.0.0.1:8080;
proxy_pass http://myserver;
index index.html index.htm;
}
}
采用ip_hash策略下,假设用户第一次访问的是8081端口,那么之后访问的也会是8081,保证访问同一个服务端。解决session共享问题
d. fair(第三方)
fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
# 负载均衡 配置实例 新加部分 start
upstream myserver {
server 192.168.52.126:8081;
server 192.168.52.126:8082;
fair;
}
# 新加部分 end
# 省略后面代码
六、动静分离 配置实例
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种:
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
1.准备工作
在linux的根目录中/创建文件夹data, 创建子文件夹/www, /image存放html(静态资源)和图片(动态资源)
2.配置nginx
在负载均衡配置实例基础上修改(意思用同一个server,其实没啥联系)
server {
listen 80;
server_name 192.168.52.126;
# 省略其他代码
location /www/ {
root /data/;
}
location /image/ {
root /data/;
autoindex on; # 列出当前目录的内容
}
}
3.实现效果
测试图片 http://192.168.52.126/image/01.png
测试html页面 http://192.168.52.126/www/test.html
七、nginx实例 高可用
上述实例中出现的问题:
高可用模式:
虚拟ip:
图中多个nginx的ip不同,因此对外暴露一个公共的实际不存在的虚拟ip;keepalived用于监听nginx是否存活
1.准备工作
- 配置第二台nginx
- 两台服务器上安装keepalived
a)安装:
第一种方式:命令安装
yum install keepalived -y
# 查看版本:
rpm -q -a keepalived
第二种方式:安装包方式
命令如下:
cd /usr/righteye/
tar -zxvf keepalived-2.0.18.tar.gz
cd keepalived-2.0.18
./configure
make && make install
b) 配置文件
安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf 。
这个就是主配置文件。
主从模式主要在这个文件里配置。
c) 修改配置文件
/etc/keepalived/keepalived.conf
global_defs { # 全局配置
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 208.208.128.122
smtp_connect_timeout 30
router_id LVS_DEVEL #主机的名字
}
vrrp_script chk_http_port { # 检测脚本配置
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 { # 虚拟ip配置
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface ens32 //网卡 使用ifconfig进行查看
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.52.50 // VRRP H 虚拟地址
}
}
配置文件中:script "/usr/local/src/nginx_check.sh" ,在这个路径下创建脚本文件
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
修改的东西按注释即可,网卡,脚本位置,Master还是Backup
2.启动服务
keepalived:systemctl start keepalived.service
3.测试
在浏览器中输入虚拟ip地址 192.168.52.50
此时关闭主服务器仍可访问,服务器转移到备份服务器;当两台服务器的nginx全部关闭后,页面无法访问
使用ip a查看配置的虚拟ip
八、Nginx原理
nginx启动后,会存在两个线程master, worker, 当新的请求过来,worker直接通过争抢的方式获取这次请求,然后执行后续工作
一个nginx只能一个Master,但可以有多个worker
master-workers的优点
首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销, 同时在编程以及问题查找时,也会方便很多。
可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
其次,采用独立的进程,可以让互相之间不会 影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当 前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
worker数和服务器的cpu数相等最适宜
连接数 worker_connection
第一个:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个
第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?
普通的静态访问最大并发数是: worker_connections * worker_processes /2,
而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。
总结:
案例文字教程下面链接:
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全_冯安晨-CSDN博客_nginx 反向代理配置文件
视频教程可以参考尚硅谷 nginx