最近接手了團隊以前的日誌項目,說白了,剛開始的時候內心仍是挺沒底的,教程還沒學明白呢就直接上項目,多少仍是有點忐忑的,可是後來發現也還行吧,要寫的東西都是教程裏的,正好藉此機會實踐一下,鞏固一下。前端
以前教程學的先後臺數據交互直接經過瀏覽器,可是因爲瀏覽器的同源策略,還要對CORS(跨域資源共享 Cross-Origin Resource Sharing)進行配置nginx
跨域資源共享( CORS) 是一種機制,它使用額外的 HTTP 頭來告訴瀏覽器 讓運行在一個 origin (domain) 上的Web應用被准許訪問來自不一樣源服務器上的指定的資源。當一個資源從與該資源自己所在的服務器 不一樣的域、協議或端口請求一個資源時,資源會發起一個 跨域 HTTP 請求。好比,站點 http://domain-a.com 的某 HTML 頁面經過 <img> 的 src 請求 http://domain-b.com/image.jpg。網絡上的許多頁面都會加載來自不一樣域的CSS樣式表,圖像和腳本等資源。web
出於安全緣由,瀏覽器限制從腳本內發起的跨源HTTP請求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 這意味着使用這些API的Web應用程序只能從加載應用程序的同一個域請求HTTP資源,除非響應報文包含了正確CORS響應頭。數據庫
(譯者注:這段描述不許確,並不必定是瀏覽器限制了發起跨站請求,也多是跨站請求能夠正常發起,可是返回結果被瀏覽器攔截了。)ubuntu
固然了,它確定是有一些弊端的:vim
咱們知道,所謂預檢請求,都是經過OPTIONS請求方法發出的。須要注意的是,預檢請求不會攜帶任何的請求參數,因此你不須要擔憂數據庫會被修改兩次。服務器須要作的就是,在全局攔截器中,設置Access-Control-Allow系列跨域頭。問題就出在這個跨域頭這裏。須要設置的跨域頭主要有三個:
Access-Control-Allow-Origin: 容許訪問的域名
Access-Control-Allow-Methods: 容許使用的請求方法
Access-Control-Allow-Headers: 容許使用的請求頭api第一個,沒問題,很合理。由於我確實要限制非法網站過來的請求
第二個,也沒毛病。由於確實存在,某些controller只支持特定的HTTP方法。Restful接口中這種限制體現得尤其明顯。跨域問題出在第三個
第三個,就很是皮了。這個是用來告訴前端,我容許你接下來的請求附帶哪些請求頭。或許換個說法更容易暴露它的不合理,就是,我服務器支持哪些請求頭。須要注意的是,這裏必須把全部支持的請求頭都填上。天吶,要知道,全部的HTTP請求頭,基本的,常見的,不常見的,加起來有幾十個呢。若是服務器要所有支持,就要把全部的請求頭都填進去。這將是很是枯燥,並且沒必要要的工做。瀏覽器
這是教程學習過程當中關於跨域請求的一些配置,感受確實挺費勁的,並且有時候報一些關於跨域的錯誤,小白表示根本就看不懂啊。安全
後來瞭解到,通常生產項目都會用到nginx去解決先後臺數據交互的問題,難怪以前訪問某些網站會出現nginx的字樣。
什麼是nginx呢?
Nginx (engine x) 是一個高性能的 HTTP和 反向代理web服務器,同時也提供了IMAP/POP3/SMTP 服務。Nginx是由伊戈爾·賽索耶夫爲 俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特色是佔有內存少,併發能力強,事實上nginx的併發能力在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
自從使用上ubuntu以後,發現Windows真的太難用了,雖然說用鼠標點擊比命令行快捷,可是一行命令行就能解決的問題,鼠標不知道要點多久。
nginx在Ubuntu上的安裝和大多數軟件同樣,一行命令解決問題:
sudo apt-get install nginx
安裝好後還要檢驗一下,通常是經過版本號進行檢驗:
nginx -v
若是有版本號就說明安裝好了。
nginx的配置也是很簡單的,前提是你要知道nginx安裝的目錄以及項目的目錄,通常nginx都是安裝在根目錄下的/etc文件夾裏(可使用 nginx -T查看具體安裝目錄):
而後進入nginx文件夾,打開nginx.conf文件,能夠選擇用vim打開,畢竟比較方便:
sudo vim nginx.conf
找到下面這兩行代碼所在的地方,而後能夠在中間添加項目中nginx.conf所在的路徑。
像上面這樣的就能夠這樣寫:
include /etc/nginx/mime.types; include /home/jincheng/log/nginx.conf; default_type application/octet-stream;
(只是添加了中間一行)
修改完成以後保存,而後執行:
sudo nginx -t
查看配置文件是否生效
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
當出現ok和successful字樣時,說明生效了,而後執行:
sudo nginx -s reload
從新啓動nginx
如何肯定nginx是否生效了呢,首先打開前臺,啓動項目,
前臺能夠由4200端口訪問到,
而後把端口號改爲8014再訪問一下(不必定都是8014,由項目配置文件決定)
而後打開後臺,訪問一個接口
修改路由爲8014/api/client再次訪問:
能夠肯定nginx生效,在之後的使用中,只需使用
sudo /etc/init.d/nginx start
便可啓動nginx。
Ubuntu安裝以後的文件結構大體爲:1)全部的配置文件都在/etc/nginx下,而且每一個虛擬主機已經安排在了/etc/nginx/sites-available下
2)程序文件在/usr/sbin/nginx
3)日誌放在了/var/log/nginx中
4)並已經在/etc/init.d/下建立了啓動腳本nginx
5)默認的虛擬主機的目錄設置在了/var/www/nginx-default (有的版本默認的虛擬主機的目錄設置在了/var/www, 請參考/etc/nginx/sites-available裏的配置)
查看項目的nginx.conf文件,有幾個重要的信息,listen 8014,監聽8014端口,當路由含有/api時,向8114端口發送請求或數據,不然向4200端口發送,這樣一來便實現了先後臺數據的轉發,而此時數據轉發都是經過8014端口進行,瀏覽器認爲是同源的,因此不存在跨域問題。
不得不說,nginx真的挺神奇的,何況那麼多知名互聯網公司都在用,確定是很成功的,但願在之後的應用中能對它瞭解更多吧。