將github的php介面,放到伺服器上供訪問。(為了我的看板娘功能)
背景:從網上找到一個看板娘js的介面,在github上有原始碼,怕有一天服務關閉了,不是很悲催,想自己搭建api環境,裡面有看板孃的模版,只能通過爆漏介面的方式訪問。
方法:
在伺服器上安裝php+nginx/Apache
配置網站的資訊(nginx),指定自己伺服器的ip地址(如果域名已經用過了,配置二級域名)
2.進入網站的目錄 (在上面配置nginx中自己詳細配置),git clone 或者scp 到這裡。
3.修改程式碼中的api介面的地址為自己的地址,進行訪問。
4.發現不行:
(index):1 Failed to load http://www.mmmmmm.me/live2d_api/get/?id=1-53: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mmmmmm.me' is therefore not allowed access.
是因為跨域問題
解決:
進入nginx,
vim /usr/local/nginx/conf/enable-php.conf(只適用於php服務,靜態檔案不屬於php服務,還可能載入不出來,我這裡有很多靜態圖片需要載入,所以推薦下面這種)
或者
vim /usr/local/nginx/conf/vhost/你的網址.conf(推薦)
加入:
add_header Access-Control-Allow-Origin '*' ;(載入server中的外面,並不是在location中) . 最終方法
例如
server{ add ...... location /{ (這種是錯誤的) add ...... } }
關鍵點:
1.上面的add 網上很多說載入location中,但是我這裡是在php服務中,php中還有一個location,這就關乎到php的locatino訪問順序和覆蓋的問題:所以就會出現如果在php location中匹配的話,會覆蓋掉server中的,所以即使在server 中配置了location還是不會成功,但是如果在php中的location中匹配的話還是不行的,靜態檔案不會載入,我這裡有很多圖片需要載入,所以只能在server的外面加。其他的可以在location中加,因為我這裡涉及到php,所以特殊。
1、 location 的匹配順序是“先匹配正則,再匹配普通”。
矯正: location 的匹配順序其實是“先匹配普通,再匹配正則”。我這麼說,大家一定會反駁我,因為按“先匹配普通,再匹配正則”解釋不了大家平時習慣的按“先匹配正則,再匹配普通”的實踐經驗。這裡我只能暫時解釋下,造成這種誤解的原因是:正則匹配會覆蓋普通匹配(實際的規則,比這複雜,後面會詳細解釋)。
2、 location 的執行邏輯跟 location 的編輯順序無關。
矯正:這句話不全對,“普通 location ”的匹配規則是“最大字首”,因此“普通 location ”的確與 location 編輯順序無關;但是“正則 location ”的匹配規則是“順序匹配,且只要匹配到第一個就停止後面的匹配”;“普通location ”與“正則 location ”之間的匹配順序是?先匹配普通 location ,再“考慮”匹配正則 location 。注意這裡的“考慮”是“可能”的意思,也就是說匹配完“普通 location ”後,有的時候需要繼續匹配“正則 location ”,有的時候則不需要繼續匹配“正則 location ”。兩種情況下,不需要繼續匹配正則 location :( 1 )當普通 location 前面指定了“ ^~ ”,特別告訴 Nginx 本條普通 location 一旦匹配上,則不需要繼續正則匹配;( 2 )當普通location 恰好嚴格匹配上,不是最大字首匹配,則不再繼續匹配正則。
總結一句話: “正則 location 匹配讓步普通 location 的嚴格精確匹配結果;但覆蓋普通 location 的最大字首匹配結果”
2.不能在nginx.conf中修改,因為nginx.conf會有個預設的server,他並不是我們配置的網站的php server