ubuntu+docker搭建nginx反向代理

nginx在我们的工作中是常用的反向代理服务,今天叫大家在ubuntu上使用docker镜像搭建nginx反向代理。
本文是基于一个服务来实现的,notifyserver是我自己写的一个邮件通知服务,基本架构如下:


图片.png

API GW是基于go-micro搭建的api网关,(如何搭建请移步:https://www.jianshu.com/p/13d1df6e6731)

etcd是服务发现,(如何搭建请移步:https://www.jianshu.com/p/ec0e4911236d)

notifyserver实现的主要功能是发送邮件验证码(4位随机码),以及验证。

验证码过期通过redis控制,设置5分钟过期时间。

代码这里不展示了,自己写个server就OK了

下面开始搭建nginx

拉取nginx镜像
docker pull nginx:latest
nginx配置

镜像拉取完成后,我们下面编写nginx配置。
原始配置是这样的

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

创建 nginx.conf文件,添加如下配置,可按自己的需求修改。
我们需要在此配置中加入自己server的配置,修改得地方如下,在倒数第二行的位置:

 user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

#这里是新增的配置
    upstream tutor{
        server 192.168.109.132:8080;
   }
   server {
        listen   80;   #监听端口
        server_name www.tutor.com;
        location /{
                proxy_pass http://tutor;
        }

   }

   include /etc/nginx/conf.d/*.conf;
}

这里我们加入了upstream,设置名称为tutor,
注意:这里的名称需要与下文proxy_pass保持一致,否则无法访问到

有关upstream的解释可以看这个帖子:http://tengine.taobao.org/book/chapter_5.html

upstream 是完成构造请求和解析响应的功能,我们设置upstream 的server 为192.168.109.132:8080,这个是我API GW的地址和端口,如果不用API GW,可以设置成你自己server的地址和端口。

下面这段是完成访问的导航,
监听端口我们设置为80,
server_name是 我们访问该server 的域名,
location 是用来匹配我们访问的server url

所以,这个配置,就把www.tutor.com 指向了192.168.109.132:8080这个地址

server {
        listen   80;   #监听端口
        server_name www.tutor.com;
        location /{
                proxy_pass http://tutor;
        }

如果你要用负载均衡功能,可以在upstream添加其他的地址,也可以根据情况设置权重,nginx的负载均衡支持轮询,加权,ip hash 以及扩展策略。

启动nginx

上述的配置,按照自己的设置,配置好以后,保存在ubuntu的文件夹,我的保存在/home/kay/nginx/nginx.conf,用下面的指令启动nginx,(2622e6cca7eb是我的nginx镜像,你需要换成你自己的,使用docker images即可查看镜像的ID)

docker run --name nginx -d  -p 80:80 -v /home/kay/nginx/nginx.conf:/etc/nginx/nginx.conf  2622e6cca7eb

/etc/nginx/nginx.conf 是nginx镜像内的配置,我们直接用刚刚自己的配置覆盖原配置即可。

到此nginx就配置完成了,
还有一步,就是在自己电脑的host 中添加如下设置

192.168.109.132 www.tutor.com 

这样通过www.tutor.com加上你的server url就可以,访问到自己的sever了。是我自己的虚拟机ip,你需要改成自己的机器的ip

你可能感兴趣的:(ubuntu+docker搭建nginx反向代理)