Nginx介绍

目录

1 nginx介绍

1.1 引入

1.2 比较tomcat

1.3 主流选择

2 安装nginx

3 配置nginx.conf

3.1 通过URL代理到不同服务

3.2 负载均衡


本文概览:主要包括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/ ,如下图:

85284598

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,如下

50222785

(2)输入localhost/customer/queryCustomer.html如下

50388408

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.hang.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.hang.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.hang.com

6、输入网址  http://www.hang.com:8095/query.html

有的请求会打到实例1,有的会打到实例2,如下:

  • 如下访问到实例1

Snip20170829_10

  • 如下访问到实例2

Snip20170829_11

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值