中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Nginx實現服務器中多容器共存

發布時間:2021-12-13 09:32:17 來源:億速云 閱讀:227 作者:小新 欄目:服務器

小編給大家分享一下如何使用Nginx實現服務器中多容器共存,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

背景

有一臺騰訊的Linux云主機,在服務器上部署了一個docker(稱為ServiceDocker,名稱為sign,下同),ServiceDocker內部使用了80、443、3306端口,分別映射到宿主機(云主機)的相同端口(即80、443、3306)。

ServiceDocker中安裝了XAMPP,在此基礎上部署了掃碼簽到小程序的服務器。ServiceDocker的80和443端口分別提供http和https服務,3306為MySQL數據庫的端口。

ServiceDocker綁定了域名sign.famend.cn。

目標

云主機中的一個ServiceDocker占用了80、443端口,如果想在主機中再部署一臺服務器對外服務,就不能使用80和443端口了。

我們的目標是在主機中可以部署多個ServiceDocker,每個ServiceDocker綁定各自的域名,對外提供服務,保證80和443端口可用。

如何使用Nginx實現服務器中多容器共存

思路

修改ServiceDocker的端口映射,把ServiceDocker端口80、443分別映射到主機的89、449端口,這樣主機的80、443端口釋放出來了。

釋放出來的80和443端口供Nginx使用。安裝帶Nginx的docker(稱為NginxDocker,名稱為mynginx,下同)。NginxDocker內部使用端口80、443,分別映射到主機的80和443端口。

NginxDocker用來做反向代理。當有訪問請求時,讀取Nginx配置后,不同的URL定向到各自對應的Docker。例如:訪問http://sign.famend.cn:80,則自動映射到http://sign.famend.cn:89。

實現步驟

1. 修改ServiceDocker的端口映射,釋放80和443端口。

Docker沒有提供命令修改端口,從網上我找到了2種方法。

方法1:先停止容器,再將容器打包成鏡像,接著運行新的鏡像。在運行新的鏡像時指定新的端口。使用的命令如下:

#先停止容器 docker stop containerA #將容器commit成為一個鏡像 docker commit containerA newImageB #運行容器 docker run -p 8080:8080 -p 8081:8081 -v /home/data/:/home/data/ -dt newImageB

方法2:先停止容器,接著停止容器服務,然后修改容器配置文件,***啟動容器服務、啟動容器。步驟如下:

① 停止ServiceDocker(ServiceDocker的名稱為sign),停止docker服務。

sudo docker stop sign sudo service docker stop

② 使用 docker ps -a 命令找到要修改容器的 CONTAINER ID。

③ 運行 docker inspect 【CONTAINER ID】 | grep Id 命令。

④ 執行 cd /var/lib/docker/containers 命令令進入找到與 Id 相同的目錄。

在執行cd 命令時如果提示permission denied,可以先執行 sudo -s。

進入id對應的目錄后,打開文件hostconfig.json。

找到80端口的映射,如下:

"80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" }]   把 "HostPort": "80" 修改成 "HostPort": "89" , 如下 "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "89" }]

修改之前,ServiceDocker內部的80端口映射為主機的80端口;修改之后,ServiceDocker內部的80端口映射為主機的89端口。

稍加說明,有文章(參考資料中的2、3)提到還需要修改config.v2.json,親測不需要。這個文件在啟動ServiceDocker時會自動修改。

⑤ 啟動docker服務,然后啟動ServiceDocker(名稱為sign)。

sudo service docker start sudo docker start sign

方法(1)和方法(2)都可以,我選用了方法(2)。

在執行完方法(2)之后,打開瀏覽器驗證,提示“網站無法訪問”。

初步估計docker中的服務器沒有啟動,運行命令:

sudo /opt/lampp/lampp stop sudo /opt/lampp/lampp start

運行stop的時候,發現apache 沒有啟動,可能是修改了80端口的緣故。

在執行start之后,打開瀏覽器驗證http://sign.famend.cn:89和https://sign.famend.cn:449,成功訪問。

修改Docker端口的方法并不復雜,如果docker以后的版本能夠提供相應命令,相信會方便很多。

順便,運行 crontab -l 查看ServiceDocker中的定時任務是否啟動,如果沒啟動,運行 service cron start  啟動定時任務。

下一步,配置NginxDocker反向代理,讓http://sign.famend.cn:80和https://sign.famend.cn:443也能成功訪問。

2. 配置NginxDocker反向代理。

① 下載nginx,并運行它。

docker container run \   -d \   -p 80:80 \   -p 443:443 \   --rm \   --name mynginx \   nginx

② 配置nginx的配置文件。

mkdir nginx-files docker container cp mynginx:/etc/nginx . mv nginx conf vi conf/nginx.conf

在nginx.conf中,添加如下反向代理信息。

server{   listen          443 ssl;   server_name     sign.famend.cn;   ssl_certificate  /etc/nginx/ssl/sign.famend.cn/1_sign.famend.cn_bundle.crt;   ssl_certificate_key  /etc/nginx/ssl/sign.famend.cn/2_sign.famend.cn.key;    location / {     proxy_set_header HOST $host;     proxy_set_header X-Real-IP $remote_addr;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     proxy_set_header X-Forwarded-Proto $scheme;     proxy_pass http://sign.famend.cn:89/;   } }  server{   listen         80;   server_name     famend.cn sign.famend.cn;   location / {     proxy_set_header HOST $host;     proxy_set_header X-Real-IP $remote_addr:89;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     proxy_set_header X-Forwarded-Proto $scheme;     proxy_pass http://sign.famend.cn:89/;   } }

對于443端口,需要使用ssl_certificate和ssl_certificate_key。在ServiceDocker中證書使用的LetsEncrypt的SSL證書,每90天更新一次。

SSL證書的來源:一種方法,可以讓它們共享LetsEncrypt的SSL證書。除此之外,在騰訊注冊的域名,騰訊免費提供SSL證書,有效期為1年。

為了簡便,我直接使用了騰訊的SSL證書,當然,一年之內,必須在過期之前更新證書。

③ 停止mynginx,然后重啟它。

docker container run \   --name mynginx \   --volume "$PWD/conf":/etc/nginx \   -p 80:80 \   -p 443:443 \   -d \   nginx

這次,去掉 --rm 參數,以便停止運行的時候保留容器。

至此,配置完成。

驗證

瀏覽器中分別打開

sign.famend.cn:80 sign.famend.cn:89 sign.famend.cn:449 sign.famend.cn:443

都能正常訪問。當然,打開449和443時候,可以發現兩個URL使用的證書不一樣。449是LetsEncrypt提供的,有效期90天;443來自騰訊(頒發機構TrustAsia),有效期1年。

當然,ServiceDocker中的另外一個網站famend.cn,也可以訪問:

famend.cn:80 famend.cn:89

成功。

以上是“如何使用Nginx實現服務器中多容器共存”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绩溪县| 黄大仙区| 安义县| 遂宁市| 沈丘县| 静宁县| 商水县| 永安市| 高碑店市| 丹棱县| 四子王旗| 娄底市| 抚宁县| 犍为县| 伊吾县| 阿尔山市| 甘南县| 贡觉县| 嘉义市| 鄂托克旗| 唐河县| 梅河口市| 南阳市| 南通市| 梨树县| 黑山县| 鄂温| 堆龙德庆县| 仲巴县| 亚东县| 天峨县| 福州市| 玛多县| 鹤壁市| 玉田县| 隆昌县| 黔南| 宜阳县| 砚山县| 旌德县| 赤水市|