随笔(十一) 基于docker学习Nginx核心(虚拟主机,反向代理,负载均衡)及相关示例

前言:

         这段时间,也是学习微服务准备阶段。从大架构入手,找每一个点进行学习,前面学习了docke,还有有一篇dockerfile没写,近期加紧补充理论后将发布。今天这里我们将学习nginx的几个核心点,例如:虚拟主机,反向代理,负载均衡等,学完这几个点,nginx基本就入门了。可以直接开发,当然如果要深入学习,那就不简单了。不说了,开始学习。

         文章较长,但相对步骤详细,如果不好docker,请移步自 docke实战篇(一)--ubuntu下安装docker并配置镜像加速入门以及后面的博文,学习完毕后再回来阅读该文章应该更好理解。

          如果在想在真机上安装请移步自nginx在centos7下安装详解,搭建好后可在该文章学习相关nginx配置。

          如果您已经学会docker,请直接往下阅读。

简介:

        Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

         Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性: 例如:在连接高并发的情况下,Nginx是Apache服务不错的替代品,能够支持高达 50,000 个并发连接数的响应响应。

                                               (以上内容来自百度百科,对原文做了部分删减

首先看下配置的结构:

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

         一份简单配置文件:

user  nobody;   #运行的用户 
worker_processes  2;   ##启动进程,通常设置成和cpu的数量相等,这里我设置2核
#事件
events {
    worker_connections  1024;  #工作连接
}
#http模块
http {
    include       mime.types;  # #设定mime类型,类型由mime.type文件定义
    default_type  application/octet-stream;

    sendfile        on;    #除了是下载之类重IO的,都用on

    keepalive_timeout  75;     #连接超时时间,默认为75

    server {
        listen       80;        #监听的端口
        server_name  www.baidu.com;   #这里写自己的域名
        location / {
            root   /usr/share/nginx/wwwroot/test;  #虚拟主机转向的目录
            index  index.html index.htm;    #默认访问的路径
        }

    }
}

         一些配置说明:可能有些没用到,下面出现在解释

配置区域说明 
main配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。 
events配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。 
http可以嵌套多个 server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等。 
upstream配置 HTTP 负载均衡器分配流量到几个应用程序服务器。 
server配置虚拟主机的相关参数,一个 http 中可以有多个 server。 
location配置请求的路由,以及允许根据用户请求的URI来匹配指定的各 location 以进行访问配置;匹配到时,将被 location 块中的配置所处理

 

准备文件夹于文件:

 sudo mkdir -p /usr/local/docker/nginx/wwwroot /usr/local/docker/nginx/conf

cd /usr/local/docker/nginx/

         创建文件docker-compose.yml,文件内容如下:

version: '3'       
services:
  nginx:
    restart: always
    image: nginx
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - ./conf/nginx.conf:/etc/nginx/nginx.conf
      - ./wwwroot:/usr/share/nginx/wwwroot

       文件目录:

             

     在wwwroot文件夹下创建一个index.html,内容随便写,告诉我们访问成功就是了。

             

      进入到conf目录下,创建一个nginx.conf文件,文件夹内容分如下三种配置,可合在一起的,学习时暂且分离。

nginx配置虚拟主机: 

     基于IP:

user nginx;

worker_processes  1;   

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;
    server {
        listen       80;
        server_name  192.168.223.129;  #基于ip的访问,域名访问后面再说
        location / {
            root   /usr/share/nginx/wwwroot;
            index  index.html index.htm;
        }

   }
}

                将上面的内容复制到conf目录下的nginx.conf文件内。IP需要修改成自己虚拟机IP,其他不变即可。

   cd /usr/local/docker/nginx         #返回nginx目录

sudo docker-compose up

               访问ip:可以看到已经成功了。

                   

     基于域名:

        前往C:\Windows\System32\drivers\etc自己电脑,修改hosts文件,加一个域名,我的域名加为:www.gentle.co

        nginx.conf文件详情如下:

user nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;
#    server {
#        listen       80;
#        server_name  192.168.223.129;
#        location / {
#            root   /usr/share/nginx/wwwroot;
#            index  index.html index.htm;
#        }
#
#    }

# 这里是新的,域名,上面哪个是ip
    server {
        listen       80;
        server_name  gentle.com;

        location / {
            root   /usr/share/nginx/wwwroot;
            index  index.html index.htm;
        }
    }
}
 

          如果不会关闭的,执行如下语句

sudo docker-compose down

         修改完配置后,如上个基于IP的步骤执行即可。

nginx配置反向代理:

        首先我们需要创建一个tomcat文件夹

sudo mkdir -p /usr/local/docker/tomcat

cd /usr/local/docker/tomcat

sudo vi docker-compose.yml

        将如下内容放入docker-compose.yml,保存推出即可,然后启动容器

version: '3'
services:
  tomcat1:
    image: tomcat
    container_name: tomcat1
    ports:
      - 8080:8080            

          修改我们docker/nginx/conf/nginx.conf文件,修改内容如下:

user nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

   # 配置一个代理即 tomcat 服务器,名字要与下面
    upstream tomcatserver {
        server 192.168.223.129:8080;      #你的虚拟机IP
    }

    server {
        listen       80;
        server_name  gentle.com;       #上面配置的域名

        location / {
            proxy_pass http://tomcatserver;    #反向代理,将请求转发给tomcat
            index  index.html index.htm;
        }
    }
}
 

     最后将两个容器都启动,访问试试:

     反向代理的配置很简单的,看看就会了。 核心就那两个,基本和虚拟主机差不多的,学习配置即可。

nginx配置负载均衡:

       修改tomcat目录下的docker-compose.yml,增加一个tomcat服务

version: '3'
services:
  tomcat1:
    image: tomcat
    container_name: tomcat1
    ports:
      - 8080:8080
  tomcat2:
    image: tomcat
    container_name: tomcat2
    ports:
      - 8081:8080
 

          修改/docker/nginx/conf/nginx.conf文件

user nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

# 配置一个代理即 tomcat 服务器
    upstream tomcatserver {
         server 192.168.223.129:8081 weight=10;   #weight加权值,值越大,请求分发给他的几率越大
         server 192.168.223.129:8080 weight=10;
    }

    server {
        listen       80;
        server_name  gentle.com;

        location / {
            proxy_pass http://tomcatserver;
            index  index.html index.htm;
        }
    }
}

         分别启动两个容器,需要到相应的文件夹下。为了演示,我在两个tomcat的主页都加了一句话,用于分别是否成功实现负载均衡。

        第一次访问:

         第二次访问:

       为此,负载均衡便做到了,主要是写配置,可以说没啥技术性可言,但是这个确实架构学习的必经之路,但是假设nginx死了,那就凉了,所以会有高可用的主从nginx。

总结:

         nginx核心配置基本完毕,我们可以很愉快的开始整合自己的架构。如果深入学习的话,这个就相对较难。祝大家学习进步,工作顺利。

                                                                                                                                          --谢谢

程序人生,与君共勉~!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值