1.nginx配置实例-负载均衡
1.实现效果
(1)浏览器地址栏输入http://192.168.44.128:8081/edu/a.html,负载均衡效果,平均8080和8081端口
2.准备工作
(1)主备两台tomcat服务器,一台8080,一台8081
(2)在两台tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件夹中创建a.html,用于测试
3.在nginx的配置文件中进行负载均衡的配置
在http块中添加如下配置信息:
http {
include mime.types;
default_type application/octet-stream;
upstream myserver{
server 192.168.44.127:8081;
server 192.168.44.128:8080;
}
在server中的配置
server {
listen 80;
server_name 192.168.44.128;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
重启ngnix配置
[root@localhost sbin]# ./nginx -s reload
2.Nginx 提供了几种分配方式(策略)
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、 weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
指定轮询几率, weight 和访问比率成正比,用于后端服务器性能不均的情况。
upstream server_pool{
server 192.168.5.21 weight=10;
server 192.168.5.22 weight=10;
}
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream server_pool{
ip_hash;
server 192.168.5.21:80;
server 192.168.5.22:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
3.nginx配置实例–动静分离
动态请求和静态请求分离。
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上。
另一种方法是动态跟静态文件混合在一起发布,通过nginx来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。
具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200。
2.准备工作
(1)在linux系统中准备静态资源,用于进行访问
3.具体配置
(1)在nginx配置文件中进行配置
server {
listen 80;
server_name 192.168.44.128;
#charset koi8-r;
#access_log logs/host.access.log main;
location /www/ {
root /data/;
index index.html index.htm;
}
location /image/{
root /data/;
autoindex on;
}
重启ngnix:
[root@localhost sbin]# ./nginx -s reload
4.nginx高可用性准备工作
1.什么是nginx的高可用
(1)需要两台ngxin服务器
(2)需要keepalived
(3)需要虚拟ip
2.准备工作
(1)两台虚拟服务器
测试地址为192.168.44.128和192.168.44.127
(2)在两台服务器上安装nginx
cd nginx-1.12.2
./configure
make && make install
[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s reload
(3)在两台服务器上安装keepalived
yum install keepalived -y
[root@localhost usr]# rpm -q -a keepalived
keepalived-1.2.13-5.el6_6.x86_64
[root@localhost keepalived]# pwd
/etc/keepalived
4.配置
(1)修改/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 192.168.44.128
#smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.44.50
}
}
(2)在/usr/local/src下添加检测脚本
#!/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
(3)把两台机器上nginx和keepalived启动
[root@localhost sbin]# service keepalived start
Starting keepalived: [ OK ]
[root@localhost keepalived]# ps -ef | grep keepalived
root 6093 1 0 17:16 ? 00:00:00 /usr/sbin/keepalived -D
root 6094 6093 0 17:16 ? 00:00:00 /usr/sbin/keepalived -D
root 6095 6093 0 17:16 ? 00:00:00 /usr/sbin/keepalived -D
root 6101 5414 0 17:17 pts/2 00:00:00 grep keepalived
[root@localhost keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:4a:34:25 brd ff:ff:ff:ff:ff:ff
inet 192.168.44.127/24 brd 192.168.44.255 scope global eth0
inet 192.168.44.50/32 scope global eth0
inet6 fe80::20c:29ff:fe4a:3425/64 scope link
valid_lft forever preferred_lft forever
3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
link/ether fe:bf:e8:88:76:9e brd ff:ff:ff:ff:ff:ff
5.访问绑定网址
192.168.44.50
5.nginx的原理
[root@localhost keepalived]# ps -ef | grep nginx
root 26941 1 0 09:19 ? 00:00:00 nginx: master process ./nginx
nobody 26972 26941 0 09:23 ? 00:00:00 nginx: worker process
root 54169 54020 0 12:58 pts/2 00:00:00 grep nginx
2.worker是如何进行工作的
3.一个master和多个woker有好处
(1)可以使用nginx -s reload热部署
(2)每个worker都是独立占用进程,如果有其中一个worker出现问题,其他woker独立的,继续进行争抢,实现请求过程,不会造成服务中断
4.设置多少个worker才是最合适
io多路复用进制(linux)
woker数和服务器的cpu数相等是最为适宜的
5.连接数woker_connection
第一个:发送请求,占用了worker几个连接数(2个或者4个)
第二个:nginx有一个master,有4个worker,每个woker支持最大的连接数是1024,支持的最大的并发量是多少?
woker_connections*woker_processes/2
1024或者2048
6.安装遇到的问题
./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such
解决链接