※ 引述《redbxh (LJC)》之銘言:
: Djangp Project
: - / (Homepage)
: - /appa/ (Appa)
: - /appb/ (Appb)
: www.aaa.com -> / (homepage)
: appa.aaa.com -> /appa (Appa)
: appb.aaa.com -> /appb (Appb)
: server {
: ...
: server_name domain2
: ...
: location / {
: rewrite / /app1/
: ...
: }
: }
: 瀏覽器輸入 domain2/ 時確實會連到 /app1
: 但是顯示的url 也跟著改回 domain2/app1/
: 有辦法讓 domain2/ = /app1/ 嗎?
我好像有點搞錯你的需求, 先確認一下
假設你現在有一個完整的網站架在 http://site.localhost, 包含下面這幾頁
http://site.localhost/app1/
http://site.localhost/app1/test/
http://site.localhost/app2/
http://site.localhost/app2/test/
你現在想把它們變成
http://app1.site.localhost/
http://app1.site.localhost/test/
http://app2.site.localhost/
http://app2.site.localhost/test/
是這樣嗎?
如果是的話, 可以試試直接把 nginx 直接 proxy 給自己比較快
server {
... # 大致不變
location / {
# proxy_pass 到 uwsgi, 不變
}
}
# 把 app1.site.localhost proxy 到 127.0.0.1/app1
server {
server_name app1.site.localhost;
location / {
proxy_pass http://127.0.0.1/app1$request_uri;
}
}
這樣當你訪問 http://app1.site.localhost/test/
=> 進第二個 virtual server, $request_uri = /test/
=> 被 proxy pass 到 http://127.0.0.1/app1/test/
=> 進第一個 virtual server, $request_uri = /app1/test/
=> 被 proxy pass 到 uwsgi, 後面就跟你本來的程式流程一樣
app2 也是比照辦理
如果你有需要也可以在原本的 virtual server 加幾個 rewrite
把原本 site.localhost/app1/ 的訪問重導向到 app1.site.localhost/
這個方法的缺點是, Django app 會不知道自己用的網址其實和使用者看到的不一樣
所以如果你需要用一些基於網址的功能, 例如 site framework
就會需要額外設一些 HTTP headers 例如 X-Forwarded 系列
不過這個遇到再去找資料就行了, 資料應該不少