docker中使用nginx容器代理其余容器

Nginx is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoevlinux

概述

相信nginx你们也不陌生,大部分状况下都是在服务器中直接安装Nginx代理,可是现在Docker当道,如何结合Docker的容器化优点和Nginx的反向代理和域名设别?nginx

下面利用一个Demo,搭建一组服务git

  • Nginx
  • Ghost

利用Nginx容器内联到Ghost,转发,有如下优势:github

  1. 服务器只须要开一个端口给Nginx容器做为入口
  2. 添加其余应用的时候,只须要在Nginx中配置转发规则就能够
  3. 全部应用自带开机重启
  4. 部署内容转变为文件形势,可轻松传递、维护

放出Github地址: docker-nginx-demodocker

准备

须要准备Docker环境:ubuntu

分析

demo的文件结构:api

- docker-compose.yml  //docker-compose所需的文件,用于描述全部应用的配置信息
- nginx
   - Dockerfile
   - sites-enabled
      - default   //nginx容器的配置文件,用于配置如何链接并解析其余的容器

docker-compose.yml:浏览器

version: "2"
services:
  ghost:
    image : ghost
    restart: always
    container_name: ghost

  nginx-host:
    build: ./nginx
    restart: always
    ports:
      - "80:80"
    links:
      - ghost
    container_name: nginx-host

注意: links节点是内联其余的容器,该处定义了两个容器,一个是Ghost,一个是Nginx,Nginx容器是基于./nginx文件夹进行build的,端口只须要开通80指向nginx容器便可,其余的所有有nginx负责转发服务器

Dockerfile:ui

FROM tutum/nginx
ADD sites-enabled/ /etc/nginx/sites-enabled

sites-enabled/default:

server {
    #listen 443;
    listen 80;
   server_name blog.kelvv.com
    #ssl on;
    access_log /var/log/nginx/api-dev.log;
    error_log /var/log/nginx/api-dev.error.log;
    location / {
        proxy_pass      http://ghost:2368;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-Proto https;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout   150;
        proxy_send_timeout  100;
        proxy_read_timeout  100;
        proxy_buffers       4 32k;
        client_max_body_size    8m;
        client_body_buffer_size 128;    
    }
}

注意:该处的ghost就是刚才docker-compose文件内的links中的关联 , server_name为域名

运行

$ cd docker-nginx-demo
$ docker-compose up -d

这个时候在浏览器中输入 域名就能够自动链接到Ghost ,服务器无污染

总结

最好是使用一个端口,而后全部应用都是经过80端口链接服务器,经过域名区分不一样应用。 还有一种方式就是使用多个端口,不一样端口不一样应用,这就须要在docker-compose.yml中开放多个端口,而且在nginx配置文件中配置多份server用于相应。

相关文章
相关标签/搜索