Docker中配置nginx

FG Developer
AppMaster Developers
4 min readNov 23, 2017

環境:ubuntu
情境:連接到同一個網站時根據不同網址連線到不同的container server,不同的server 有不同的port,分別為port 3000、3001、3002,
其中port 3000 和 port 3001 為api server, port 3002 為web

下載nginx image (nginx 官方docker hub)

$ docker pull nginx

執行 nginx image,需把 80 port 接出來

$ docker run — name nginx -d -p 80:80 nginx

查看container

$ docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a59b572d9caf nginx “nginx -g ‘daemon …” 22 minutes ago Up 22 minutes 0.0.0.0:80->80/tcp nginx

進入容器修改nginx 設定

$ docker exec -it a59b572d9caf bash

設定檔位置

/etc/nginx/conf.d/default.conf

修改default.conf

$ vim default.conf

default.conf 內容修改為如下

server {
listen 80;
server_name drupal1.tw;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://172.17.0.4:3002;
}
location /api/1.0.0/book {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://172.17.0.2:3000;
}
location /api/1.0.0/member {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://172.17.0.2:3000;
}
location /api/1.0.0/category {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://172.17.0.3:3001;
}
}

設定檔內容

proxy_pass http://172.17.0.2:3000; 
proxy_pass http://172.17.0.3:3000;
proxy_pass http://172.17.0.4:3000;
此處網址為container 互相連接溝通使用的ip

查看container ip

$ docker inspect containerId

儲存完設定檔後,重啟nginx

$ service nginx reload

重啟後nginx則可正常運作連線

Author : Tom Hsieh (tom@appmaster.cc)

--

--