使用docker compose實現簡單的nginx反向代理


本次使用docker完成一個簡單的nginx反向代理,實現負載均衡

共需要兩個nginx容器和宿主機,保證宿主機安裝了nginx就行

yum install -y nginx

 

1.首先安裝docker,拉取nginx鏡像,安裝docker-compose,這里不贅述

2.編寫docker-compose ,注意  我在compose中使用了自定義的網絡,如果沒有事先創建網絡的話會報錯   創建自定義網絡命令:docker network create <網絡名>  查看已有網絡 docker network ls 或者 docker network list

version: "3.9"
services:
nginx_first:
build:
context: .
args:
- port_number=8080
image: nginx:first
ports:
- 8080:80
volumes: #要掛載的卷(可理解為與宿主機共享目錄)
- .:/test
networks:
- nginx-balance
nginx_second:
build:
context: .
args:
- port_number=8081
image: nginx:second
ports:
- 8081:80
environment:
PORT_NUMBER: 8081
volumes: #要掛載的卷(可理解為與宿主機共享目錄)
- .:/test
networks:
- nginx-balance
networks:
nginx-balance:

 

3.編寫dockerfile

這里我用的dockerfile只是為了區別是否實現了反向代理,兩個nginx容器中的index頁面會顯示自身的端口號,方便查看配置是否成功

 

# #dockerfile內容,為每個nginx容器設置主頁,方便查看是否成功實現代理:
# FROM nginx:latest


# ADD . /test
# ARG port_number
# WORKDIR /test
# RUN echo $port_number > /usr/share/nginx/html/index.html

 

4.將dockerfile文件和compose.yml文件放在同一個目錄下

修改宿主機的nginx配置,腳本文件內容如下

 

setenforce 0 #必須關閉selinux 重要,否則連接一定失敗
yum install -y nginx #安裝nginx
docker-compose up -d

#修改nginx配置文件 ,根據目錄決定
sed -i "39i/upstream srv {" /etc/nginx/nginx.conf #srv可以隨便取名,保證對應即可
sed -i "40i/server 192.168.135.144:8080 weight=1;" /etc/nginx/nginx.conf #配置宿主機的兩個端口用於轉發請求,weight為服務器權重,使用默認的輪詢模式
sed -i "41i/server 192.168.135.144:8081 weight=1;}" /etc/nginx/nginx.conf

#添加location塊,用於重寫請求頭
cat >> /etc/nginx/default.d/srv.conf <<EOF
location / {
proxy_pass http://srv;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header x-Forwarded-For $proxy_add_x_forwarded_for;
index index.html index.htm;
root /usr/share/nginx/html;
}
EOF
nginx -s reload

#測試轉發是否成功
curl 192.168.135.144

訪問頁面,如果成功的話刷新頁面會顯示不同的端口號

 5.遇到的問題

宿主機selinux一定要關閉!!   不然會阻止訪問請求,導致一直404

docker創建容器時不能關閉防火牆,否則會創建失敗,報錯為找不到映射的端口?(記不清了,遇到了這個問題記得開啟防火牆)

upsream要卸載http塊里面,location最好寫在nginx安裝目錄下的default.d/ 里面,取名無所謂,最好跟upstream的名稱對應,防止混亂

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM