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大家也不陌生遥倦,大部分情況下都是在服務(wù)器中直接安裝Nginx代理,但是如今Docker當(dāng)?shù)勒季猓绾谓Y(jié)合Docker的容器化優(yōu)勢和Nginx的反向代理和域名設(shè)別袒哥?
下面利用一個(gè)Demo,搭建一組服務(wù)
- Nginx
- Ghost
利用Nginx容器內(nèi)聯(lián)到Ghost消略,轉(zhuǎn)發(fā)堡称,有以下優(yōu)點(diǎn):
- 服務(wù)器只需要開一個(gè)端口給Nginx容器作為入口
- 添加其他應(yīng)用的時(shí)候,只需要在Nginx中配置轉(zhuǎn)發(fā)規(guī)則就可以
- 所有應(yīng)用自帶開機(jī)重啟
- 部署內(nèi)容轉(zhuǎn)變?yōu)槲募蝿菀昭荩奢p松傳遞却紧、維護(hù)
放出Github地址: docker-nginx-demo
準(zhǔn)備
需要準(zhǔn)備Docker環(huán)境:
分析
demo的文件結(jié)構(gòu):
- docker-compose.yml //docker-compose所需的文件,用于描述所有應(yīng)用的配置信息
- 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節(jié)點(diǎn)是內(nèi)聯(lián)其他的容器晓殊,該處定義了兩個(gè)容器,一個(gè)是Ghost伤提,一個(gè)是Nginx巫俺,Nginx容器是基于./nginx文件夾進(jìn)行build的,端口只需要開通80指向nginx容器即可飘弧,其他的全部有nginx負(fù)責(zé)轉(zhuǎn)發(fā)
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文件內(nèi)的links中的關(guān)聯(lián) , server_name為域名
運(yùn)行
$ cd docker-nginx-demo
$ docker-compose up -d
這個(gè)時(shí)候在瀏覽器中輸入 域名就可以自動連接到Ghost 识藤,服務(wù)器無污染
總結(jié)
最好是使用一個(gè)端口,然后所有應(yīng)用都是通過80端口連接服務(wù)器次伶,通過域名區(qū)分不同應(yīng)用痴昧。
還有一種方式就是使用多個(gè)端口,不同端口不同應(yīng)用冠王,這就需要在docker-compose.yml中開放多個(gè)端口赶撰,并且在nginx配置文件中配置多份server用于相應(yīng)。