nginx搭建及分发请求

1,531 阅读5分钟

这是我参与更文挑战的第1天,活动详情查看: 更文挑战

最近项目上上线了一个新需求,就是在上传文件到服务器后要进行分发,让不同的服务来处理这个请求,这个转发很简单,但第一次难免会遇到各种问题,以此记录,

由于我这边仅仅是我们后端测试请求用,目的只有成功转发,所以版本号这块我没有过多考究我选的是nginx-1.14.2,由于我之前安装出现了一点小错误,所以这里我们老老实实按照百度出来的结果将依赖安装上,(如果我们不想要这个版本,可以nginx.org/download/ ,选择自己想要的,我直接按照百度的版本号了)

1.首先我们新建一个nginx文件夹,用来存储下载的文件

mkdir nginx

2.安装pcre依赖

yum -y install pcre*

3.安装OpenSSL依赖

yum -y install openssl*

4.下载nginx-1.14.2.tar.gz压缩包

wget http://nginx.org/download/nginx-1.14.2.tar.gz 这个是一个压缩文件

5.解压nginx安装包

tar -zxvf nginx-1.14.2.tar.gz

解压过后我们可以看到这个目录

你以为这里修改配置后可以生效吗?那就太天真了,至少我这里不是,这个后面说,现在我们先老老实实按照百度的方法把它安装好

6.执行文件,检查配置文件是否生效

./configure

7.编译

make -j4

8.安装依赖

make install

我们现在看 /usr/local/路径下会有一个nginx文件夹,是的,我们的配置文件就在这里改吧,

9.现在我们给这个路径下的nginx添加一个快捷方式(又学到一个命令)

ln -s /usr/local/nginx/sbin/nginx nginx

以后我们直接nginx就可以启动了

10.查看进程

ps -ef|grep nginx

此处可以看到有两个进程,一个master,一个worker,此处就简单说下,master是用来管理worker进程的,worker是实际工作的进程,当master接收到一个请求时,会唤醒所有的worker,但肯定只会有一个也仅有一个拿到这个请求(用到了共享锁),worker进程的个数,一般会设置与机器cpu核数一致,所以如果你有两个worker进程也不用纠结,由于用到了Master/Worker并发工作模式,所以才支持高并发,简言之:Master进程,负责接收和分配任务;Worker进程,负责处理子任务;

11.浏览器输入ip地址

至此,你的nginx就安装完成了,当然我们想要的是转发我们的请求

12.修改conf文件

/usr/local/nginx/conf(切记是该目录而不是文件的解压目录)目录下找到nginx.conf文件编辑

13.添加分发服务器ip

upstream tomcats {
               server ip:8080;
               server ip:8080;
               server ip:8080;
               ip_hash;
      }//此段是需要加上的路由地址
    server {
        listen       80;//监听端口
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_set_header Host $host:$server_port;	
            add_header backendIP $upstream_addr;     //backendIP是在浏览器端暴露请求路由的服务器IP
            proxy_pass  http://tomcats; 	//此处的tomcats是上面的upstream定义的名字
        }

此处有几个注意的点:upstream tomcats是我新增的路由地址,在location中代理指向的就是它,其次backendIP是在浏览器中暴露我们服务的ip,这在生产环境是不被允许的,毕竟你把自己的服务器ip暴露出来是很危险的行为,测试可以,生产上应该删掉,还有一个就是upstream tomcats里的ip_hash,我百度了查看了几种常用的,以此记录下:目前Nginx的upstream模块支持6种方式的负载均衡策略(算法):轮询(默认方式)、weight(权重方式)、ip_hash(依据ip分配方式)、least_conn(最少连接方式)、fair(第三方提供的响应时间方式)、url_hash(第三方通过的依据URL分配方式)。

我们这里用的是ip_hash,轮询是默认的情况(即不加策略),weight权重可以

server [IP地址]:[端口号] weight=2;就是后面加上weight

注意:1.权重越高分配到的请求越多;2.此策略适合服务器硬件配置差距较大的情况。

依据ip分配方式,指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端请求一致发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题;注意:此策略适合有状态服务的程序,比如session;

最少连接方式,把请求发给链接数最少的后端服务器。轮询是把请求平均分配给各个后端,使它们的负载大致相同。但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果;注意:此策略适合请求处理时间长短不一造成的服务器过载情况

至此搭建结束

下面是执行过程的几个常用命令

pkill nginx杀掉nginx进程
nginx -s reload重新启动nginx
/usr/local/nginx/logs里查看日志

查看日志还是很有必要的,在error.log中可以查看到nginx执行情况,如果nginx日志不报错,但是界面却报502错误,很可能是你服务本身的问题,而不应该纠结于nginx;

**********************撒花完结**************************