微信授權域名允許子域名,前後端分離nginx做子域名靜態頁面對映,解決nginx跨域以及ajax跨域
因公司需求,前後端需徹底分離,由nginx對映靜態頁面,另外設定節點訪問介面。本來微信授權域是做在介面上的,現在多出h5靜態頁面的域名,網上教程允許子域名授權大多都是配置在授權回撥域名下的頁面多做了一次跳轉,拿到code之後再跳轉到其他域名下的頁面,但是這樣會犧牲使用者體驗實現子域名授權。
經過公司技術顧問指導,得到一個更好的辦法解決子域名授權問題,使用者訪問介面授權,授權成功後生成加密token,將token儲存至伺服器,同時儲存從微信授權得到的使用者資訊,再將token寫進cookie之中,子域名之間共享cookie,跳轉到的子域名將cookie傳回伺服器,伺服器判斷該token是否有效,有效則返回使用者資訊。使用者則不需要再次授權。
Nginx對映靜態檔案坑了很長時間,本來的思路是通過
location / {
root html;
index index.html index.htm;
}
用location 匹配訪問的地址進行頁面返回,但是location之中的root灰將匹配到的location➕root作為路徑,進行資源的返回。但是前端不肯所有頁面都使用同一地址訪問。
後來使用alias解決
location / {
alias /html/;
index index.html index .htm;
}
注意我的alias 後面的html有➕/
這也是個坑,root中的路徑最後可以加/也可以不加/,都可以找得到地址,但是alias中的路徑必須要加/,加/,加/
但是當輸入的路徑更為複雜的時候就變成了404,nginx的location的取反的正則我是一直都沒弄出來,最後通過一條配置解決了需求。
location / {
try_files $uri $uri/ /index.html;
}
通過try_files配置所有的uri都取請求index.html 的檔案,這是我們老闆研究出來的。
就不多說了,都走完之後,開始訪問的時候發現直接請求介面的時候的cookie是帶著的,但是當通過h5的域名去訪問介面的時候cookie就一直沒出現在header中,最後通過
這個帖子的啟發修改了ajax的跨域帶cookie的功能。一切正常