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用於相應。

相關文章
相關標籤/搜索