前后臺(tái)Nginx部署同域名路徑區(qū)分配置
這篇主要講的是,前后臺(tái)用同一個(gè)域名部署時(shí),怎么通過(guò)不同路徑來(lái)區(qū)分前臺(tái)、后臺(tái)的靜態(tài)文件,還有API,應(yīng)用程序編程接口)接口。另外也會(huì)適配Vue Router的history(歷史)模式,保證頁(yè)面刷新、路由跳轉(zhuǎn)都正常,不報(bào)錯(cuò)。
1 Nginx 核心配置
server {
listen 80;
server_name nature.us.com; # 把這個(gè)改成你自己的域名
root /usr/local/nginx/html;
# 前臺(tái)靜態(tài)文件配置(訪(fǎng)問(wèn)根路徑就是前臺(tái))
location / {
root /usr/local/nginx/html/client; # 前臺(tái)文件存在這個(gè)文件夾里
index index.html;
try_files $uri $uri/ /index.html; # 解決Vue Router的history(歷史)模式刷新404的問(wèn)題
}
# 后臺(tái)靜態(tài)文件配置(訪(fǎng)問(wèn)/manger路徑就是后臺(tái))
location /manger {
alias /usr/local/nginx/html/manger; # 后臺(tái)文件存在這個(gè)文件夾里
index index.html;
try_files $uri $uri/ /manger/index.html; # 后臺(tái)也解決Vue Router的history(歷史)模式刷新404的問(wèn)題
}
# API(Application Programming Interface,應(yīng)用程序編程接口)請(qǐng)求代理(訪(fǎng)問(wèn)/prod-api開(kāi)頭的路徑,會(huì)轉(zhuǎn)發(fā)到后端)
location /prod-api/ {
proxy_pass http://localhost:8080/; # 改成你自己的后端服務(wù)地址,末尾的/千萬(wàn)別刪
proxy_set_header Host $host; # Host(主機(jī))請(qǐng)求頭設(shè)置
proxy_set_header X-Real-IP $remote_addr; # X-Real-IP(真實(shí)IP)請(qǐng)求頭設(shè)置
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # X-Forwarded-For(轉(zhuǎn)發(fā)IP列表)請(qǐng)求頭設(shè)置
proxy_set_header X-Forwarded-Proto $scheme; # X-Forwarded-Proto(協(xié)議類(lèi)型)請(qǐng)求頭設(shè)置
}
}2 Nginx 目錄結(jié)構(gòu)
下面是文件存放的目錄結(jié)構(gòu),一看就懂:
nginx:
└── html:
├── client: # 前臺(tái)的靜態(tài)文件都放這里,訪(fǎng)問(wèn)根路徑就找這個(gè)文件夾
└── manger: # 后臺(tái)的靜態(tài)文件都放這里,訪(fǎng)問(wèn)/manger路徑就找這個(gè)文件夾3 前端配置(Vue 項(xiàng)目)
3.1 后臺(tái)項(xiàng)目配置(訪(fǎng)問(wèn)路徑帶/manger前綴)
1. vue.config.js 配置(給后臺(tái)路徑加個(gè)統(tǒng)一前綴/manger,和Nginx配置對(duì)應(yīng)上):
module.exports = {
publicPath: "/manger", // 后臺(tái)所有路徑都加/manger前綴,和Nginx的/manger路徑匹配
}2. router.js 配置(去掉URL(Uniform Resource Locator,統(tǒng)一資源定位符)里的#,設(shè)置基礎(chǔ)路徑):
export default new Router({
base: "/manger", // 基礎(chǔ)路徑和上面的publicPath一樣,都是/manger
mode: "history", // 去掉URL(Uniform Resource Locator,統(tǒng)一資源定位符)里的#,這個(gè)配置需要Nginx配合上面的try_files才能用
scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes,
});3.2 前臺(tái)項(xiàng)目配置(API請(qǐng)求設(shè)置)
axios 配置(給API(Application Programming Interface,應(yīng)用程序編程接口)請(qǐng)求加個(gè)前綴/prod-api,和Nginx的代理路徑對(duì)應(yīng)):
import axios from 'axios'
// 創(chuàng)建axios實(shí)例,設(shè)置請(qǐng)求基礎(chǔ)路徑
export const request = axios.create({
baseURL: "/prod-api", // 所有API(Application Programming Interface,應(yīng)用程序編程接口)請(qǐng)求都帶/prod-api前綴,和Nginx的/prod-api路徑匹配
timeout: 5000, // 請(qǐng)求超時(shí)時(shí)間,5秒沒(méi)響應(yīng)就報(bào)錯(cuò)
headers: {
"Content-Type": "application/json", // Content-Type(內(nèi)容類(lèi)型)請(qǐng)求頭,設(shè)置為JSON格式
},
});
// 請(qǐng)求攔截器(舉個(gè)例子:給請(qǐng)求加Token(令牌),實(shí)現(xiàn)登錄認(rèn)證)
request.interceptors.request.use(
(config) => {
const token = localStorage.getItem("token"); // 從localStorage(本地存儲(chǔ))拿Token(令牌)
if (token) {
config.headers.Authorization = ` ${token}`; // 把Token(令牌)放到Authorization(授權(quán))請(qǐng)求頭里傳給后端
}
return config;
},
(error) => {
return Promise.reject(error); // Promise(承諾)是異步編程的解決方案,此處返回錯(cuò)誤信息
}
);
export default request;4 配置說(shuō)明(關(guān)鍵注意點(diǎn),一定要看!)
- 路徑匹配順序:Nginx是按location的配置順序來(lái)匹配路徑的,所以/manger(后臺(tái))和/prod-api(API,Application Programming Interface,應(yīng)用程序編程接口)的配置,一定要放在/(前臺(tái))的前面。不然所有請(qǐng)求都會(huì)被根路徑攔截,后臺(tái)和API(Application Programming Interface,應(yīng)用程序編程接口)就訪(fǎng)問(wèn)不到了。
- Vue history模式刷新404 :之所以加try_files配置,就是為了解決刷新頁(yè)面報(bào)404的問(wèn)題。前臺(tái)要配成/index.html,后臺(tái)要配成/manger/index.html,必須和前面設(shè)置的base路徑一致,不然沒(méi)用。這里的history指的是Vue Router的history(歷史)模式。
- proxy_pass末尾的/別刪:配置API(Application Programming Interface,應(yīng)用程序編程接口)代理時(shí),proxy_pass后面的地址(比如http://localhost:8080/),末尾的/一定要保留。如果刪掉,Nginx會(huì)把/prod-api這個(gè)前綴一起傳給后端,要是后端接口里沒(méi)有/prod-api,請(qǐng)求就會(huì)報(bào)錯(cuò)。
- 前后端路徑要對(duì)齊:前端配置的publicPath、router.base,必須和Nginx里對(duì)應(yīng)的location路徑一致;axios的baseURL,也要和Nginx的API(Application Programming Interface,應(yīng)用程序編程接口)代理路徑一致。只要有一個(gè)對(duì)不上,就會(huì)出現(xiàn)訪(fǎng)問(wèn)不到頁(yè)面、接口請(qǐng)求失敗的問(wèn)題。
到此這篇關(guān)于前后臺(tái)Nginx部署同域名路徑區(qū)分配置的文章就介紹到這了,更多相關(guān)Nginx同域名路徑區(qū)分內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx 訪(fǎng)問(wèn) /root/下 403 Forbidden問(wèn)題解決
在使用Nginx作為Web服務(wù)器時(shí),可能會(huì)遇到403 Forbidden錯(cuò)誤,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-05-05
負(fù)載均衡下的webshell上傳+nginx解析漏洞的過(guò)程
這篇文章主要介紹了負(fù)載均衡下的webshell上傳+nginx解析漏洞,首先介紹了負(fù)載均衡下webshell上傳的四大難點(diǎn)及環(huán)境搭建教程,感興趣的朋友跟隨小編一起看看吧2024-02-02
nginx中return和rewrite指令同時(shí)存在先執(zhí)行順序哪個(gè)
在Nginx配置中,當(dāng)return和rewrite指令同時(shí)存在,其執(zhí)行順序取決于配置的具體場(chǎng)景,這篇文章主要介紹了nginx中return和rewrite指令同時(shí)存在先執(zhí)行順序哪個(gè),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
利用nginx和騰訊云免費(fèi)證書(shū)制作https的方法
這篇文章主要介紹了利用nginx和騰訊云免費(fèi)證書(shū)制作https的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
CentOS 7.3.1611編譯安裝Nginx1.10.3+MySQL5.7.16+PHP7.1.2
這篇文章主要介紹了CentOS 7.3.1611編譯安裝Nginx1.10.3+MySQL5.7.16+PHP7.1.2,需要的朋友可以參考下2018-01-01
nginx配置前端請(qǐng)求轉(zhuǎn)發(fā)到指定的后端ip方式
文章主要解釋了Nginx配置中如何通過(guò)location規(guī)則將前端靜態(tài)資源和后端接口請(qǐng)求進(jìn)行分流,并詳細(xì)描述了請(qǐng)求轉(zhuǎn)發(fā)到后端的具體過(guò)程,包括rewrite規(guī)則、代理協(xié)議設(shè)置、請(qǐng)求頭透?jìng)?、代理地址指定及失敗重試機(jī)制等2026-05-05
Nginx+Lua腳本+Redis 實(shí)現(xiàn)自動(dòng)封禁訪(fǎng)問(wèn)頻率過(guò)高IP
本文主要介紹了如何使用OpenResty+Lua進(jìn)行動(dòng)態(tài)封禁IP的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10

