欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker部署Nginx反向代理的坑與解決方案實戰(zhàn)記錄

 更新時間:2025年03月27日 10:31:49   作者:愛笑男孩424  
這篇文章主要介紹了Docker部署Nginx反向代理的坑與解決方案的相關(guān)資料,通過本文的介紹,你可以掌握如何在Docker中部署Nginx作為反向代理,并解決了常見的報錯問題,需要的朋友可以參考下

前言

大家購買域名的第一件事肯定是想讓自己網(wǎng)站的訪問地址變得好看一點,我的想法也的確如此,我就會用Nginx的反向代理來部署我的域名信息

不過我在Linux宿主機(jī)上部署沒那么多問題,在Docker上部署Nginx的時候需要考慮環(huán)境隔離、端口映射等因素,這里還是有比較多的坑,所以今天就給大家分享一下在Docker上部署Nginx實現(xiàn)反向代理的過程

一、前期準(zhǔn)備

1、購買域名:可以去阿里云、騰訊云等各大廠商購買對應(yīng)的域名,這里大家自行去購買即可

2、域名備案:購買好域名之后要進(jìn)行備案,但是備案有個前提條件,比如你在阿里云購買的域名,你需要在阿里云有一臺大于一個月有效時間的云服務(wù)器,各大廠商也有對應(yīng)的學(xué)生優(yōu)惠,大家也可自行選擇(這里估計得要一個星期)

3、域名解析:域名備案完成后你就可以對其進(jìn)行解析,比如解析成www.abc.com這種前綴不同的,記錄類型選擇A,記錄值填對應(yīng)的服務(wù)器IP即可

4、SSL證書申請:域名解析完成后就去申請對應(yīng)的SSL證書,這個證書信息在Nginx實現(xiàn)反向代理需要用到的,一般幾分鐘就能簽發(fā)成功,簽發(fā)成功后點擊下載,服務(wù)類型選擇Nginx的即可

5、上傳證書:在服務(wù)器中新建一個cert的文件夾,然后將剛才下載好的證書信息上傳到該文件夾下

前期準(zhǔn)備完成!

二、準(zhǔn)備后端服務(wù)

我們需要啟動一個后端的服務(wù)用來驗證結(jié)果,我這里就準(zhǔn)備了一個簡單的demo來測試,實際的可以根據(jù)自己的來

在本地我們可以通過java -jar xxx.jar命令運(yùn)行jar來查看效果

能夠看到運(yùn)行之后沒啥問題,然后將jar包上傳到服務(wù)器上,如何運(yùn)行這里就不演示了,需要在服務(wù)器上啟動一個后端的服務(wù),后面配置的時候會用到

三、實戰(zhàn)部署

1、安裝Docker

由于要使用 Docker 進(jìn)行 Nginx 的部署,首先需要在系統(tǒng)上安裝 Docker。本文以 CentOS 7.9 操作系統(tǒng)為例,可按照以下方式進(jìn)行安裝。

2、啟動臨時容器

首先需要啟動一個臨時的Nginx容器,將容器中的nginx.conf等配置文件拷貝到宿主機(jī)中,方便我們在后面對數(shù)據(jù)掛載進(jìn)行操作

# 1、拉取Nginx最新鏡像
docker pull nginx

# 2、啟動Nginx容器
docker run -d --name nginx -p 80:80 nginx

# 3、拷貝文件
docker cp nginx:/etc/nginx/nginx.conf /project/nginx/conf 
docker cp nginx:/etc/nginx/conf.d/default.conf /project/nginx/conf.d

# 4、刪除Nginx臨時容器
docker rm -f nginx

# 5、賦予宿主機(jī)對配置文件的操作權(quán)限
chmod 777 /youpath/nginx/{html,logs,conf.d/default.conf,conf/nginx.conf}

# 6、將ssl證書信息拷貝到容器內(nèi)(這一步放到啟動正式容器后做)
docker cp /youpath/nginx/cert nginx:/etc/nginx/cert

3、啟動正式容器

現(xiàn)在我們有了配置文件之后就可以進(jìn)行文件掛載啟動容器了,用下面的命令啟動一個Nginx容器

  • -d:表示容器后臺運(yùn)行

  • -p:端口映射,前面的是宿主機(jī)的端口,后面的是容器內(nèi)的端口,表示容器內(nèi)的80端口映射到宿主機(jī)的80端口上

  • --name:表示啟動容器的名稱

  • -v:表示數(shù)據(jù)卷掛載,:前面的是宿主機(jī)上的文件**(根據(jù)自己的來)**,:后面的是容器內(nèi)的文件,這樣我們在宿主機(jī)上修改文件的內(nèi)容時,容器內(nèi)的文件也會發(fā)生響應(yīng)的變化

docker run -d -p 80:80 --name nginx \
-v /youpath/nginx/logs:/var/log/nginx \
-v /youpath/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /youpath/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
nginx

啟動成功后我們可以用docker ps命令可以查看到運(yùn)行的Nginx容器了,并且/youpath/nginx下面也有對應(yīng)的文件

我們可以在瀏覽器用服務(wù)器ip來查看效果,默認(rèn)會訪問/usr/share/html下面的靜態(tài)文件

404是因為/usr/share/html下面沒有文件

4、 編輯nginx.conf文件

  • /youpath/nginx/conf文件夾下,編輯 nginx.conf 文件,在文件的http下添加以下配置:

server {
    listen 80;
    server_name www.abc.test;
    location / {
     proxy_pass: http:127.0.0.1:8080/;
    };
}

上面那段配置的意思就是,將來自 www.abc.test 域名的 HTTP 請求轉(zhuǎn)發(fā)到本地(服務(wù)器)運(yùn)行在端口 8080 的應(yīng)用

配置完成之后我們用docker restart <nginx容器名或ID>重啟Nginx容器使配置生效。

  • 訪問不通的問題及解決方法

重啟完成后我們在瀏覽器中訪問www.abc.test,可以發(fā)現(xiàn)訪問不通

這是因為Docker啟動的容器是環(huán)境隔離的,訪問www.abc.test的時候不會轉(zhuǎn)發(fā)到服務(wù)器上的8080端口,而是會轉(zhuǎn)發(fā)到nginx容器的8080端口,但是后端服務(wù)是啟動在服務(wù)器上的,所以就訪問不通了

# 我們需要將127.0.0.1修改成服務(wù)器的ip地址,這樣就直接會去訪問服務(wù)器上運(yùn)行的8080端口的服務(wù)了
server {
    listen 80;
    server_name www.abc.test;
    location / {
     proxy_pass: http:<服務(wù)器ip>:8080/;
    };
}

修改完成后我們再次重啟Nginx容器,然后在瀏覽器上用剛剛的方式進(jìn)行訪問,可以看到訪問成功了

5、修配置域名證書信息

1. 修改 nginx.conf 配置文件,添加 SSL 證書相關(guān)配置:

server {
    listen 443 ssl;
    server_name www.abc.test; #修改成自己的
    ssl_certificate /etc/nginx/cert/www.abc.test_bundle.crt; #修改成自己的
    ssl_certificate_key /etc/nginx/cert/www.abc.test.key; #修改成自己的
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    location / {
      proxy_pass http://<服務(wù)器>:8080; #修改成自己的
      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;
    } 
}

修改完成后重啟Nginx容器,在瀏覽器用https://www.abc.test的形式去訪問

可以看到訪問不通,這是為啥呢,明明證書信息沒錯,域名和代理地址都寫對了,為啥就是訪問不通呢

2. 訪問不通的問題及解決方法

修改完成后重啟 Nginx 容器,在瀏覽器中用https://www.abc.test的形式去訪問,可能會出現(xiàn)訪問不通的情況??赡艿脑蛴幸韵聨c:

1、域名未解析到云服務(wù)器的 IP:檢查域名解析記錄,確保域名已正確解析到云服務(wù)器 IP。

2、服務(wù)器防火墻未開啟 443 端口:使用systemctl status firewalld查看防火墻開啟狀態(tài),若未開啟 443 端口,需開啟后再嘗試。

3、安全組未開啟:安全組是一種虛擬防火墻,用于設(shè)置云服務(wù)器、負(fù)載均衡、云數(shù)據(jù)庫等實例的網(wǎng)絡(luò)訪問控制。默認(rèn)情況下為關(guān)閉狀態(tài),需開啟服務(wù)器的安全組設(shè)置后再嘗試。

4、Nginx容器未映射443端口(本文作者遇到的情況):因為我們在Nginx上監(jiān)聽了443端口,客戶端訪問域名的時候會先走到Nginx這里,然后通過方向代理到proxy_pass的地址,但由于我們沒有開啟443的端口,所以訪問不了

如果是第四種原因的話就先刪除容器,然后用以下的命令重新運(yùn)行容器

docker run -d -p 80:80 -p 443:443 --name nginx \
-v /project/nginx/logs:/var/log/nginx \
-v /project/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ 
-v /project/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
nginx

重啟完成后,再次用 https 訪問,此時應(yīng)該可以訪問成功。

四、總結(jié)

通過以上步驟,我們成功地在 Docker 上部署了 Nginx 實現(xiàn)反向代理,并解決了過程中遇到的各種問題。在實際操作中,可能會遇到不同的情況,但只要按照上述方法進(jìn)行排查和解決,相信大家都能順利完成部署。希望本文能對大家在 Docker 上部署 Nginx 反向代理提供有益的參考。

附:常見報錯及解決方法

1. 502 Bad Gateway

原因:Nginx無法連接到后端服務(wù),可能是后端服務(wù)未啟動或網(wǎng)絡(luò)配置錯誤。

解決方法

  • 確保后端服務(wù)正在運(yùn)行,并且可以通過指定的地址和端口訪問。

  • 檢查Nginx配置文件中的 proxy_pass 是否正確。

  • 使用 docker logs 查看Nginx容器的日志,確認(rèn)具體的錯誤信息。

2. 404 Not Found

原因:請求的資源未找到,可能是路徑配置錯誤或后端服務(wù)未正確返回內(nèi)容。

解決方法

  • 檢查 location 塊的路徑是否與后端服務(wù)的路徑一致。

  • 確保后端服務(wù)返回的內(nèi)容路徑正確??梢試L試直接訪問后端服務(wù)的地址,確認(rèn)是否能正常返回內(nèi)容。

3. SSL證書問題

原因:如果使用了SSL證書,但證書路徑或證書內(nèi)容不正確,可能會導(dǎo)致連接失敗。

解決方法

  • 確保SSL證書和密鑰文件的路徑正確,并且文件內(nèi)容無誤。

  • 在Nginx配置文件中正確配置 ssl_certificate 和 ssl_certificate_key 的路徑。

4. 權(quán)限問題

原因:Nginx容器可能沒有足夠的權(quán)限訪問掛載的配置文件或目錄。

解決方法

  • 確保掛載的目錄和文件的權(quán)限正確??梢允褂靡韵旅钫{(diào)整權(quán)限:

sudo chown -R 101:101 /path/to/your/conf.d
sudo chown -R 101:101 /path/to/your/ssl

5. Docker網(wǎng)絡(luò)問題

原因:如果后端服務(wù)和Nginx容器不在同一個網(wǎng)絡(luò)中,可能會導(dǎo)致連接失敗。

解決方法

  • 使用Docker Compose時,確保所有服務(wù)都在同一個網(wǎng)絡(luò)中。例如:

yaml復(fù)制

version: '3'
services:
  nginx:
    image: custom-nginx-proxy
    ports:
      - "80:80"
    networks:
      - my-network
  backend:
    image: your-backend-image
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

到此這篇關(guān)于Docker部署Nginx反向代理的坑與解決方案的文章就介紹到這了,更多相關(guān)Docker部署Nginx反向代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于docker搭建selenium分布式環(huán)境

    基于docker搭建selenium分布式環(huán)境

    這篇文章主要介紹了基于docker搭建selenium分布式環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 詳解如何使用Docker打包Python項目

    詳解如何使用Docker打包Python項目

    Docker是一種開源的容器化平臺,可以將應(yīng)用程序及其依賴項打包到一個輕量級、可移植的容器中,通過使用Docker,可以簡化Python項目的部署和運(yùn)行,提高開發(fā)效率和應(yīng)用程序的可移植性,本文將介紹如何使用Docker來打包Python項目,需要的朋友可以參考下
    2023-11-11
  • docker部署mysql+phpmyadmin的3種方式

    docker部署mysql+phpmyadmin的3種方式

    本文介紹了三種訪問phpmyadmin的方法:link、network和docker-compose.yml,docker-compose.yml文件內(nèi)容為:打開瀏覽器,輸入localhost:8080即可訪問phpmyadmin界面,帳號密碼都是root
    2024-12-12
  • 使用Docker安裝phabricator的配置和使用方法

    使用Docker安裝phabricator的配置和使用方法

    今天小編就為大家分享一篇關(guān)于使用Docker安裝phabricator的配置和使用方法的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Docker容器遷移到其他服務(wù)器的5種方法詳解

    Docker容器遷移到其他服務(wù)器的5種方法詳解

    這篇文章主要介紹了Docker容器遷移到其他服務(wù)器的5種方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 基于spring-boot和docker-java實現(xiàn)對docker容器的動態(tài)管理和監(jiān)控功能[附完整源碼下載]

    基于spring-boot和docker-java實現(xiàn)對docker容器的動態(tài)管理和監(jiān)控功能[附完整源碼下載]

    Docker 是一個開源的應(yīng)用容器引擎,和傳統(tǒng)的虛擬機(jī)技術(shù)相比,Docker 容器性能開銷極低,因此也廣受開發(fā)者喜愛。這篇文章主要介紹了基于spring-boot和docker-java實現(xiàn)對docker容器的動態(tài)管理和監(jiān)控 ,需要的朋友可以參考下
    2019-06-06
  • WIN10系統(tǒng)和Docker內(nèi)部容器IP互通方式

    WIN10系統(tǒng)和Docker內(nèi)部容器IP互通方式

    這篇文章主要介紹了WIN10系統(tǒng)和Docker內(nèi)部容器IP互通方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • docker實現(xiàn)跨宿主機(jī)的容器之間網(wǎng)絡(luò)互聯(lián)

    docker實現(xiàn)跨宿主機(jī)的容器之間網(wǎng)絡(luò)互聯(lián)

    本文主要介紹了docker實現(xiàn)跨宿主機(jī)的容器之間網(wǎng)絡(luò)互聯(lián),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • docker中的python代碼打印失效的解決

    docker中的python代碼打印失效的解決

    這篇文章主要介紹了docker中的python代碼打印失效的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • docker部署apollo詳細(xì)教程

    docker部署apollo詳細(xì)教程

    這篇文章主要介紹了docker部署apollo詳細(xì)教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論