星期四, 19 6 月, 2025
No Result
View All Result
育心文具行

育心文具行

  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我
育心文具行
  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我
No Result
View All Result
育心文具行
Home 筆記x備忘

Nginx 中同一個網域設定不同應用程式/目錄

2024-08-22
in 筆記x備忘
Reading Time:4 mins read
A A
0

技能點還沒有點太多的領域一點點成果就會獲得大大的成就感。

最近弄了一個可以在同一個網域中實作多的應用程式的設定,這邊紀錄一下。先講結論:

  1. 可以實現同一個網域前後端分離,讓版本控制的操作也分開來。
  2. 同理多個不同應用如果需要互相呼叫時,也可以使用 sub-path 不要 sub-domain 來處理。
  3. 強烈建議不要用套裝的應用程式,關於網域使用的設計需要特別處理。
  4. 個人認為,如果是不同功能的應用場景,還是應該用 sub-domain 處理,這應該是 UX 相關的設計,和技術較為無關。
  5. 系統層的設定較為複雜,包含 Nginx 的設定,如果沒有 full controll 的權限可能實現上較為困難。

前提列一下:

  1. 主網域是 a.com.tw
  2. 第二個網域是 b.com.tw 作為 nginx 的 proxy 使用,如果有需要也會在 dns 上設定。

目標有幾個:

  1. 用戶訪問 a.com.tw 時候,會跳轉至 /root-document/a.com.tw/ 路徑上的 web-app
  2. 用戶訪問 a.com.tw/admin 時候,會跳轉至 /root-document/b.com.tw/ 路徑上的 web-app
  3. 用戶訪問 a.com.tw/uploads 時候,會跳轉至 /root-document/b.com.tw/uploads 路徑上的靜態檔案

實作步驟:

設定 /etc/hosts 檔案,新增:

127.0.0.1 b.com.tw

如果有需要,可以在 DNS 上設定 CNAME 把 b.com.tw 設定為 a.com.tw 別名。

設定 a.com.tw 的網站,Nginx 中添加:

# 將 /admin/ 和 /admin/* 路徑指向後端應用程式
location ^~ /admin/ {
  proxy_pass http://b.com.tw;
}
# 將 /uploads/ 和 /uploads/* 路徑的靜態檔案指向其他資料夾
location ^~ /uploads/ {
  alias /root-document/b.com.tw/uploads/;
  try_files $uri $uri/ /index.html;
}


# Option 其他網站的配置,例如前端 
location ^~ / {
  root /root-document/a.com.tw;
  ...
}

設定 b.com.tw 的網站,Nginx 按照一般的設定即可,不過在動態程式中需要特別注意幾項:

  1. b.com.tw 的顯示網域是主網域 a.com.tw,在畫面上如果顯示非相對域名,要注意顯示的是 a.com.tw 而不是 b.com.tw
  2. 尤其後端上傳行為與 form action 會需要特別注意。
  3. http://b.com.tw 作為後端服務 proxy_pass,要注意 ssl 設定,包含顯示網域的 ssl 是否寫死?或是 proxy_set_header 判斷處理。
  4. uploads 的路徑在範例中也是導向 /root-document/b.com.tw/ 裡面的路徑,如果單純只是靜態檔案也可以自行設定。建議事先規劃整理好。
  5. 需要請注意根目錄設定 .user.ini 檔案中的設定,建議把不同路徑都補進去。

還有一些小細節:

  1. Nginx 中 alias 的路徑需要是 / 結尾。 alias 和 root 不同的地方,參考這裡。
  2. Nginx 路徑匹配優先權問題,請參考這裡。

—

關於 Nginx 設定的注意事項,附上問 ChatGPT 生成回覆:

配置意圖

  1. 將 /admin/ 和 /admin/* 路徑指向後端應用程式:
    • location ^~ /admin/ { ... } 這個配置塊的意圖是將所有匹配 /admin/ 開頭的路徑(包括 /admin/ 和 /admin/*)的請求,轉發到後端應用程式,其地址為 http://b.com.tw。
    • proxy_pass http://b.com.tw; 這個指令表示將符合條件的請求轉發給 http://b.com.tw 這個後端服務處理。
  2. 將 /uploads/ 和 /uploads/* 路徑的靜態檔案指向其他資料夾:
    • location ^~ /uploads/ { ... } 這個配置塊的意圖是處理匹配 /uploads/ 開頭的路徑(包括 /uploads/ 和 /uploads/*)的請求,並將這些請求指向伺服器上的一個具體的資料夾來提供靜態檔案。
    • alias /root-document/b.com.tw/uploads/; 這個指令表示將 /uploads/ 路徑的請求映射到伺服器上 /root-document/b.com.tw/uploads/ 目錄中的對應檔案。例如,請求 /uploads/image.jpg 會映射到 /root-document/b.com.tw/uploads/image.jpg。
    • try_files $uri $uri/ /index.html; 這個指令會嘗試按順序查找以下檔案:
      • $uri:請求的原始檔案或目錄(例如 /root-document/b.com.tw/uploads/image.jpg)。
      • $uri/:如果是目錄,則查找目錄下的檔案(例如 /root-document/b.com.tw/uploads/image.jpg/)。
      • 如果以上都未找到,則回退到 /index.html 這個檔案。

注意事項

  1. ^~ 前綴:
    • ^~ 表示如果路徑匹配 /admin/ 或 /uploads/,那麼該配置塊將優先於其他正則表達式匹配(例如 location ~ 或 location /)來處理請求。這確保了 /admin/ 和 /uploads/ 的請求被這些特定的配置塊處理。
  2. Proxy Pass 的上下文:
    • 當使用 proxy_pass 指令時,Nginx 將請求轉發給後端服務(如 http://b.com.tw)。確保 b.com.tw 這個服務能夠正確處理接收到的 /admin/ 路徑,並且能夠返回正確的響應。
  3. Alias 的使用:
    • alias 指令用於將 URL 路徑映射到文件系統上的實際路徑,注意它不同於 root 指令。使用 alias 時需要確保映射的目錄結構和權限設置正確,以便 Nginx 能夠讀取和提供靜態檔案。
  4. 靜態檔案的優先級:
    • 在 /uploads/ 路徑的靜態檔案配置中,try_files 的指令順序很重要。你需要確保 /index.html 是你希望用來處理靜態資源請求失敗時的回退頁面。
  5. 安全性考量:
    • 在提供靜態資源時,應確保 /root-document/b.com.tw/uploads/ 資料夾內的檔案不包含敏感信息,且檔案權限設置得當,防止未經授權的訪問。

這段配置主要是為了處理特定路徑的請求,將動態內容轉發給後端應用程式,並通過靜態資源提供功能來處理文件的提供。

Tags: dnsdomainnginxphpsub-domainsub-path
Share22Tweet14
Previous Post

Mac 使用 Nodejs 的管理工具 n 來切換版本

Next Post

使用 Cloudflare Workers 處理前端跨域問題

Related Posts

筆記x備忘

解決 PHP 的 dompdf 中文字體亂碼的方法

記錄一下一個之前解決過的問題。 在使用 ...

2025-01-03
100
筆記x備忘

Sublime Text3 檢查 Codeigniter4 專案的外掛

使用 Sublime Text 檢查 C...

2024-12-16
100
筆記x備忘

解決 PHP8.2 mb_convert_encoding 方法已經棄用的問題。

PHP 中 mb_convert_enc...

2024-10-27
100
筆記x備忘

使用 Nginx 基本認證保護動態內容。以一個舊網站為例。

最近處理一個舊網站,因為是 demo 用...

2024-10-27
100
筆記x備忘

使用 Nginx 設定通過 Cloudflare 的真實 IP 與只允許 Cloudflare IP 來的流量。

一次講兩件事,都是和 Cloudflar...

2024-08-07
100
筆記x備忘

ionCube 加密/混淆 PHP for Codeigniter4 筆記

前陣子在搞 Android 的混淆,在第...

2024-03-10
100
Load More
Next Post

使用 Cloudflare Workers 處理前端跨域問題

用 ChatGPT 生成 Codeigniter4 Model Class

《從0到1:打開世界運作的未知祕密,在意想不到之處發現價值》讀書心得(嘗試用 AI 生成)

全站搜尋

No Result
View All Result

關於我

育心文具行

Jerry Lin

程式設計師

育心文具行是一家文具店,老闆的小兒子是一個設計師,職業是設計程式,興趣是設計人,倒是還沒有實作的機會。
--
所有的相遇都不是巧合。
在廣告公司待了三年有兩年多在做內容產品,離職後繼續在內容產業走了四年多,最後選則離開台灣的公司體制在家 SOHO ,碰上了 2020 年疫情才知道原來自己這是走在時代的潮流尖端。 感謝許多老闆和貴人相助,至今目前尚能存活,在台北街頭努力著。

近期文章

  • 於 MacOS 中,整合自然語言,自動化添加行事曆事件
  • 使用 deepwiki-open 針對程式碼產生 WIKI
  • 使用 Tailwind CLI 快速建立靜態 CSS 檔的基本步驟
  • Visual Studio Code 的 PHP CS Fixer 設定
  • MacOS 添加本地伺服器的 DNS

分類

  • 心得x體驗 (45)
  • 筆記x備忘 (77)
  • 閒談x雜記 (13)

贊助買咖啡

Facebook Instagram RSS

標籤

ai android cloudflare flutter git ios javascript linode linux MAC macos mis nginx php plugin QBQ!問題背後的問題 server work sublime sublime text vps vue.js vue3 What if What If? 如果這樣,會怎樣? wordpress 前端 原則 原子習慣 團隊,從傳球開始 團隊,從傳球開始:五百年都難以超越的 UCLA 傳奇教練伍登培養優越人才和團隊的領導心法 壓力測試 外掛 如果這樣,會怎樣?:胡思亂想的搞怪趣問 正經認真的科學妙答 心得 情緒 活動心得 灰階思考 約翰‧漢尼斯 股癌 自慢10 自慢10:18項修練 記錄 謝孟恭 讀書心得 這一生,你想留下什麼?

文章分類

  • 心得x體驗 (45)
  • 筆記x備忘 (77)
  • 閒談x雜記 (13)

近期文章

  • 於 MacOS 中,整合自然語言,自動化添加行事曆事件
  • 使用 deepwiki-open 針對程式碼產生 WIKI
  • 使用 Tailwind CLI 快速建立靜態 CSS 檔的基本步驟
  • Visual Studio Code 的 PHP CS Fixer 設定
  • MacOS 添加本地伺服器的 DNS

近期留言

  • 「Bolin Lai」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言
  • 「Jerry Lin」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言
  • 「JCL」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言

文章月曆

2025 年 6 月
日 一 二 三 四 五 六
1234567
891011121314
15161718192021
22232425262728
2930  
« 5 月    

© 2020 hipster.crazyjerry.studio - a blog about experience, notes and nonsense, by Jerry Lin.

No Result
View All Result
  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我

© 2020 hipster.crazyjerry.studio - a blog about experience, notes and nonsense, by Jerry Lin.