Nginx
Nginx的产生
没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以URI或者URL作为沟通依据,通过HTTP协议提供各种网络服务。然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特点。
Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。
这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。
俄罗斯的工程师Igor Sysoev,他在为Rambler Media工作期间,使用C语言开发了Nginx。Nginx作为WEB服务器一直为Rambler Media提供出色而又稳定的服务。然后呢,Igor Sysoev将Nginx代码开源,并且赋予自由软件许可证。
由于:
- Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
- 高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)
- Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
- 这些优秀的设计带来的极大的稳定性
所以,Nginx火了!
什么是nginx
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。之前keepalived请求服务只能是本地服务器之间跳转(一个局域网里面),无法实现跨域访问,但是往往很多电商平台,他们的服务器不是集中在一个机房(局域网)里面的,有的在北京,有的在上海、杭州这些地方,要想让服务继续执行,这里就得用nginx进行反向代理模式,使之能够跨域访问。在高连接并发的情况下,Nginx是Apache服务器不错的替代品。(你就把他想成能跨域访问的Apache服务器)
配置nginx
开机状态为四个虚拟机做快照,备份node01,02,03,04四个服务器,然后开始重新配置环境:
[root@node01 ~]# ifconfig eth0:2 down
[root@node01 ~]# ipvsadm -C
[root@node01 tengine-2.1.0]# service keepalived stop
[root@node04 ~]# service keepalived stop
在node01服务器上安装nginx。
[root@node01 soft]# tar zxvf tengine-2.1.0.tar.gz
先把这些服务器的yum源配置好。
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum clean all
yum makecache
[root@node01 tengine-2.1.0]# yum install gcc
[root@node01 tengine-2.1.0]# yum install pcre-devel.x86_64
yum install openssl-devel
[root@node01 tengine-2.1.0]# ./configure --prefix=/opt/neusoft/nginx
Make
Make install
进入目录:[root@node01 nginx]# cd /etc/init.d/
[root@node01 init.d]# chkconfig #此命令查看没有nginx的服务,如果需要就要在这里配置。
[root@node01 init.d]# vi nginx
将nginx附件里面的内容全部粘贴到该文件中。
脚本编译完成后需要授权:
[root@node01 init.d]# chmod +x nginx
[root@node01 init.d]# service nginx status #上面配置好后这里就可以有状态和启动停止了。
[root@node01 init.d]# chkconfig nginx on #设置开机启动
[root@node01 init.d]# service nginx start
http://node01/
nginx配置文件
反向代理:客户端访问要跟nginx握手,然后nginx在跟realserver服务器握手。Nginx也是为了解决高并发的问题。
[root@node01 init.d]# cd /opt/neusoft/nginx/conf/
[root@node01 conf]# cp nginx.conf nginx.conf.bak
[root@node01 conf]# vi nginx.conf
配置文件解析:
Server服务:
- listen:监听端口
- Location:监听路径,用户访问代理服务器的uri匹配地址。
- 代理服务
正常情况下,一个web容器运行在一台服务器上,尽管这个web容器,如:tomcat,下面可以部署多个web项目,但是这些web项目的顶级域名都是一个地址,也就是说用户访问的地址其实还是一个。只不过是二级或三级地址来区分项目名称。Nginx的特点就是也能模拟一个web容器下有不同的项目的模式,但是访问的地址可以跨域访问。
添加server配置插入以下信息
server {
listen 80;
server_name www.qq.com;
location / {
return 888;
}
}
server {
listen 80;
server_name www.taobao.com;
location / {
return 666;
}
}
[root@node01 conf]# service nginx reload
修改windows中的hosts文件并访问测试
192.168.43.170 node01 www.qq.com www.taobao.com
在谷歌浏览器中访问地址:
www.taobao.com/
www.qq.com
反向代理配置成功。
执行过程分析:用户在浏览器访问淘宝的时候,根据hosts的映射来匹配node01这个服务器,的默认80端口,这个时候被node01服务器的nginx所监听,处理,根据server_name来匹配淘宝还是qq,匹配对应的server_name后来做location响应,返回状态码:888或666。
修改nginx.conf配置文件,可以映射到具体文件夹:
配置好后存盘退出:
[root@node01 conf]# service nginx reload
http://www.qq.com/
这种模式可以通过url映射代理到服务器的某个目录下。
配置代理
[root@node01 conf]# cd /opt/neusoft/nginx/html/
[root@node01 html]# mkdir abc
[root@node01 html]# cd abc/
[root@node01 abc]# vi i1.html
在Windows系统上的hosts文件中配置:192.168.43.170 node01 www.qq.com www.taobao.com www.jd.com
[root@node01 conf]# service nginx reload
在浏览器中访问京东:http://www.jd.com/
再输入地址:http://www.jd.com/abc/i1.html
,就映射到abc目录下的i1.html文件了。这就实现了跨域。