目录
前言
本文主要是
反向代理,负载均衡,动静分离以及实例
nginx安装,常用命令,原理和配置文件
配置高可用的集群
优点:
- 内存少,并发能力强
- 注重效率,经受高负载的考验
- 热部署,启动容易运行
1. 相关概念
正向代理:依赖代理服务器,即客户端配置代理,访问internet
反向代理:将请求发送到反向服务器,由反向代理服务器转发到不同服务器,暴露的只是访问代理服务器,隐藏了真实的服务器
负载均衡:由于请求量多,并发量多,容易造成服务器崩溃。所以应该增加服务器的数量,将请求分发到各个单独的服务器,即负载到不同服务器。
动静分离:动静态的网页分别由不同服务器解析,降低原先单个服务器压力
2. 软件安装
安装nginx
1.下载安装包
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.6.2.tar.gz
2.ngnix所需要的其他依赖包
由于博主所使用的是ubuntu版本,没有yum,所以用的apt
gcc
$ sudo apt-get install gcc
zlib
$ sudo apt-get install zlib1g-dev
pcre
$ sudo apt-get install libpcre3 libpcre3-dev
openssl
$ sudo apt-get install openssl libssl-dev
检查依赖文件是否安装成功
pcre-config --version
3.压缩并且安装
tar zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure
make
make install
如果安装过程中遇到其他的问题
可参考我上一片的文章
Nginx:objs/Makefile:432: recipe for target ‘objs/src/core/ngx_murmurhash.o‘解决方法
安装成功之后,在usr多出来一个文件夹/usr/local/nginx/sbin
内有一个nginx的启动脚本
4.启动
在该路径下 /usr/local/nginx/sbin执行
./nginx
启动之后 查看是否启动成功
ps -ef | grep nginx
在window不能访问的话,是因为ubuntu开启了防火墙
查看开放的端口号
firewall -cmd --list
设置开放的端口号:
firewall-cmd --add-service=http –permanent
firewall-cmd --add-port=80/tcp --permanent
重启防火墙:
firewall-cmd --reload
3. nginx常用的命令
使用命令的前提是必须进入nginx的目录
/usr/local/nginx/sbin
查看版本号
./nginx -v
启动nginx
./nginx
关闭nginx
./nginx -s stop
重新加载nginx
./nginx -s reload
启动与关闭是否成功,可以查看其进程号
ps -ef | grep nginx
4. nginx配置文件
配置文件在/usr/local/nginx/conf下的nginx.conf
配置文件的组成,由三部分组成:全局块、events块,http块
1.全局块:开头到events,影响服务器运行的配置指令
worker_processes 1; #配置处理并发处理量
#pid logs/nginx.pid; #进程号
2.events块:服务器与用户网络连接
events {
worker_connections 1024; #最大的连接数
}
3.http块:包括http块,server块。代理缓存日志等都在这一块配置
5. nginx配置实例-反向代理案例1
tomcat的window版本配置
可查看我上一篇文章
Tomcat详细配置(全)
1.前期准备工作:
安装tomcat,并且开放8080端口
tomcat官网
下载之后解压
之后进入tomcat的bin目录 ./startup.sh
启动
还需要开放8080的端口号并且重启防火墙
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
通过window浏览器测试访问
2.访问过程的分析:
3.设置过程:
在window设置host文件C:\Windows\System32\drivers\etc
配置ip 以及域名为 172.22.109.86 www.123456.com
如果单纯在浏览器中访问 www.123456.com即默认访问172.22.109.86即为nginx服务器,如果加了端口号8080 默认访问了tomcat,更进一步。
那么要在nginx中进行请求转发配置(反向代理配置)
在nginx的配置文件中进行地址转发,打开/usr/local/nginx/conf
修改如下地址
server {
listen 80;
server_name 192.168.17.129;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
将localhost改为虚拟机ip地址
,将html改为主机本地地址proxy_pass http://127.0.0.1:8080;
即可成功访问
6. nginx配置实例-反向代理案例2
和第5步一样,设置两个服务器和端口号
修改配置文件的端口号/Tomcat8081/apache-tomcat-7.0.106/conf
gedit server.xml
修改服务器的端口号,服务器端口号可以随意
修改端口号
端口号的权限在命令行记得打开 ,需要开放的有9001,8080,8081
具体配置反向代理需要在nginx配置
server {
listen 9001;
server_name 192.168.17.129;
location ~/edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~/edu/ {
proxy_pass http://127.0.0.1:8081;
}
location的样式
~ 区分大小写
~* 不区分大小写
7. nginx配置实例-负载均衡
负载分摊到不同的服务器,服务的可用性,速度,以及用户体验
1.输入一个网址,平均分摊到多台服务器中的其中一台
主要区分在于nginx的配置文件
在http文件内部 添加一个
upstream myserver{
server 192.168.77.130:8080;
server 192.168.77.130:8081;
}
后在server中修改端口号以及转发路径
server {
listen 80;
server_name 192.168.17.129;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
注意其中的区别 ,proxy_pass http://myserver;
配置完之后 重启以下nginx,./nginx -s reload
用ip地址访问,会在两个服务器之间来回访问,如果两个服务器不一样,即访问结果会不一样
2.负载均衡分配服务器的策略:
1.轮询(默认):即按顺序,如果某个服务器没了,则访问其他服务器
2.权重:根据权重分配的服务器,权重越重,分配该服务器可能性越大
upstream myserver{
server 192.168.77.130:8080 weight=10;
server 192.168.77.130:8081 weight=14;
}
3.ip_hash
一个ip固定一个服务器的访问,根据ip的hash结果分配
upstream myserver{
ip_hash
server 192.168.77.130:8080;
server 192.168.77.130:8081;
}
4.fair
按照服务器的响应时间来分配,响应时间短分配越快
upstream myserver{
fair
server 192.168.77.130:8080;
server 192.168.77.130:8081;
}
8. nginx配置实例-动静分离
nginx处理静态页面,tomcat处理动态页面
动静分离有两种方案:
一种是把静态文件独立成单独域名,用单独的服务器处理(多)
一种是动静态混合,使用nginx服务器将其分开(少)
动静分离主要是提高访问的效率
location中不同后缀名实现不同请求的转发
expires设置浏览器缓存过期时间,没过期的话,通过缓存而不是服务器,通过浏览器自身判断。如果变化过多的话,不适合弄缓存,实时比较好
nginx的配置文件配置
将原先此处的初始文件
location /www/ {
root html;
index index.html index.htm;
}
改为:
server {
listen 80; #监听80端口
server_name 192.168.17.129; #自身的ip地址
location /www/ { #访问开始地址
root /data/; #访问的静态网页后地址
index index.html index.htm;
}
location /image/ {
root /data/;
index index.html index.htm;
autoindex on;
}
每修改以下配置要重启以下nginx
此处的静态网页中 相当于放到nginx的服务器中
9. nginx配置实例-高可用集群
nginx如果坏了,那直接请求不了,所以要配置高可用
1.搭建两个nginx服务器,主master和备份backup服务器
如果主服务器挂掉,还可以自动切换回备份服务器
由于nginx两个服务器,所以需要设置一个虚拟ip的访问,和两个服务器ip进行绑定
两个服务器,即两个ubuntu环境
2.可以通过keepalived设置服务器是否还存在
由于博主用的是ubuntu版本,安装的时候是apt-get 而不是yum
apt-get install keepalived -y
keepalived的配置文件在 /etc/keepalived中的keepalived.conf中
设置高可用只需要改这个配置文件即可
9.1 keepalived配置文件-模板
配置文件中有注释以及一些功能修改
配置文件中主要包含这三个方面:
- global 全局定义
- 检测脚本以及权重的参数(是否还活着)
- 虚拟ip配置
全局定义中的主机名字在/etc/hosts文件中,只需要修改hosts文件
可以额外自已添加一个
127.0.0.1 LVS_DEVEL
! Configuration File for keepalived
#此处为全局定义
global_defs {
#默认不修改
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
#修改此处的ip地址
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL # 主机名字
}
#检测脚本以及权重的参数(是否还活着)
vrrp_script chk_http_port {
#脚本配置文件的路径,需要配置脚本
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)每隔两秒检测一次
weight 2 # 权重
}
#虚拟ip配置 包括状态 网卡 优先权 以及虚拟ip地址
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface eth33 # 网卡名字,可通过ifconfig查询网卡名字
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #检测是否还活着
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.77.50 # VRRP H 虚拟地址
}
}
上面配置脚本的设置为
#!/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
配置完之后启动
systemctl start keepalived.service
查看是否虚拟地址绑定成功
ip a
10. nginx原理分析
有两进程master和worker
一个master和多个worker
- 利于nginx -s reload热部署,即有个重启后,其他还可以进行
- 每个worker独立占有进程,方便操作不用加锁
- nginx与redis都是采用io多路复用机制,所以worker数和cpu数相等最合适
- worker连接数,发送一个请求,连接数可能是2/4(静态是client和worker,动态还需要一个tomcat)
- 支持最大并发数:动态worker_connections * worker_processes/4 ,静态worker_connections * worker_processes /2。即work个数*每台work连接发送数
10. 1 nginx配置文件-模板
nginx配置文件
#设置负载均衡的一些参数 权重还有开放端口号
upstream myserver{
server 192.168.77.130:8080;
server 192.168.77.130:8081;
}
server {
listen 80; #监听的端口号
server_name 192.168.17.129; #自身的ip地址
#转发地址 还可加uri的地址表达式
location / {
root html; #静态网页后缀
proxy_pass http://127.0.0.1:8080; #tomcat动态网页转发地址
index index.html index.htm;
#此处可加一些负载均衡的参数设置 fair/ip_hash/等
}
配置完之后重新启动nginx的服务器
./nginx -s reload
同时开放端口号以及重启防火墙设置
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
查看是否有这进程
ps -ef | grep 文件