本文概览:主要包括nginx介绍、安装和配置三个部分。
1 nginx介绍
1.1 引入
apache不具备高并发特性,所以为了适应高并发,引入了nginx。可以将nginx理解为高并发而生的htpp服务器。nginx提供的两大功能:
- 反向代理。关于反向代理百科定义:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。所以通过反向代理可以实现将不同请求打到不同内部服务实例上。
- 负载均衡。当nginx通过反向代理映射了很多服务器实例,可以保证每一个实例被均衡的调用。
1.2 比较tomcat
在web最开始时,网站都是静态网站的,即都是html页面,通过apache服务器来访问这些静态资源。nginx和apache一样,也是静态网站的http服务器。后来动态网站开始兴起,以java的servlet、jsp、spring mvc等这些是动态生成html页面的,显然nginx和apache都是不支持的,这就是tomcat作用了,它即可以动态生成html页面,也可以实现http服务器的功能。所以:
- nginx和apache都是面向静态网站的http服务器。
- tomcat是面向动态网站的http服务器,即可以动态生成html页面,也实现了静态网站的http服务器的功能。tomcat是面向java的动态网站,对于动态网站实现还有php、c#的.net等,目前主流是java web和php,其中java web更适合企业级部署,这是因为:开发时,有很多开源成熟的框架(zookeeper、duboo、es、hadoop、spring等)可以使用,避免了重复造轮子,节约开发成本且又具有高质,所以开发成本比较低且服务稳定,比较适合企业。
1.3 主流选择
对于java web ,目前主流服务器架构就是 tomcat + nginx。
2 安装nginx
1、执行命令
1 |
brew install nginx |
- 安装目录 /usr/local/Cellar/nginx,即nginx的文件都在这个目录下面,可以类比tomcat解压之后目录。
- 配置文件的目录 /usr/local/etc/nginx,如nginx.conf等文件。
- 命令脚本 /usr/local/bin/nginx。
2、启动服务
通过如下命令
1 |
/usr/local/bin/nginx |
也可以通过“-c”指定配置文件,如下
1 |
/usr/local/bin/nginx -c /tmp/nginx.conf |
启动之后,可以查看进程如下:
1 2 3 4 |
HeartThinkDo@B000000064800:/usr/local/bin$ ps -ef | grep nginx 1017372894 31265 1 0 11:35下午 ?? 0:00.00 nginx: master process nginx 1017372894 31266 31265 0 11:35下午 ?? 0:00.00 nginx: worker process 1017372894 31268 30135 0 11:36下午 ttys001 0:00.00 grep nginx |
访问 http://localhost:8080/ ,如下图:
3、关闭服务
1 |
/usr/local/bin/nginx -s quit #优雅关闭,正在处理请求会处理完毕 |
或者
1 |
/usr/local/bin/nginx -s stop #强制终止 |
4、重载
修改配置之后,希望在关闭服务器的情况下,重新加载配置,通过如下命令
1 |
/usr/local/bin/nginx -s reload |
3 配置nginx.conf
nginx的配置都是通过nginx.conf文件来实现的。nginx.conf文件由模块(模块成员可以是模块或者属性关键字)和属性关键字来组成,常用模块有全局、events、http(包含upstream、server、location等子模块)三个模块。nginx.conf文件模板如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 1.全局块 worker_processes 8; # 2.event块 events{ use epoll; .... } # 3.http块 http{ # 3.1 upstream模块 upstream serviceName{ .... } # 3.2 sever模块块 server{ ..... # 3.3location模块 location{ ... } } } |
本节中只使用http模块来配置反向代理到两个不同tomcat实例和负载均衡(代理到相同服务的tomcat实例,可以能端口号相同,也可能不同)。
3.1 通过URL代理到不同服务
之前在CRM系统中,合同系统和商户系统就是通过这个方式划分,即crm.com/ct/queryCt会映射到合同服务的queryCt接口,如127.0.0.1:8088/queryCt;crm.com/customer/queryHotel会映射到商户服务的queryHotlel接口,如127.0.0.1:8099/queryHotel。对于将对外服务按功能划分成多个服务模块时,可以选择这种方式。
1、将/usr/local/etc/nginx下面文件拷贝到~/tmp目录下面,并修改nginx.conf内容如下
1 2 3 4 5 6 7 8 9 10 11 |
server { listen 80; server_name www.crm.com; access_log /var/log/nginx/access.log; location /ct { proxy_pass http://127.0.0.1:8088; } location /customer { proxy_pass http://127.0.0.1:8099; } } |
2、解压tomcat,分别命名为tomcat-customer,tomcat-ct
(1)对于tomcat-customer
- 修改server.xml中端口号为8099
1 2 3 4 5 6 7 |
#server端口 <Server port="8015" shutdown="SHUTDOWN"> # connector端口 <Connector port="8099" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> |
- 在root目录下,创建ct目录,增加queryCutomer.html。
(2)对于tomcat-ct
- 修改server.xml端口号为8098
1 2 3 4 5 6 7 |
#server端口 <Server port="8025" shutdown="SHUTDOWN"> # connector端口 <Connector port="8098" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> |
- 在root目录下,创建ct目录,增加queryCustomer.html。
3、启动nginx
1 |
sudo /usr/local/bin/nginx -c ~/tmp/nginx.conf |
4、启动tomcat
1 2 3 4 5 |
# 执行tomcat-ct ~/tomcat-ct/bin/startup.sh # 执行tomcat-customer ~/tomcat-customer/bin/startup.sh |
5、在/etc/hosts目录下配置如下
1 |
127.0.0.1 www.crm.com |
6、验证
(1)输入www.crm.com/ct/queryCt.html,如下
(2)输入localhost/customer/queryCustomer.html如下
6、参数说明
- server:表示的是虚拟主机。server_name可以是一个IP或者域名。可以配置多个server,如一个服务有多个域名时,就可以配置多个server{},每一个server中server_name设置一个域名,即可以把server当成客户端看到域名或者IP:端口,如对于crm.com,可能最后根据不同url会调用不同服务,但是对用户只看到www.crm.com这一个域名。
- location:请求url,可以是正则。
3.2 负载均衡
当一个服务部署了多个tomcat实例,那么需要进行负载均衡设置。通过upstream{}来实现。比如对于www.licai.com 需要部署两个实例tomcat1和tomcat2。具体步骤如下
1、解压tomcat,分别命名为tomcat1,tomcat2
(1)对于tomcat1
- 修改server.xml中端口号为8091
1 2 3 4 5 6 7 |
#server端口 <Server port="8015" shutdown="SHUTDOWN"> # connector端口 <Connector port="8091" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> |
- 在root目录下,增加query.html。
(2)对于tomcat2
- 修改server.xml端口号为8092
1 2 3 4 5 6 7 |
#server端口 <Server port="8025" shutdown="SHUTDOWN"> # connector端口 <Connector port="8092" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> |
- 在root目录下,增加query.html。
2、nginx.conf进行如下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 |
upstream tomcatServices { server 127.0.0.1:8091 ; server 127.0.0.1:8092 ; } server { listen 8095; server_name www.licai.com; access_log /var/log/nginx/access.log; location / { proxy_pass http://tomcatServices; } } |
3、启动nginx
1 |
sudo /usr/local/bin/nginx -c ~/tmp/nginx.conf |
4、启动tomcat
1 2 3 4 5 |
# 执行tomcat-ct ~/tomcat1/bin/startup.sh # 执行tomcat-customer ~/tomcat2/bin/startup.sh |
5、在/etc/hosts目录下配置如下
1 |
127.0.0.1 www.licai.com |
6、输入网址 http://www.licai.com:8095/query.html
有的请求会打到实例1,有的会打到实例2,如下:
- 如下访问到实例1
- 如下访问到实例2
(全文完)