使用docker搭建高併發網站架構實踐5--Docker實現Nginx+tomcat動靜分離
Docker+Nginx+Tomcat實現動靜分離
整體結構示意圖:
如上所示:docker啟動5個容器,dynamic-nginx動態nginx伺服器和static-nginx1, static_nginx2兩個靜態nginx伺服器,tomcat1和tomcat2伺服器,分別對映到主機的80,38080,48080,18080,28080埠。當dynamic-nginx伺服器收到請求時,根據配置檔案,轉發給合適的靜態或動態伺服器完成響應。
具體操作:
- 準備web工程:
nginx_tomcat,image檔案下有圖片test.jsp
新建index.jsp
在本地測試如下:
- 啟動tomcat1和tomcat2
看一下本地的映象:
在此我們使用iyangcong/tomcat7,官方tomcat映象為版本8,不便於tomcat叢集共享session。
在/data/testfile/war目錄下,準備上述工程的war包。
啟動tomcat1,掛載war到tomcat webapps目錄下:
docker run --name tomcat-nginx1
–p 18080:8080
–v /data/testfile/war/nginx_tomcat.war:/data/tomcat/webapps/nginx_tomcat.war
–d iyangcong/tomcat7 /data/start.sh
docker logs tomcat-nginx1,可知war部署成功。
瀏覽器訪問10.104.15.62:18080/index.jsp
啟動tomcat2
docker run --name tomcat-nginx2
–p 28080:8080
–v /data/testfile/war/nginx_tomcat.war:/data/tomcat/webapps/nginx_tomcat.war
–d iyangcong/tomcat7 /data/start.sh
- 啟動dynamic-nginx伺服器
在/data/testfile/nginx/nginx.conf,編輯配置檔案,結果如下所示:
docker run –p 80:80 --name dynamic-nginx
–v /data/testfile/nginx/nginx.conf:/etc/nginx/nginx.conf –d nginx
- 啟動static-nginx1和static-nginx2
/data/testfile/nginx/nginx_tomcat/images準備test.jpg圖片
docker run –p 38080:80 –name static-nginx1
-v /data/testfile/nginx/nginx.conf:/etc/nginx/nginx.conf
-v /data/testfile/nginx/:/data/www/web/
–d nginx
docker run –p 48080:80 –name static-nginx2
-v /data/testfile/nginx/nginx.conf:/etc/nginx/nginx.conf
-v /data/testfile/nginx/:/data/www/web/
–d nginx
瀏覽器訪問:動態資源已經訪問到,而靜態圖片沒有正確載入。
檢視日誌:
nginx.conf配置檔案 root 為/data/www/web,而上述日誌顯示查詢路徑為:/usr/share/nginx/html/
重新啟動static-nginx1和static-nginx2,
重新啟動,掛載路徑變為上述日誌輸出路徑:
docker run –p 38080:80 –name static-nginx1
-v /data/testfile/nginx/nginx.conf:/etc/nginx/nginx.conf
-v /data/testfile/nginx/:/usr/share/nginx/html/
–d nginx
docker run –p 48080:80 –name static-nginx2
-v /data/testfile/nginx/nginx.conf:/etc/nginx/nginx.conf
-v /data/testfile/nginx/:/usr/share/nginx/html/
–d nginx
瀏覽器訪問,圖片正確載入:
檢視動態nginx伺服器日誌:
檢視靜態資源伺服器1和2,可知上述圖片是從static-nginx2中訪問得到的。
從而實現了負載均衡和動靜分離。
總結:
nginx.conf靜態資源的配置路徑並沒有起作用,原因可能是:靜態資源路徑配置不對或者docker pull nginx官方映象配置問題。