一、配置多个虚拟主机
虚拟主机:
查看/conf目录下的nginx.conf
我们配置多个server,
有三种不同的方式配置虚拟主机:
基于ip的虚拟主机 基于端口的虚拟主机 基于域名的虚拟主机
(1)指定不同的server_name (基于域名的虚拟主机)
可以分别指定不同目录下的界面index,我这里指定了同一目录下的界面。
第一个server:
第二个server,指定的index与第一个server不一致:
配置windows的路由映射:
C:\Windows\System32\drivers\etc
打开hosts
启动nginx server 关闭防火墙
通过浏览器访问
(2)指定不同的端口号(基于端口的虚拟主机)
配置server,指定不同的监听端口号:
配置windows路由映射
通过不同的端口号进行访问
(3)基于ip的虚拟主机
首先查看一下我们的ip
添加一个虚拟ip地址:
我们ping一下这个ip,是通的
配置nginx.conf中的server,我们配置不同的ip
我们通过不同的ip进行访问:
附加:删除虚拟ip
二、访问限制
1.ip访问控制
在nginx.conf中配置
location / {
deny 192.168.0.106;
allow 192.168.80.129;
deny all;
root html;
index index.html index.htm;
}
deny代表阻止访问的 后面配置ip
allow代表允许访问的 后面配置ip
deny all 代表阻止全部的访问
匹配原则是从上到下进行匹配,如果匹配到就不进行下面的匹配了。
这里我配置的是windws的ip不允许访问我的服务,另一台节点机允许访问,效果如下:
windows进行访问:
节点机2进行访问:
如果访问有问题可以通过查看对应的日志进行定位:
在logs目录下的access.log进行查看访问情况
error.log可以查看错误信息
2.登录认证访问
通过官网资料,我们可以看到,密码的加密建议使用htpasswd,将用户名和密码存到某个文件中
htpasswd -bcm /programhome/zaxiang/userpass 用户名 密码
配置nginx.conf
location / {
auth_basic "hello audit";
auth_basic_user_file /programhome/zaxiang/userpass;
root html;
index index1.html index1.htm;
}
重启nginx
运行结果:登录正确的用户名和密码就能访问
三、反向代理和负载均衡以及状态监控
代理服务
(1)配置转发的路径
location / {
proxy_pass http://192.168.80.128:8080;
root html;
index index1.html index1.htm;
}
proxy_pass 是转发到的地址
当访问的时候,nginx接收到请求之后转发至http:192.168.80.128:8080,并将返回的数据返回给客户端
(2)负载均衡
需要使用upstream模块(nginx.conf)
upstream backend {
server 192.168.80.129:8080;
server 192.168.80.128:8080;
}
location / {
# deny 192.168.0.106;
# allow 192.168.80.129;
# deny all;
proxy_pass http://backend;
root html;
index index.html index.htm;
}
我们通过访问同一个地址,他会分发到不同的主机上进行运行,这样就实现了负载均衡。并且可以配置其权值weight,weight值越大越有可能被分发。
例如:
upstream backend {
server 192.168.80.129:8080 weight=3;
server 192.168.80.128:8080 weight=2;
}
(3)tengine服务器运行状况监测
仍然是在upstream模块中监控进行分发的几个主机的服务的运行状况
upstream backend {
server 192.168.80.129:8080 weight=3;
server 192.168.80.128:8080 weight=2;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
增加一个location
location /status {
check_status;
}
当然这个location可以设置权限,访问的ip等,实现某些ip可访问。
我停掉129的服务
我重新启动129的服务
四、解决集群session一致性问题
(1)安装memcached内存数据库
yum -y install memcached
启动服务
service memcached start
测试是否可用
telnet localhost 11211
set username 0 0 6
123456
(2)将memcache所需要的jar包放入lib下
(3)修改tomcat的配置文件server.xml
第一台服务器的配置
第二台服务器的配置
其缓存标志加以区分
(4)将两台服务跑起来我们看看效果,这个时候每个服务都取自己独有的session
第一台
第二台
(5)修改tomcat的配置文件context.xml
实际上是让每个服务器获取session的时候都向同一个地方去拿session,我的memcached服务部署到另一台主机上192.168.80.130上
memcachedNodes="n1:192.168.80.130:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
(6)重新启动tomcat,查看结果,发现用的sessionid是一样的说明用的同一个session
第一台
第二胎
五、keepalived
其功能在于,当一台主机宕机的时候,备用主机可以顶上,从客户端的角度是无法识别的。
(1)安装keepalived
(2)配置主备机的keepalived配置,/etc/keepalived.conf
配置区别是state不同
副配置
! Configuration File for keepalived
#全局配置
global_defs{
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
state BACKUP #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 99 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
virtual_ipaddress { #设置vip
192.168.80.131 #可以多个虚拟IP,换行即可
}
}
主配置
! Configuration File for keepalived
#全局配置
global_defs {
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
state MASTER #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
virtual_ipaddress { #设置vip
192.168.80.131 #可以多个虚拟IP,换行即可
}
}
(3)启动两台主机的keepalived服务,service keepalived start
(4)当我们主机宕机或者keepalived服务停掉之后,就会切换到备用机上,从客户端的角度看是无法察觉的。