docker?nginx(訪問(wèn)靜態(tài)文件、訪問(wèn)共享目錄、負(fù)載均衡)配置方式
在平常的開發(fā)工作中,我們經(jīng)常需要訪問(wèn)靜態(tài)資源(圖片、HTML頁(yè)面等)、訪問(wèn)文件目錄、部署項(xiàng)目時(shí)進(jìn)行負(fù)載均衡等。那么我們就會(huì)使用到Nginx,nginx.conf 的配置至關(guān)重要。那么今天主要結(jié)合訪問(wèn)靜態(tài)資源、負(fù)載均衡等總結(jié)下 nginx.conf 的配置要點(diǎn)及注意事項(xiàng)。
1:概述
Nginx 是高性能、輕量級(jí)的 web 服務(wù)器和反向代理服務(wù)器。Nginx 可以作為靜態(tài)內(nèi)容服務(wù),如訪問(wèn)HTML頁(yè)面、圖片等。
Nginx 可以作為作為反向代理服務(wù)器,隱藏服務(wù)器真實(shí)IP,用戶只知道 Nginx 的地址,這樣可以提高服務(wù)安全性。
Nginx 可以將動(dòng)態(tài)內(nèi)容請(qǐng)求轉(zhuǎn)發(fā)給后端應(yīng)用服務(wù)器。Nginx 可以將客戶端請(qǐng)求分發(fā)給后端服務(wù)器,通過(guò)配置實(shí)現(xiàn)負(fù)載均衡,提高系統(tǒng)的可用性。
2:訪問(wèn)靜態(tài)資源
靜態(tài)資源在同一個(gè)目錄
(1):掛載目錄配置
# 頁(yè)面目錄 前面的為宿主機(jī)目錄 后面的為容器目錄,如果容器中的目錄不存在,則會(huì)自動(dòng)創(chuàng)建 - /docker/nginx/html:/usr/share/nginx/html
(2):nginx.conf 配置文件
路徑 root 配置:適合 location 路徑與文件路徑一致的情況,路徑是拼接的。
如 location 為 /wx/,root 配置為 /usr/share/html,則訪問(wèn)的完整目錄 為 /usr/share/html/wx/,會(huì)把 location 路徑拼接在 root 路徑后面。
user nginx;
worker_processes auto;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root /usr/share/nginx/html; #路徑為容器內(nèi)的路徑,通過(guò)掛載目錄,實(shí)際訪問(wèn)到宿主機(jī)目錄
}
}
}路徑 alias 配置:適合 location 路徑與文件路徑不一致的情況,路徑是替換的。如 location 配置為 test,alias 配置的文件目錄為 /usr/share/html/wx/,則訪問(wèn)的目錄即為 /usr/share/html/wx/,會(huì)把 location 的路徑替換為 alias 配置的路徑。所以建議 alias 后面的路徑配置的盡可能就是靜態(tài)資源所在的目錄,這樣訪問(wèn)起來(lái)更加方便。
user nginx;
worker_processes auto;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
charset utf-8;
location /test/ {
alias /usr/share/nginx/wx/;
}
}
}(3) 訪問(wèn)測(cè)試:http:ip:端口/文件路徑/test.jpg

靜態(tài)資源在多個(gè)目錄
(1):掛載目錄配置,需要配置多個(gè)掛載目錄
# 頁(yè)面目錄 - /docker/nginx/html/images:/usr/share/nginx/html - /docker/nginx/html/photo:/usr/share/nginx/wx
(2):nginx.conf 配置文件:
user nginx;
worker_processes auto;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 9016;
server_name localhost;
charset utf-8;
# 路徑 root 方式配置
# 通過(guò) /html/ 訪問(wèn),即文件路徑為 /usr/share/nginx/html/ 目錄
location /html/ {
root /usr/share/nginx;
}
# 通過(guò) /wx/訪問(wèn),即文件夾路徑為 /usr/share/nginx/wx/ 目錄
location /wx/ {
root /usr/share/nginx;
}
# 路徑 alias 方式配置
# 通過(guò) /html/ 訪問(wèn),即文件路徑為 /usr/share/nginx/html/ 目錄
location /html/ {
alias /usr/share/nginx/html/; # 配置后面帶 /
}
# 通過(guò) /wx/訪問(wèn),即文件夾路徑為 /usr/share/nginx/wx/ 目錄
location /wx/ {
alias /usr/share/nginx/wx/; # 配置后面帶 /
}
}
}(3):訪問(wèn)圖片

(4) 總結(jié):root 和 alias 都用于指定路徑,在 docker 容器中,指向的都是容器中的路徑,即需要配置掛載目錄,將宿主機(jī)的目錄掛載到容器指定的目錄。root 中路徑配置,特別注意最后面沒(méi)有 / ,根據(jù)路徑訪問(wèn)時(shí)會(huì)將 location 的路徑拼接到 root 指定的路徑后面,root 配置路徑方式是進(jìn)行路徑拼接。alias 配置路徑,特別注意后面有 / ,alias 路徑配置方式訪問(wèn)時(shí),匹配對(duì)應(yīng)的 location,會(huì)將內(nèi)容替換為 alias 中配置的完整路徑。簡(jiǎn)而言之,root 是路徑拼接,alias 是路徑替換。
3:訪問(wèn)共享目錄
我們經(jīng)常需要將常用的軟件、文件等歸納整理放在服務(wù)器的某個(gè)文件夾下,為了使用更加的方便,這個(gè)時(shí)候,就需要訪問(wèn)服務(wù)器上的某個(gè)目錄。
(1) nginx.conf 配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
charset utf-8;
location /test/ {
alias /usr/share/nginx/wx/;
autoindex on; # 開啟自動(dòng)索引,如果不需要可以去掉
autoindex_exact_size off; # 顯示文件大小
autoindex_localtime on; # 顯示文件時(shí)間
}
}
}上面配置中一定要注意,如果不添加 autoindex on,on 開啟自動(dòng)索引,那么訪問(wèn)文件夾時(shí)會(huì)報(bào) 403 forbidden。autoindex on 用于啟用目錄列表功能,當(dāng)訪問(wèn)沒(méi)有默認(rèn)索引文件的目錄時(shí),Nginx會(huì)自動(dòng)生成包含該目錄及子目錄的 HTML 頁(yè)面并返回給客戶端。
(2):測(cè)試如下:

4:負(fù)載均衡配置
如果服務(wù)是單節(jié)點(diǎn),則不涉及負(fù)載均衡配置
user nginx;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 60;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
proxy_pass http://localhost:8008;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}服務(wù)多節(jié)點(diǎn)負(fù)載均衡配置
負(fù)載均衡將請(qǐng)求分發(fā)到不同的后端服務(wù)節(jié)點(diǎn),這樣可以減輕服務(wù)壓力,提高服務(wù)可用性。負(fù)載均衡可以更加合理的利用服務(wù)器的資源,有的服務(wù)器配置高,有的服務(wù)器剩余資源少,那么權(quán)重輪詢可以更加合理的使用服務(wù)器的資源。
負(fù)載均衡部署方式可以是同一個(gè)機(jī)器多個(gè)節(jié)點(diǎn),也可以是多機(jī)器多節(jié)點(diǎn)。單機(jī)器多節(jié)點(diǎn)的有點(diǎn)在于資源利用率高、不存在跨節(jié)點(diǎn)通信的問(wèn)題。通常用于開發(fā)環(huán)境、小型應(yīng)用、或者非關(guān)鍵服務(wù)。單機(jī)器多節(jié)點(diǎn)存在單點(diǎn)故障的問(wèn)題,多節(jié)點(diǎn)共享資源,存在性能問(wèn)題。多機(jī)器多節(jié)點(diǎn)性能高、方便拓展、不存在單點(diǎn)故障的問(wèn)題,缺點(diǎn)是成本高、如果跨機(jī)通信,維護(hù)和配置復(fù)雜。多機(jī)器多節(jié)點(diǎn)適用于中大型應(yīng)用,對(duì)性能要求高的服務(wù)。
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
# 負(fù)載均衡,兩個(gè)節(jié)點(diǎn)的ip和端口,配置ip和端口即可,不需配置http頭信息
# upstream 定義一組后端服務(wù)器
# 默認(rèn)負(fù)載均衡方式,將請(qǐng)求依次發(fā)送給后端服務(wù)節(jié)點(diǎn)
upstream backend {
server 11.22.xx.xx:8001;
server 11.22.xx.xx:8002;
}
# 加權(quán)輪詢,權(quán)重越大的節(jié)點(diǎn)處理的請(qǐng)求越多
upstream backend {
server 11.22.xx.xx:8001 weight=8;
server 11.22.xx.xx:8002 weight=2;
}
# ip 哈希輪詢 根據(jù)客戶端的 IP 地址進(jìn)行哈希計(jì)算,確保同一個(gè)客戶端的請(qǐng)求總是分配給同一臺(tái)后端服務(wù)器。
upstream backend {
ip_hash; # 啟用 IP 哈希
server 11.22.xx.xx:8001;
server 11.22.xx.xx:8002;
}
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
proxy_pass http://backend; # 將請(qǐng)求轉(zhuǎn)發(fā)到 upstream 組,proxy_pass 將請(qǐng)求轉(zhuǎn)發(fā)給指定的目標(biāo)服務(wù)器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}nginx 常用輪詢方式:
- 默認(rèn)輪詢:默認(rèn)輪詢方式會(huì)將請(qǐng)求依次轉(zhuǎn)發(fā)給后端服務(wù)器
- 加權(quán)輪詢:配置不同的權(quán)重,權(quán)重越大的服務(wù)器處理的請(qǐng)求越多。主要常用于不同服務(wù)器的配置、性能有差距,或者剩余服務(wù)器資源的合理利用。
- IP 哈希輪詢:根據(jù)客戶端的 IP 地址進(jìn)行哈希計(jì)算,確保同一個(gè)客戶端的請(qǐng)求總是分配給同一臺(tái)后端服務(wù)器。根據(jù)客戶端 IP 分配請(qǐng)求,適合會(huì)話保持。
總結(jié)
以上為 Nginx 主要內(nèi)容,在平常的開發(fā)工作中,可以進(jìn)行靜態(tài)資源的訪問(wèn)。如有小程序靜態(tài)資源、pc端靜態(tài)資源,則將不同的靜態(tài)資源放在不同的目錄下,配置不同的掛載目錄。root 類型配置的 location 路徑會(huì)拼接到 root 配置的路徑后面。alias 類型配置的 location 路徑主要是訪問(wèn)使用,實(shí)際是將其替換為 alias 后面配置的路徑。所以 root 適用于訪問(wèn)路徑和靜態(tài)資源路徑一致的場(chǎng)景,alias 適用于訪問(wèn)路徑和靜態(tài)資源路徑不一致的場(chǎng)景。使用負(fù)載均衡配置配置,可以更加合理的使用服務(wù)器的資源,提高服務(wù)可用性。
僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker啟動(dòng)參數(shù)超詳細(xì)講解
在啟動(dòng)Docker容器時(shí),我們可以通過(guò)添加參數(shù)來(lái)修改容器的配置,這樣可以靈活地適應(yīng)不同的場(chǎng)景和需求,這篇文章主要給大家介紹了關(guān)于Docker啟動(dòng)參數(shù)的相關(guān)資料,需要的朋友可以參考下2024-01-01
Centos Stream9安裝Docker報(bào)錯(cuò)download.docker.com:443的原因分析與解決
這篇文章主要為大家詳細(xì)介紹了Centos Stream9在安裝Docker時(shí),報(bào)錯(cuò)download.docker.com:443的原因分析與解決方法,有需要的小伙伴可以參考下2025-10-10
docker配置修改阿里云鏡像倉(cāng)庫(kù)的實(shí)現(xiàn)
這篇文章主要介紹了docker配置修改阿里云鏡像倉(cāng)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
通過(guò)容器技術(shù)(docker)部署MySQL讀寫分離
Mycat作為開源數(shù)據(jù)庫(kù)中間件,在MySQL讀寫分離架構(gòu)中發(fā)揮核心作用,通過(guò)智能代理層實(shí)現(xiàn)讀寫請(qǐng)求的自動(dòng)路由、負(fù)載均衡與故障轉(zhuǎn)移,從而提高系統(tǒng)性能和可用性2026-01-01
更改docker默認(rèn)數(shù)據(jù)目錄的方法步驟
本文主要介紹了更改docker默認(rèn)數(shù)據(jù)目錄的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
在Docker中利用Tomcat快速部署web應(yīng)用的方法示例
這篇文章我們就來(lái)說(shuō)一下怎么在docker中快速部署一個(gè)web應(yīng)用。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
Docker核心組件之聯(lián)合文件系統(tǒng)詳解
這篇文章主要為大家介紹了Docker核心組件之聯(lián)合文件系統(tǒng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

