Nginx 初探(5)——Nginx的高可用
一、回顾
通过前面四章的学习,学会了Nginx的安装、配置虚拟主机、反向代理、负载均衡,这基本上就是 Nginx 的大概内容了。
我们知道,nginx 其实是一个代理,客户端通过 nginx 才能够访问到后面的应用服务器(tomcat等)。那么如果 nginx 宕机,即使后面的应用服务器没有出现故障,客户端也不能正常访问了,因此保证 nginx 的高可用十分重要。
二、keepalived
既然 nginx 如此重要,因此我们可以准备两台 nginx 服务器,组成nginx主/从服务器。我们使用 keepalived 来帮助实现主/从服务器的切换。
keepalived 有一个对外提供的 VIP(Virtual IP Address),它捆绑哪个 IP 地址就会使用哪一台 nginx 服务器。
当主服务器没有宕机时,VIP 指向主服务器,从服务器会不停给主服务器发送心跳包,主服务器会回复从服务器心跳包。
当从服务器没有收到主服务器返回的心跳包时,keepalived 就认为主服务器宕机了,它会将 VIP 切换到从服务器,由从服务器提供服务。
当运维人员修复好主服务器后,keepa ...
Nginx 初探(4)——负载均衡
一、回顾
在上一章《Nginx初探(3)——反向代理》中说到,我们可以为 nginx 配置反向代理,这样 nginx 就能够将客户端的请求根据域名转发给不同的应用服务器,并将应用服务器的结果返回给客户端。
二、负载均衡
在学习完上一章后,你也许会有疑问,一个比较大的网站怎么可能只有一台服务器呢?nginx 能够将请求分配给我这个域名下的多台服务器(服务器集群)吗?
答案是可以的,这就是 nginx 的负载均衡,nginx 能够为一个域名配置多台服务器,这样就能够将客户端的请求分配给每一台服务器,实现负载均衡。
nginx 的负载均衡配置十分简单,这里我就不做具体演示了,直接说如何配置了。以下代码是上一章中关于 www.wxs.com 的 nginx 配置:
1234567891011121314151617181920212223242526upstream wxs { server 192.168.30.149:8091;}server { listen 80; server_name www.wxs.com; ...
Linux 配置多个 Tomcat
我的系统里面原本就有一份 Tomcat ,名称为 tomcat8 :
123wxs@ubuntu:/usr/local$ lsbin games jdk1.8.0_161 man redis share tomcat8etc include lib nginx sbin src zookeeper-3.5.2-alpha
注:本篇文章只使用两台 Tomcat ,配置更多个同理。
复制两份,分别为 tomcat-jit 和 tomcat-wxs :
123456wxs@ubuntu:/usr/local$ sudo cp -r tomcat8/ tomcat8-jitwxs@ubuntu:/usr/local$ sudo cp -r tomcat8/ tomcat8-wxswxs@ubuntu:/usr/local$ lsbin include man sbin tomcat8 zookeeper-3.5.2-alphaetc jdk1.8.0_161 nginx share ...
Nginx 初探(3)——反向代理
一、什么是反向代理
1.1 正向代理
举一个通俗的例子,因为众所周知的原因,我们无法访问谷歌,但是因为某些原因,我们必须要访问谷歌,这时候我们会买一个“梯子”,既然我们无法直接访问谷歌,我们就去麻烦“梯子”帮助我们访问。
事实上我们还是没法访问谷歌,只是这个“梯子”能够访问,它只是将访问结果返回给我们而已。这里的“梯子”就是一个正向代理,它是帮助客户端也就是我们用户来代理的。
1.2 反向代理
举个例子,你的手机号码出了点毛病,你要去找 10086 解决问题,但是最后接线员是谁你并不能确定,接线员是系统分配的,系统看哪位接线员有空就将你的电话转到他那边。这里的系统其实就是一个反向代理,大家都访问 10086,但是接线员每个人都不一样。
回到程序的世界中,如果 www.baidu.com 这个域名下的网站放在好几个服务器上(组建集群),如图所示:
用户访问 www.baidu.com 这个域名,但是具体访问哪一台服务器不需要用户关心,nginx 会帮助我们将我们的请求转发(forward)到某一台服务器上,然后将请求返回给用户。
1.3 总结
总结一下:
正向代理为客户端 ...
Nginx 初探(2)——配置虚拟主机
一、引入
我们知道,要想在一台服务器上配置多个网站,服务器有两种方法进行区分,一种是通过端口号,一种是通过域名。
若一台主机192.168.30.145上面部署了两个网站,一个是 www.jitwxs.cn ,一个是 www.baidu.com 。
如果使用端口号区分,若想访问 www.jitwxs.cn 使用192.168.30.145:80,访问 www.baidu.com 使用192.168.30.145:81。这是不友好的,因为 http 默认端口为 80,用户如果忘输了网站的端口,不就进了别人的网站吗,用户体验极差。
如果使用域名进行区分,都只用访问 192.168.30.145,nginx 内部判断用户输入的域名是 www.jitwxs.cn 还是 www.baidu.com ,无需用户关心,体验好。
二、使用端口号配置虚拟主机
说明:我的 nginx 安装目录为 /usr/nginx
打开 /usr/nginx/conf/nginx.conf 文件,我们关心的是其中的 server 节点。
一个 server 节点就是一台虚拟主机,location / 子节点中的 ...
Nginx 初探(1)——搭建环境
一、安装依赖
安装环境:Ubuntu 16.04
1.1 g++
apt-get install g++
1.2 openssl
wget https://www.openssl.org/source/openssl-1.1.1-pre3.tar.gz
tar zxvf openssl-1.1.1-pre3.tar.gz
cd openssl-1.1.1-pre3/
./config
make
make install
1.3 zlib
wget https://sourceforge.net/projects/libpng/files/zlib/1.2.11/zlib-1.2.11.tar.gz
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure
make
make install
1.4 pcre
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
tar zxvf pcre-8.42.tar.gz
cd pcre-8.42/
./configur ...
Dubbo + Zookeeper 入门初探
2018年2月15日,阿里巴巴的dubbo进入了Apache孵化器,社区的加入,希望dubbo能变得更好…
最近在学习一个分布式项目,使用到了dubbo,之前没有使用过,体验一下,分布式项目地址:点击这里。
下面我使用dubbo官网的一张图来介绍下dubbo(本人才开始学习,如有错误,欢迎指正):
Registry:注册中心,相当于房产中介,服务提供者和使用者都需要在这里注册/使用服务,我使用 zookeeper 实现。
Monitor:监控中心,相当于房产局,它可以统计服务提供者和服务使用者的一些信息,及他们之间的关系,我使用 dubbo admin 实现。
Provider:服务提供者,相当于房东,提供服务。
Consumer:服务消费者,想当于租户,使用服务。
下面我通俗的解释下 dubbo 的整个流程,我将服务比喻成房子:
start:dubbo 一启动,房东想好自己准备要租出去的房子
register:房东将房子拿到房产中介那边进行登记,并留下自己的联系方式
subscribe:租户告诉房产中介自己想租一个什么样的房子
notify:房产中介回复给租 ...
SpringBoot 集成 Shiro 安全框架
Shiro 是在 Java Web 开发中,比较常见的安全框架技术,在本文章,将介绍如何在 SpringBoot 中去使用 Shiro。在本篇文章中,使用的技术为:SpringBoot 2.0、Shiro 和 MyBatis-Plus,下面就跟着我来一步步实践吧。
一、导入依赖
1234567891011121314151617181920212223242526272829303132333435363738394041424344<!-- SpringBoot Web包 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artif ...
Shiro 解决无法注入 Service 问题
今天在使用Spring Boot集成Shiro时出现了无法注入Service的问题,解决后来记录一下。
问题现象:
在ShiroRealm中进行身份验证,要将登陆模块的Service注入进来进行验证,但是其值为null。
1234567public class ShiroRealm extends AuthorizingRealm { @Autowired ILoginService loginService; // <---这里值为null ...}
问题原因:
ShiroRelam属于filter即过滤器,它在Spring未完成注入bean之前就已经拦截了,因此无法注入。
对于SpringBoot,没有将ShiroRealm注入Bean。
Spring MVC 解决办法:
对于Spring MVC,解决办法很简单,直接将Spring MVC在web.xml中提到shiro之前即可:
123456789101112131415161718192021222324252627282930313233343536373839< ...
Java8 日期处理
java中做时间处理时一般会采用java.util.Date,但是在Java 8中新增了对日期的处理类,包括java.time.LocalDate、java.time.LocalTime、java.time.LocalDateTime等。
java.util.Date和SimpleDateFormatter都是线程不安全的,而LocalDate和LocalTime和最基本的String一样,是不变类型,不但线程安全,而且不能修改。
在Java 8中,日期和时间被明确划分为LocalDate和LocalTime,LocalDate无法包含时间,LocalTime无法包含日期。当然,LocalDateTime才能同时包含日期和时间。
新接口更好用的原因是考虑到了日期时间的操作,经常发生往前推或往后推几天的情况。用java.util.Date配合Calendar要写好多代码。
获取实例
1234567891011121314// 1.使用now方法LocalDate localDate = LocalDate.now();LocalTime localTime = LocalTime.no ...