Docker Nginx反向代理實(shí)現(xiàn)過程
最近在系統(tǒng)性梳理網(wǎng)關(guān)的知識(shí),其中網(wǎng)關(guān)的的功能有一個(gè)是代理,正好咱們常用的Nginx也具備次功能,今天正好使用Nginx實(shí)現(xiàn)一下反向代理,與后面網(wǎng)關(guān)的代理做一個(gè)對比,因?yàn)槲沂褂玫膁ocker安裝的Nginx,與直接部署Nginx不太一樣正好記錄下遇到的問題,希望可以幫助到學(xué)習(xí)的同學(xué)。廢話不多說直接上案例。
環(huán)境準(zhǔn)備:mac、docker、spring-boot(兩個(gè)微服務(wù))
第一步:啟動(dòng)Nginx容器
docker ps -a docker start 容器ID

第二步:進(jìn)入容器修改Nginx配置
docekr exec -it 容器ID /bin/bash

第三步:找到Nginx配置
cd /etc/nginx/

不能使用 vim 命令編輯該文件,因?yàn)閐ocker里的鏡像容器特別小,沒有該命令,咱們只能先查看一下該文件。
cat 之后注意看我用綠框框起來的部分,nginx.conf文件里使用的是/etc/nginx/conf.d/*.conf下的配置文件,那咱們在去修改/etc/nginx/conf.d/*.conf下的配置。
我們會(huì)發(fā)現(xiàn)就一個(gè)default.conf配置,不用懷疑就是它了。

cd /etc/nginx/conf.d/

初始的文件是這樣的,監(jiān)聽的80端口,location 指向的是nginx默認(rèn)的index.html頁面。


第四步:修改配置
怎么修改配置呢,前面咱們提到的是容器里去少vim工具無法直接編輯,當(dāng)然有三種方式我大概提一下,第一種是安裝相關(guān)工具,第二方式是copy到咱們自己的本地修改完以后在copy 到容器中重啟,第三種是將容器的掛在切換到本地,那么就可以直接在本地修改。當(dāng)然最好的方式是第三種,我們本次先使用第二種方式修改配置。
4.1:將容器的配置文件copy到本地并修改
sudo docker cp 34fb22321ad3:/etc/nginx/conf.d/default.conf /Users/liluyang/mydocker
在本地就可以看到容器上copy下來的文件了,咱們動(dòng)手改改它。要實(shí)現(xiàn)反向代理也跟簡單就是修改nginx的server模塊。
我直接貼代碼:路由demo1服務(wù),路由demo2服務(wù)是咱們本次修改的重點(diǎn)。

server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}
# 路由demo1服務(wù)
location /demo1 {
proxy_pass http://10.33.148.22:8081;
}
# 路由demo2服務(wù)
location /demo2 {
proxy_pass http://localhost:8082;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}4.2:將修改好的配置文件copy到容器中
sudo docker cp /Users/liluyang/mydocker/default.conf 容器ID:/etc/nginx/conf.d/
4.3:重啟容器并進(jìn)入容器查看是否是咱們最新的文件
docker restart 容器ID docker ps docker exec -it 7a616a5079de /bin/bash cd /etc/nginx/conf.d cat default.conf
下圖就是最新生效的配置文件,我用紅色框框起來的是重點(diǎn),因?yàn)槿萜髦性L問localhost的時(shí)候其實(shí)是訪問的容器中的localhost,docker容器中的localhost:8081,localhost:8082肯定是沒有對應(yīng)的服務(wù)的,后面在實(shí)際看一下是對應(yīng)的現(xiàn)象。

第五步:啟動(dòng)微服務(wù)
啟動(dòng)要反向代理的微服務(wù),我是在本地啟動(dòng)了兩個(gè)微服務(wù):demo1,demo2,端口分別為8081,8082。
@GetMapping("demo1/api/demo1/start")
public String demo1() {
String str = "demo1 start ...";
log.info(str);
System.out.println(str);
return str;
}
@GetMapping("demo2/api/demo2/start")
public String demo1() {
String str = "demo2 start ...";
log.info(str);
System.out.println(str);
return str;
}
啟動(dòng)咱們的服務(wù)之后如果沒有反向代理的話需要怎么訪問咱們的服務(wù)呢,可以在瀏覽器中輸入
http://localhost:8081/demo1/api/demo1/start

http://localhost:8082/demo2/api/demo2/start

第六步:驗(yàn)證Nginx反響代理
我們想要使用反向代理的話就可通過一個(gè)統(tǒng)一的域名端口來訪問咱們不同應(yīng)用了。可以看到我通過
http://localhost:8088/demo1/api/demo1/start可以訪問到服務(wù)demo1,并且Nginx的日志也是沒有問題。


但是如果我想反問demo2呢,前面咱們看到demo2在Nginx里的配置是有些許區(qū)別的,來來實(shí)驗(yàn)一下看看效果。http://localhost:8088/demo2/api/demo2/start,可以看到容器中的日志是鏈接refused。至于為啥前面應(yīng)說了要區(qū)分容器和本地的localhost的區(qū)別。咱們Nginx是采用的docker容器部署,微服務(wù)是本地不熟的。


那再次修改一下配置看看效果,完美解決。
# 路由demo1服務(wù)
location /demo1 {
proxy_pass http://10.33.148.22:8081;
}
# 路由demo2服務(wù)
location /demo2 {
proxy_pass http://10.33.148.22:8082;
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入理解 Docker 數(shù)據(jù)卷(Data Volume)
本文詳細(xì)介紹了Docker數(shù)據(jù)卷(DataVolume)的概念、作用、使用命令、掛載方式以及最佳實(shí)踐,數(shù)據(jù)卷是Docker中實(shí)現(xiàn)數(shù)據(jù)持久化和共享的關(guān)鍵機(jī)制之一,通過本文的學(xué)習(xí),讀者可以更好地掌握數(shù)據(jù)卷的使用方法,從而在容器化應(yīng)用中進(jìn)行有效的數(shù)據(jù)管理2024-11-11
Ubuntu正確安裝Docker和Docker?Compose的步驟詳細(xì)講解
Docker Compose是一個(gè)用于定義和運(yùn)行多容器Docker應(yīng)用的工具,這篇文章主要介紹了Ubuntu正確安裝Docker和Docker?Compose的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
docker容器下配置jupyter notebook的操作
這篇文章主要介紹了docker容器下配置jupyter notebook的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03

