在Docker下部署Nginx
在Docker下部署Nginx,包括:
- 部署一個最簡單的Nginx,可以通過80端口訪問默認的網站
- 設置記錄訪問和錯誤日志的路徑
- 設置靜態網站的路徑
- 通過
proxy_pass
將HTTP請求反向代理到nodejs Web App - 設置HTTPS
如果你還沒有安裝Docker環境,可參考在Docker中運行Node.js的Web應用。
最簡單的命令,讓Nginx跑起來
命令如下:
1 |
$ sudo docker run -it -p 80:80 dockerfile/nginx |
如果是第一次,下載nginx鏡像需要點時間。
然后,可以通過瀏覽器根據地址訪問到一個默認的網頁,說明Nginx成功跑起來了。
設置記錄訪問和錯誤日志
Nginx有2個日志:
- access.log,記錄每個HTTP請求信息
- error.log,記錄Nginx運行中的錯誤,用於排錯
運行如下命令:
1 |
$ sudo docker run -it -p 80:80 -v `pwd`/logs:/var/log/nginx dockerfile/nginx |
這個命令會在當前目錄下創建logs目錄,存放access.log和error.log。
設置靜態網站路徑
需要創建目錄:
- config,目錄下放一個文件,名為
server
,Nginx靜態網站配置文件 - www,目錄下放html文件,比如
index.html
server文件:
1 |
server { |
命令如下:
1 |
sudo docker run -it -p 80:80 -v `pwd`/www:/www -v `pwd`/config:/etc/nginx/sites-enabled -v `pwd`/logs:/var/log/nginx dockerfile/nginx |
解釋一下:
-v
pwd/www:/www
,將當前路徑下的www
目錄設置為/www
,和server
配置的路徑對應-v
pwd/config:/etc/nginx/sites-enabled
,server
文件的本地路徑,映射到docker容器的nginx配置路徑
設置反向代理到Nodejs Web App
需要先能將Nodejs的容器跑起來,然后再考慮怎樣通過Nginx的反向代理。
假設我有個express.js
項目,在當前目錄下的webapp
目錄中,使用docker
命令類似這樣:
1 |
sudo docker run -d -p 3000:3000 --name ProtoWebApp -v `pwd`/webapp:/webapp -w /webapp node npm start |
然后,將前面例子中config
目錄下的server
文件做點改動:
1 |
server { |
之后,用下面的命令將nginx跑起來:
1 |
sudo docker run -it -p 80:80 --link ProtoWebApp:localhost -v `pwd`/config:/etc/nginx/sites-enabled -v `pwd`/logs:/var/log/nginx dockerfile/nginx |
設置HTTPS
只需在運行nginx容器的時候設置SSL的路徑:-v <certs-dir>:/etc/nginx/certs
。
當然,nginx首先要設置,參見配置HTTPS服務器