1. 程式人生 > >使用docker搭建高併發網站架構實踐5--Docker實現Nginx+tomcat動靜分離

使用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伺服器收到請求時,根據配置檔案,轉發給合適的靜態或動態伺服器完成響應。

具體操作:

  1. 準備web工程:

nginx_tomcat,image檔案下有圖片test.jsp

新建index.jsp

在本地測試如下:

  1. 啟動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

  1. 啟動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

  1. 啟動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官方映象配置問題。