nginx集群学习 - Go语言中文社区

nginx集群学习


一、配置多个虚拟主机

虚拟主机:


查看/conf目录下的nginx.conf

我们配置多个server,

有三种不同的方式配置虚拟主机:

基于ip的虚拟主机  基于端口的虚拟主机  基于域名的虚拟主机

(1)指定不同的server_name (基于域名的虚拟主机)

可以分别指定不同目录下的界面index,我这里指定了同一目录下的界面。

第一个server:


第二个server,指定的index与第一个server不一致:


配置windows的路由映射:

C:WindowsSystem32driversetc

打开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.0rnrn";

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

第一台服务器的配置

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

第二台服务器的配置

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

其缓存标志加以区分

(4)将两台服务跑起来我们看看效果,这个时候每个服务都取自己独有的session

第一台

第二台

(5)修改tomcat的配置文件context.xml

实际上是让每个服务器获取session的时候都向同一个地方去拿session,我的memcached服务部署到另一台主机上192.168.80.130上

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

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服务停掉之后,就会切换到备用机上,从客户端的角度看是无法察觉的。








版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_15268359/article/details/80807048
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 12:07:12
  • 阅读 ( 670 )
  • 分类:Go Web框架

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢