使用Nginx解決 前端請求自己電腦跨域的問題(Nginx的安裝和配置,使用)

推薦博客

一、nginx的簡介:

1.什麼是Nginx?

(1)Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;Nginx可以作爲一個HTTP服務器進行網站的發佈處理,另外Nginx可以作爲反向代理進行負載均衡的實現。
(2)因爲它 內存佔用少,啓動極快,高併發能力強,在互聯網項目中廣泛應用;

2.什麼是代理:此時就涉及到兩個角色,一個是被代理角色,一個是目標角色,被代理角色通過這個代理訪問目標角色;

(1)正向代理:通過代理訪問原本不能訪問的網站,如Google。正向代理最大的特點是客戶端非常明確要訪問的服務器地址;服務器只清楚請求來自哪個代理服務器,而不清楚來自哪個具體的客戶端;正向代理模式屏蔽或者隱藏了真實客戶端信息。
(2)反向代理:客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。因爲客戶端不需要任何配置就可以訪問。反向代理,“它代理的是服務端,代服務端接收請求”,主要用於服務器集羣分佈式部署的情況下,反向代理隱藏了服務器的信息。
(3)舉個例子:
①正向代理:由於防火牆的原因,我們不能直接訪問谷歌,那麼我們就可以藉助VPN來實現,這就是一個的正向代理的例子,客戶端知道訪問的是谷歌,但是谷歌不知道客戶端是通過VPN訪問進來的;
②反向代理:當我們在外網訪問百度的時候,其實過程中是會進行一次轉發,代理到內網中去,這就是反向代理,即反向代理代理的是服務器端,而且這個過程對於客戶端是透明的。

3.承載量:能夠支撐50000併發連接,並且CPU、內存等資源消耗卻非常低,運行非常穩定;

4.Nginx的應用場景:

(1)HTTP服務器:Nginx是一個Http服務可以獨立提供http服務,可以做網頁靜態服務器;
(2)虛擬主機:可以實現一臺服務器虛擬出多個網站;
(3)反向代理和負載均衡:當網站的訪問量達到一定程度後,單臺服務器不能滿足用戶的請求,需要用多臺服務器集羣可以使用Ngnix做反向代理。並且多臺服務器可以平均分擔請求負載,不會出現因爲某個服務器宕機了影響其他的服務,或者某個服務器閒置的情況;

5.Nginx出現的背景:

(1)在互聯網沒有現在這麼火,每個網站所需要支持的併發量不需要太大的時候,最開始使用的是Apache就能夠滿足要求。但是Apache對高併發不支持,所以它不是高性能的web服務器,因爲併發量上萬之後,會導致服務器消耗大量的內存,操作系統對其進行進程和線程的切換會消耗大量的CPU資源,導致Http請求的平均響應速度降低。
(2)爲了應對現在互聯網流程,需要一個高性能的穩定的服務器,Nginx應運而生。

6.爲什麼Ngnix就能解決互聯網高併發的需求呢?

(1)開源,免費的產品;
(2)Nginx使用事件驅動架構,使得它可以支持數以百萬級別的TCP鏈接
(3)Nginx是一個跨批改服務器,可以運行在Linux,Windows,MacOSSierra等主流的操作系統上;
(4)極爲穩定;

7.Nginx的優勢:

(1)作爲Web服務器:相比較Apache,Nginx使用更少的資源,支持更多的併發連接,體現更高的效率。能夠支持高達50000個併發連接數的響應;
(2)作爲負載均衡服務器:
①Nginx既可以內部直接支持Rails和PHP,也可以支持作爲HTTP代理服務器對外進行服務。
②Nginx用C編寫,系統資源開銷和CPU的使用效率逗比Perlbal要好很多;
(3)Nginx安裝簡單,配置文件非常簡潔(還能夠支持perl語法),bugs非常少的服務器:Nginx啓動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月,也不需要重新啓動。還能夠在不間斷服務的情況系,進行軟件的升級。
(4)Nginx使用基於時間驅動架構,使得其可以支持數以百萬級別的TCP連接。
(5)Nginx是一個跨平臺服務器,可以運行在各個操作系統上。

8.Nginx的Master-Worker模式

(1)啓動Nginx之後,其實就是在80端口啓動了Socker服務進行監聽,Nginx設計Master進程和Worker進程。
①Master進程作用:讀取並驗證配置文件nginx.conf;管理worker進程;
②Worker進程作用:每一個Worker進程都維護一個線程(避免線程的切換),處理連接和請求;其中Worker進程的數量是由配置文件決定的,一般是和CPU的個數(有利於進程的切換)有關,配置幾個就有幾個Worker進程;

9.Nginx的熱部署原理:

(1)什麼是熱部署?就是在修改了配置文件之後,不需要終端Nginx,也不需要終端請求,就能讓配置文件生效的一個動作;
(2)Nginx達到熱部署的效果可能通過下面倆種思路?
①方案一:修改配置文件nginx.conf後,主進程master負責推送給woker進程更新配置信息,woker進程收到信息後,更新進程內部的線程信息。(有點valatile的味道)
②方案二:修改配置文件nginx.conf後,重新生成新的worker進程,當然會以新的配置進行處理請求,而且新的請求必須都交給新的worker進程,至於老的worker進程,等把那些以前的請求處理完畢後,kill掉即可。
Nginx採用的就是方案二來達到熱部署的!

10.Nginx是如何完成在高併發下的高效處理的?

(1)簡單的一條原因就是:Nginx中的worker進程個數和CPU綁定,worker進程內包含一個線程,不出現線程切換的消耗,這一個線程能不停地高效迴環處理請求,有助於高效;
(2)另一個:實際上 Nginx是採用了Linux的epoll模型,epoll模型基於事件驅動機制,它可以監聽多個事件是否準備完畢,如果OK,那麼放入epoll隊列中,這個過程是異步的。Worker只需要從epoll隊列循環處理即可;
總結:https://blog.csdn.net/hemeinvyiqiluoben/article/details/82256419
通過異步非阻塞的事件處理機制,Nginx實現由進程循環處理的準備好的事件,從而實現高併發和輕量級;

11.Nginx掛了怎麼辦呢? 如何避免Nginx的單點故障問題? 如何實現高可用?

方案:Keepalived+Nginx實現高可用。
(1)Keepalived是一個高可用解決方案;
(2)Keepalived+Nginx實現高可用的原理:
①第一:請求不直接打到Nginx上,應該先通過Keepalived(就是所謂虛擬IP,VIP);
②第二:Keepalived會監控Nginx的生命狀態,(提供一個用戶自定義的腳本,定義檢查進程狀態,進行權重變化,從而實現Nginx的故障切換)。

二、Nginx的安裝和使用,解決跨域問題

1. 安裝:

http://nginx.org/en/download.html 可以選擇下載穩定版;
不用安裝 直接啓動;

2. 啓動Nginx:

(1)直接雙擊nginx.exe,雙擊後一個黑色的彈窗一閃而過(一般不推薦使用,因爲可能啓動失敗)
(2)打開cmd命令窗口,切換到nginx解壓目錄下,輸入命令 nginx.exe 或者 start nginx ,回車即可;

3. 檢查Nginx是否啓動成功

訪問http://localhost:80 得到如下界面:
在這裏插入圖片描述

4. 配置Nginx:conf目錄下的nginx.conf

默認監聽的是80 端口,要確認監聽端口未被佔用

server {
        listen       80;
        server_name  localhost;
		
		location / {             #以/開頭的,也就是所有請求都轉發
			proxy_pass http://ip:8080;     # 這裏的http url一定要寫全
			proxy_set_header Host $host;
			index index.html index.htm;
		}
    }

這個網址解釋的還行
相當於:
原本想要訪問的是:
http://ni.hao/api/getDetail
實際上調試的頁面是:http://192.168.11.33:8080/
想要解決跨域問題,就相當於請求的接口是:http://192.168.11.33:8080/api/getDetail
也就是所有請求http://192.168.11.33:8080/ 都轉發到請求 http://ni.hao/api上去;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章