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 Sysoev

概述

相信nginx大家也不陌生,大部分情況下都是在服務器中直接安裝Nginx代理,但是如今Docker當道,如何結合Docker的容器化優勢和Nginx的反向代理和域名設別?

下面利用一個Demo,搭建一組服務

  • Nginx
  • Ghost

利用Nginx容器內聯到Ghost,轉發,有以下優點:

  1. 服務器只需要開一個端口給Nginx容器作為入口
  2. 添加其他應用的時候,只需要在Nginx中配置轉發規則就可以
  3. 所有應用自帶開機重啟
  4. 部署內容轉變為文件形勢,可輕松傳遞、維護

放出Github地址: docker-nginx-demo

准備

需要准備Docker環境:

分析

demo的文件結構:

- 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:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM