nginx
给我介绍一下 Nginx
(What Nginx 是什么)
对于 nginx,它实际上是一个性能很高的 http 和反向代理服务器,它特点是内存占用少,并发
访问能力强,据说 BAT(百度 阿里 腾讯)这些大公司都使用这个技术,所以这个技术在咱们
IT 这个行业算是比较重要。
对于 nginx,其实内容比较多,我还专门从淘宝上看了,有专门的书籍来介绍 nginx,(或者
说我还专门买了一本书,研究了一下),这里呢,我就介绍个大概吧。
在 nginx 源码层面上呢,它使用的是 linux 内核提供的一个新的叫做 epoll 的功能。可以实
现单线程支持高并发的连接和请求.nginx 底层实现,也是 c 语言的实现,指针这块用的非常
灵活.它的机制是采用了事件驱动机制.之前我们要是解决高并发的话,肯定会第一用多线程,
但是这个 nginx 它的一个主要优势采用的是单线程异步驱动这种形式来解决高并发,当然,
再里边我确实还没有看到.
(Why 为什么用到 nginx)
咱们还是说一下 nginx 两大主要的功能吧,一个是反向代理,一个是负载均衡,先说一下这个
反向代理,那说反向代理,咱们还得先说一下正向代理,其实咱们平时调试开发都是正向代理,
只不过我们不说这个词.比如吧,我们访问一台 tomcat,默认端口号是 8080,那我们访问的时
候可能就是 localhost:8080,这样顺着来呢,就可以理解成一个正向代理,就这样理解哈,
其实正向代理这个概念呢我查过,严格来说呢是位于客户端和原始服务器之间的服务器。
这个时候,如果我们想要再来一台服务器呢,我们可以配一下,把端口号改成 8081,通过访问
不同的端口号来访问, 但是当我们项目要上线的时候,如果需要把一个项目如果部署到两台
服务器上,比如淘宝,这么大,它的主界面不可能是在一台服务器上放着,就不能是访问
8080 或者 8081 这些端口了,这个时候,需要有一个代理的服务器,能够给这两台服务器做
一个代理,直接不需要进行标明,就可以访问到任意一台服务器,找到这个主界面。这里呢,
这个代理就可以代理这些服务器了,这个时候这个代理,我们可以理解成反向代理。反向代
理严格的概念是通过代理服务器来接收网路上的请求,然后将请求转发给内部网路的服务器。
而 nginx 可以干这个活,做这个代理,我们可以在 nginx 中配置端口,ip 或者域名指向这
些不同端口,甚至不同 ip 的服务器。这就是反向代理这个概念。
Nginx 还有一个重要的功能叫做负载均衡,我们做服务器的集群,怎样保证集群中服务器被
均等的进行访问呢,不能说我们认为搭建好了服务器的集群它就会均衡的去访问,这个时候
我们可以统一的去访问 nginx 这个服务器,在 nginx 的配置信息中,去配置好这些服务器,
它配置文件是这样的,只要你配上,默认访问的比率就是一样的,这个就是负载均衡,当然
nginx 更厉害的是可以配置权重,比如说哈,我两台服务器,其中一台性能比另外一个性能
好 2 倍,那我是不是应该访问性能好的服务器频率更高一些,咱们就可以在 nginx 的配置文
件中配置一个 weight 属性,指定权重。当然还有其他一些配置的,比如有些服务器需要整
修,那咱们就可以配置某台服务器暂时 down 掉,这样用户访问的时候,就不会访问到这台
服务器,当修好之后,我们在把这个配置信息干掉就行了。
(How 怎么配置 Nginx)
其实,在公司里开发,我经历的这几家都配置了 nginx 的服务器,按照规范的做法的话,我
们公司里边应该是有两台 nginx 服务器,一主一备,在这两台服务器上呢,都安装一个 keep
的软件,弄一个脚本,通过 keepalive 来检测服务器是否运行,主机挂了就把服务切到备用
的这台上,这样的话基本就不会出问题了。当然,有的小公司就直接搞一台。挂了就挂了,
不过 nginx 服务器很少挂,因为它高负载下 cpu 消耗依然很低
对于 nginx 配置的话,上家公司倒是配置过一次,我简单说一下吧。
首先是在服务器上安装 nginx,这个按照文档来就行,网上有好多安装资料,自己也整理了
好多安装文档,解压,make 编译,make install 安装,然后./nginx start 启动,nginx
安装算是比较简单。
然后配置 nginx,nginx 的配置其实就是配一个核心文件,在 nginx 中的 conf 下有一个
nginx.xml,主要是修改这个配置文件,比如咱们配置反向代理和负载均衡服务器,配置一
个 proxy_pass 指向代理服务器,配一下 upstream server 指向要访问的 ip 和端口,这个
可以配置多个 ip,可以设置 weight 权重。
Nginx 使用方法?
nginx就是一个反向代理服务器么,当时我们做的时候就是做的一个集群,就是前台一个页面
配置了6个服务器,用n做的反向代理,当时我们还配了权重,就是使用n的权重,就是根据服务
器的配置的高低给它设置权重的大小,后期我们设置了一个session共享的一个问题,因为我
们项目不是分布式的嘛,我们用的是redis缓存保存的那个用户信息,然后把配置保存到本地
去,然后去本地去配置,再去redis去数据信息,n大概就是这些东西
如果说的更深入一点的话就是听运维那边说的,n也有可能挂掉,当时我们搭建了两个
n,takelaireber发送的一个贮备的n,它是发送的sintill协议,然后实时的去监控主服务器,
互相监控,看这个服务器是否存活,一旦主服务器挂掉的话,它的备用服务器就会马上启动起
来,我听运维的说的就是用的这个套路
当时我搭建的时候就是搭建了一个单机版,没有去搭建主备,你们要是搭配贮备n的话我跟我
原来公司的运维要一下那个安装文档,然后过来给你搭一个这个主备的,你们公司用到内个
nginx了吗