Nginx解決跨越問題——反向代理分析

在寫項目的過程中,遇到這樣一個問題:基于公司的V6平臺開發(fā)一個前后端分離的項目,Tomcat容器管理13411接口以便于接入V6平臺,但是Html頁面無法支撐,因為Html頁面必須布置在另一端口下,無法用13411端口,所以這就會存在跨越問題,我們想到了兩種解決思路:
1)建Web項目,通過Tomcat容器進行管理并解析Html視圖,Web中的Ajax請求不直接請求13411,而是請求后端,后端接收到請求,在通過Http直接請求13411。
2)走Nginx代理避開跨越問題。

經過一致商議,都覺得走Nginx比較好,所以下載安裝Nginx到Linx服務器,并修改Nginx配置文件nginx.conf,自覺配置沒毛病,所以訪問Index是成功的,但是Ajax一發(fā)起請求,就報錯:

跨域.jpg

這是典型的跨越問題,所以配置文件加了請求頭,如下:

nginx.conf配置文件.jpg

然后測試,還是報跨越的錯,查看控制臺:

console輸出.jpg

瀏覽器輸出響應碼是200,但是請求死活發(fā)不出去,各種百度谷歌,發(fā)現自己配置文件也沒寫錯啊?。。。。ㄟ@個時候已經懷疑就是配置文件沒寫對,但是就是不知道哪里沒配對,所以又隱隱覺得配置文件是對的——因為針對跨越問題,就是配置幾行簡單的代碼)

這個時候已經快絕望了,折騰了一天,項目又很趕,打算換第一種解決辦法的時候,突然想到了一個詞,Nginx的反向代理,究竟什么是反向??

理解這個問題之前,我們先看兩個概念:
正向代理:位于客戶端和原始服務器(origin server)之間的服務器,代理客戶端向原始服務器轉交請求并將獲得的內容返回給客戶端,這就是正向代理。

正向代理最大的特點:客戶端非常明確要訪問的服務器地址,而服務器只清楚請求來自哪個代理服務器而不清楚來自哪個具體的客戶端;正向代理模式屏蔽或者隱藏了真實客戶端信息。

正向代理的用途:
1)代理客戶端訪問無法訪問的資源
2)加速訪問資源(做緩存)
3)對客戶端訪問授權(上網認證)
4)記錄用戶訪問記錄(上網行為管理),對外隱藏用戶信息

正向代理與反向代理對照.png

反向代理:以代理服務器來接收客戶端的連接請求,然后將請求轉發(fā)給內部網絡上的服務器,并將從服務器上得到的結果返回給客戶端。

正向代理示意圖.png
反向代理示意圖.png

單純理解概念,好像正向代理和反向代理的區(qū)別差不多,但是觀看對比圖,我們就可以知道,正向代理客戶端知道有代理服務器這個東西,但是反向代理,客戶端就不知道有這么個東西[此時代理服務器對外就表現為一個服務器]。

反向代理的作用:
1)保證內網的安全,可以使用反向代理提供WAF功能,阻止web攻擊。大型網站,通常將反向代理作為公網訪問地址,Web服務器是內網。
2)負載均衡,通過反向代理服務器來優(yōu)化網站的負載。

負載均衡.png

我們都知道,Nginx大致分為以下幾個部分:

main                                # 全局配置

events {                            # nginx工作模式配置

}

http {                                # http設置
    ....

    server {                        # 服務器主機配置
        ....
        location {                    # 路由配置
            ....
        }

        location path {
            ....
        }

        location otherpath {
            ....
        }
    }

    server {
        ....

        location {
            ....
        }
    }

    upstream name {                    # 負載均衡配置
        ....
    }
}

所以,明白這些概念的時候,才發(fā)現陷入了一個坑,仔細想想,理解完全錯了,配置文件根本沒用上Nginx的反向代理功能,所以修改了配置文件:Ajax發(fā)起8090請求,Nginx靜態(tài)代理8090,同時轉發(fā)請求至13411,具體如下:

 server {
        listen       8090;
        server_name  128.1.136.129;

        #access_log  logs/host.access.log  main;
        location ^~ /HttpServer/ {
            proxy_pass http://128.1.136.129:13411;
        }
        location / {
            root /root/data/dist;
            index index.html;
        }

   }

Nginx是非常強大的web服務器加反向代理服務器加郵件服務器等等,項目使用中,使用最多的三個核心功能是反向代理、負載均衡和靜態(tài)服務器,這三個不同的功能的使用,都跟nginx的配置文件nginx.conf相關,理解反向代理,負載均衡也就很容易理解啦!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容