HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    nginx代理前端有證書后端沒有(nginx代理前端和后端)

    發(fā)布時(shí)間:2023-03-13 11:57:26     稿源: 創(chuàng)意嶺    閱讀: 102        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于nginx代理前端有證書后端沒有的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來看看吧。

    ChatGPT國(guó)內(nèi)免費(fèi)在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    nginx代理前端有證書后端沒有(nginx代理前端和后端)

    一、請(qǐng)教問題nginx反向代理proxy

    一、反向代理:Web服務(wù)器的“經(jīng)紀(jì)人”

    1.1 反向代理初印象

    反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。

    Nginx搭建反向代理服務(wù)器過程詳解

    從上圖可以看出:反向代理服務(wù)器位于網(wǎng)站機(jī)房,代理網(wǎng)站W(wǎng)eb服務(wù)器接收Http請(qǐng)求,對(duì)請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)。

    1.2 反向代理的作用

    ①保護(hù)網(wǎng)站安全:任何來自Internet的請(qǐng)求都必須先經(jīng)過代理服務(wù)器;Nginx搭建反向代理服務(wù)器過程詳解

    ②通過配置緩存功能加速Web請(qǐng)求:可以緩存真實(shí)Web服務(wù)器上的某些靜態(tài)資源,減輕真實(shí)Web服務(wù)器的負(fù)載壓力;Nginx搭建反向代理服務(wù)器過程詳解

    ③實(shí)現(xiàn)負(fù)載均衡:充當(dāng)負(fù)載均衡服務(wù)器均衡地分發(fā)請(qǐng)求,平衡集群中各個(gè)服務(wù)器的負(fù)載壓力;Nginx搭建反向代理服務(wù)器過程詳解

    二、初識(shí)Nginx:簡(jiǎn)單卻不平凡

    2.1 Nginx是神馬?

    Nginx搭建反向代理服務(wù)器過程詳解

    Nginx是一款輕量級(jí)的網(wǎng)頁服務(wù)器、反向代理器以及電子郵件代理服務(wù)器。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。

    Source:Nginx(發(fā)音同engine x),它是由俄羅斯程序員Igor Sysoev所開發(fā)的。起初是供俄國(guó)大型的門戶網(wǎng)站及搜索引擎Rambler(俄語:Рамблер)使用。此軟件BSD-like協(xié)議下發(fā)行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系統(tǒng)中運(yùn)行。

    說到Web服務(wù)器,Apache服務(wù)器和IIS服務(wù)器是兩大巨頭;但是運(yùn)行速度更快、更靈活的對(duì)手:Nginx 正在迎頭趕上。

    2.2 Nginx的應(yīng)用現(xiàn)狀

    Nginx 已經(jīng)在俄羅斯最大的門戶網(wǎng)站── Rambler Media(www.rambler.ru)上運(yùn)行了3年時(shí)間,同時(shí)俄羅斯超過20%的虛擬主機(jī)平臺(tái)采用Nginx作為反向代理服務(wù)器。

    Nginx搭建反向代理服務(wù)器過程詳解Nginx搭建反向代理服務(wù)器過程詳解Nginx搭建反向代理服務(wù)器過程詳解Nginx搭建反向代理服務(wù)器過程詳解Nginx搭建反向代理服務(wù)器過程詳解在國(guó)內(nèi),已經(jīng)有 淘寶、新浪博客、新浪播客、網(wǎng)易新聞、六間房、56.com、Discuz!、水木社區(qū)、豆瓣、YUPOO、海內(nèi)、迅雷在線 等多家網(wǎng)站使用 Nginx 作為Web服務(wù)器或反向代理服務(wù)器。

    2.3 Nginx的核心特點(diǎn)

    (1)跨平臺(tái):Nginx 可以在大多數(shù) Unix like OS編譯運(yùn)行,而且也有Windows的移植版本;(2)配置異常簡(jiǎn)單:非常容易上手。配置風(fēng)格跟程序開發(fā)一樣,神一般的配置;(3)非阻塞、高并發(fā)連接:數(shù)據(jù)復(fù)制時(shí),磁盤I/O的第一階段是非阻塞的。官方測(cè)試能夠支撐5萬并發(fā)連接,在實(shí)際生產(chǎn)環(huán)境中跑到2~3萬并發(fā)連接數(shù)。(這得益于Nginx使用了最新的epoll模型);PS:對(duì)于一個(gè)Web服務(wù)器來說,首先看一個(gè)請(qǐng)求的基本過程:建立連接—接收數(shù)據(jù)—發(fā)送數(shù)據(jù),在系統(tǒng)底層看來 :上述過程(建立連接—接收數(shù)據(jù)—發(fā)送數(shù)據(jù))在系統(tǒng)底層就是讀寫事件。

    ①如果采用阻塞調(diào)用的方式,當(dāng)讀寫事件沒有準(zhǔn)備好時(shí),必然不能夠進(jìn)行讀寫事件,那么久只好等待,等事件準(zhǔn)備好了,才能進(jìn)行讀寫事件,那么請(qǐng)求就會(huì)被耽擱 。

    ②既然沒有準(zhǔn)備好阻塞調(diào)用不行,那么采用非阻塞調(diào)用方式。非阻塞就是:事件馬上返回,告訴你事件還沒準(zhǔn)備好呢,你慌什么,過會(huì)再來吧。好吧,你過一會(huì),再來檢查一下事件,直到事件準(zhǔn)備好了為止,在這期間,你就可以先去做其它事情,然后再來看看事件好了沒。雖然不阻塞了,但你得不時(shí)地過來檢查一下事件的狀態(tài),你可以做更多的事情了,但帶來的開銷也是不小的。

    (4)事件驅(qū)動(dòng):通信機(jī)制采用epoll模型,支持更大的并發(fā)連接。

    ①非阻塞通過不斷檢查事件的狀態(tài)來判斷是否進(jìn)行讀寫操作,這樣帶來的開銷很大,因此就有了異步非阻塞的事件處理機(jī)制。這種機(jī)制讓你可以同時(shí)監(jiān)控多個(gè)事件,調(diào)用他們是阻塞的,但可以設(shè)置超時(shí)時(shí)間,在超時(shí)時(shí)間之內(nèi),如果有事件準(zhǔn)備好了,就返回。這種機(jī)制解決了上面阻塞調(diào)用與非阻塞調(diào)用的兩個(gè)問題。

    ②以epoll模型為例:當(dāng)事件沒有準(zhǔn)備好時(shí),就放入epoll(隊(duì)列)里面。如果有事件準(zhǔn)備好了,那么就去處 理;如果事件返回的是EAGAIN,那么繼續(xù)將其放入epoll里面。從而,只要有事件準(zhǔn)備好了,我們就去處理它,只有當(dāng)所有事件都沒有準(zhǔn)備好時(shí),才在 epoll里面等著。這樣,我們就可以并發(fā)處理大量的并發(fā)了,當(dāng)然,這里的并發(fā)請(qǐng)求,是指未處理完的請(qǐng)求,線程只有一個(gè),所以同時(shí)能處理的請(qǐng)求當(dāng)然只有一 個(gè)了,只是在請(qǐng)求間進(jìn)行不斷地切換而已,切換也是因?yàn)楫惒绞录礈?zhǔn)備好,而主動(dòng)讓出的。這里的切換是沒有任何代價(jià),你可以理解為循環(huán)處理多個(gè)準(zhǔn)備好的事 件,事實(shí)上就是這樣的。

    ③與多線程方式相比,這種事件處理方式是有很大的優(yōu)勢(shì)的,不需要?jiǎng)?chuàng)建線程,每個(gè)請(qǐng)求占用的內(nèi)存也很少,沒有上下文切換, 事件處理非常的輕量級(jí),并發(fā)數(shù)再多也不會(huì)導(dǎo)致無謂的資源浪費(fèi)(上下文切換)。對(duì)于IIS服務(wù)器,每個(gè)請(qǐng)求會(huì)獨(dú)占一個(gè)工作線程,當(dāng)并發(fā)數(shù)上到幾千時(shí),就同時(shí) 有幾千的線程在處理請(qǐng)求了。這對(duì)操作系統(tǒng)來說,是個(gè)不小的挑戰(zhàn):因?yàn)榫€程帶來的內(nèi)存占用非常大,線程的上下文切換帶來的cpu開銷很大,自然性能就上不 去,從而導(dǎo)致在高并發(fā)場(chǎng)景下性能下降嚴(yán)重。

    總結(jié):通過異步非阻塞的事件處理機(jī)制,Nginx實(shí)現(xiàn)由進(jìn)程循環(huán)處理多個(gè)準(zhǔn)備好的事件,從而實(shí)現(xiàn)高并發(fā)和輕量級(jí)。

    (5)Master/Worker結(jié)構(gòu):一個(gè)master進(jìn)程,生成一個(gè)或多個(gè)worker進(jìn)程。

    Nginx搭建反向代理服務(wù)器過程詳解

    PS:Master-Worker設(shè)計(jì)模式核心思想是將原來串行的邏輯并行化, 并將邏輯拆分成很多獨(dú)立模塊并行執(zhí)行。其中主要包含兩個(gè)主要組件Master和Worker,Master主要將邏輯進(jìn)行拆分,拆分為互相獨(dú)立的部分,同 時(shí)維護(hù)了Worker隊(duì)列,將每個(gè)獨(dú)立部分下發(fā)到多個(gè)Worker并行執(zhí)行,Worker主要進(jìn)行實(shí)際邏輯計(jì)算,并將結(jié)果返回給Master。

    問:nginx采用這種進(jìn)程模型有什么好處?

    答:采用獨(dú)立的進(jìn)程,可以讓互相之間不會(huì)影響,一個(gè)進(jìn)程退出后,其它進(jìn)程還在工作,服務(wù)不會(huì)中斷,Master 進(jìn)程則很快重新啟動(dòng)新的Worker進(jìn)程。當(dāng)然,Worker進(jìn)程的異常退出,肯定是程序有bug了,異常退出,會(huì)導(dǎo)致當(dāng)前Worker上的所有請(qǐng)求失 敗,不過不會(huì)影響到所有請(qǐng)求,所以降低了風(fēng)險(xiǎn)。

    (6)內(nèi)存消耗?。禾幚泶蟛l(fā)的請(qǐng)求內(nèi)存消耗非常小。在3萬并發(fā)連接下,開啟的10個(gè)Nginx 進(jìn)程才消耗150M內(nèi)存(15M*10=150M)。

    (7)內(nèi)置的健康檢查功能:如果 Nginx 代理的后端的某臺(tái) Web 服務(wù)器宕機(jī)了,不會(huì)影響前端訪問。

    (8)節(jié)省帶寬:支持 GZIP 壓縮,可以添加瀏覽器本地緩存的 Header 頭。

    (9)穩(wěn)定性高:用于反向代理,宕機(jī)的概率微乎其微。

    三、構(gòu)建實(shí)戰(zhàn):Nginx+IIS構(gòu)筑Web服務(wù)器集群的負(fù)載均衡這里我們主要在Windows環(huán)境下,通過將同一個(gè)Web網(wǎng)站部署到不同服務(wù)器的IIS上,再通過一個(gè)統(tǒng)一的Nginx反響代理服務(wù)器對(duì)外提供統(tǒng)一訪問接入,實(shí)現(xiàn)一個(gè)最簡(jiǎn)化的反向代理和負(fù)載均衡服務(wù)。但是,受限于實(shí)驗(yàn)條件, 我們這里主要在一臺(tái)計(jì)算機(jī)上進(jìn)行反向代理、IIS集群的模擬,具體的實(shí)驗(yàn)環(huán)境如下圖所示:我們將nginx服務(wù)和web網(wǎng)站都部署在一臺(tái)計(jì)算機(jī) 上,nginx監(jiān)聽http80端口,而web網(wǎng)站分別以不同的端口號(hào)(這里是8050及8060)部署在同一個(gè)IIS服務(wù)器上,用戶訪問 localhost時(shí),nginx作為反向代理將請(qǐng)求均衡地轉(zhuǎn)發(fā)給兩個(gè)IIS中不同端口的Web應(yīng)用程序進(jìn)行處理。雖然實(shí)驗(yàn)環(huán)境很簡(jiǎn)單而且有限,但是對(duì)于 一個(gè)簡(jiǎn)單的負(fù)載均衡效果而言,本文是可以達(dá)到并且展示的。

    Nginx搭建反向代理服務(wù)器過程詳解

    3.1 準(zhǔn)備一個(gè)ASP.NET網(wǎng)站部署到IIS服務(wù)器集群中(1)在VS中新建一個(gè)ASP.NET Web應(yīng)用程序,但是為了在一臺(tái)計(jì)算機(jī)上展示效果,我們將這個(gè)Web程序復(fù)制一份,并修改兩個(gè)Web程序的Default.aspx,讓其的首頁顯示不同 的一點(diǎn)信息。這里Web1展示的是“The First Web:”,而Web2展示的則是“The Second Web”。

    Nginx搭建反向代理服務(wù)器過程詳解

    (2)調(diào)試運(yùn)行,看看兩個(gè)網(wǎng)站的效果如何?

    ①Web1的展示效果:

    Nginx搭建反向代理服務(wù)器過程詳解

    ②Web2的展示效果:

    Nginx搭建反向代理服務(wù)器過程詳解

    ③部署到IIS中,分配不同的端口號(hào):這里我選擇了Web1:8050,Web2:8060Nginx搭建反向代理服務(wù)器過程詳解

    (3)總結(jié):在真實(shí)環(huán)境中,構(gòu)建Web應(yīng)用服務(wù)器集群的實(shí)現(xiàn)是將同一個(gè)Web應(yīng)用程序部署到Web服務(wù)器集群中的多個(gè)Web服務(wù)器上。

    3.2 下載Nginx并部署到服務(wù)器中作為自啟動(dòng)的Windows服務(wù)(1)到Nginx官網(wǎng)下載Nginx的Windows版本:http://nginx.org/en/download.html(這里我們使用nginx/Windows-1.4.7版本進(jìn)行實(shí)驗(yàn),本文底部有下載地址)(2)解壓到磁盤任意目錄,例如這里我解壓到了:D:\Servers\nginx-1.4.7(3)啟動(dòng)、停止和重新加載服務(wù):通過cmd以守護(hù)進(jìn)程方式啟動(dòng)nginx.exe:start nginx.exe,停止服務(wù):nginx -s stop,重新加載配置:nginx -s reload;Nginx搭建反向代理服務(wù)器過程詳解

    (4)每次以cmd方式啟動(dòng)Nginx服務(wù)不符合實(shí)際要求,于是我們想到將其注冊(cè)為Windows服務(wù),并設(shè)置為自動(dòng)啟動(dòng)模式。這里,我們使用一個(gè) 不錯(cuò)的小程序:“Windows Service Wrapper”,將nginx.exe注冊(cè)為Windows服務(wù),具體的步湊如下:

    ①下載最新版的 Windows Service Wrapper 程序,比如我下載的名稱是 “winsw-1.8-bin.exe”(本文底部有下載地址),然后把它命名成你想要的名字(比如: “nginx-service.exe”,當(dāng)然,你也可以不改名)②將重命名后的 nginx-service.exe 復(fù)制到 nginx 的安裝目錄(比如,我這里是 “D:\Servers\nginx-1.4.7″)③在同一個(gè)目錄下創(chuàng)建一個(gè)Windows Service Wrapper 的XML配置文件,名稱必須與第一步重命名時(shí)使用的名稱一致(比如我這里是 “nginx-service.xml”, 如果,你沒有重命名,則應(yīng)該是 “winsw-1.8-bin.xml”),這個(gè)XML的內(nèi)容如下:

    <?xml version="1.0" encoding="UTF-8" ?>

    <service>

    <id>nginx</id>

    <name>Nginx Service</name>

    <description>High Performance Nginx Service</description>

    <executable>D:\Servers\nginx-1.4.7\nginx.exe</executable>

    <logpath>D:\Servers\nginx-1.4.7\</logpath>

    <logmode>roll</logmode>

    <depend></depend>

    <startargument>-p D:\Servers\nginx-1.4.7</startargument>

    <stopargument>-p D:\Servers\nginx-1.4.7 -s stop</stopargument>

    </service>

    ④在命令行下執(zhí)行以下命令,以便將其注冊(cè)成Windows服務(wù):nginx-service.exe installNginx搭建反向代理服務(wù)器過程詳解

    ⑤接下來就可以在Windows服務(wù)列表看到Nginx服務(wù)了,這里我們可以將其設(shè)置為自動(dòng)啟動(dòng)了:

    Nginx搭建反向代理服務(wù)器過程詳解

    (5)總結(jié):在Windows環(huán)境中,要對(duì)外提供的Windows服務(wù)一般都要將其啟動(dòng)類型設(shè)置為自動(dòng)。

    3.3 修改Nginx核心配置文件nginx.conf

    (1)進(jìn)程數(shù)與每個(gè)進(jìn)程的最大連接數(shù):

    ?nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù)

    ?單個(gè)進(jìn)程最大連接數(shù),那么該服務(wù)器的最大連接數(shù)=連接數(shù)*進(jìn)程數(shù)Nginx搭建反向代理服務(wù)器過程詳解

    (2)Nginx的基本配置:

    ?監(jiān)聽端口一般都為http端口:80;

    ?域名可以有多個(gè),用空格隔開:例如 server_name www.ha97.com ha97.com;Nginx搭建反向代理服務(wù)器過程詳解

    (3)負(fù)載均衡列表基本配置:

    ?location / {}:對(duì)aspx后綴的進(jìn)行負(fù)載均衡請(qǐng)求,假如我們要對(duì)所有的aspx后綴的文件進(jìn)行負(fù)載均衡時(shí),可以這樣寫:location ~ .*\.aspx$ {}

    ?proxy_pass:請(qǐng)求轉(zhuǎn)向自定義的服務(wù)器列表,這里我們將請(qǐng)求都轉(zhuǎn)向標(biāo)識(shí)為http://cuitccol.com的負(fù)載均衡服務(wù)器列表;Nginx搭建反向代理服務(wù)器過程詳解

    ?在負(fù)載均衡服務(wù)器列表的配置中,weight是權(quán)重,可以根據(jù)機(jī)器配置定義權(quán)重(如果某臺(tái)服務(wù)器的硬件配置十分好,可以處理更多的請(qǐng)求,那么可以 為其設(shè)置一個(gè)比較高的weight;而有一臺(tái)的服務(wù)器的硬件配置比較差,那么可以將前一臺(tái)的weight配置為weight=2,后一臺(tái)差的配置為 weight=1)。weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大;Nginx搭建反向代理服務(wù)器過程詳解

    (4)總結(jié):最基本的Nginx配置差不多就是上面這些內(nèi)容,當(dāng)然僅僅是最基礎(chǔ)的配置。(詳細(xì)的配置內(nèi)容請(qǐng)下載底部的nginx-1.4.7詳細(xì)查看)3.4 添加Nginx對(duì)于靜態(tài)文件的緩存配置

    為了提高響應(yīng)速度,減輕真實(shí)服務(wù)器的負(fù)載,對(duì)于靜態(tài)資源我們可以在反向代理服務(wù)器中進(jìn)行緩存,這也是反向代理服務(wù)器的一個(gè)重要的作用。

    (1)緩存靜態(tài)資源之圖片文件

    root /nginx-1.4.7/staticresources/image:對(duì)于配置中提到的jpg/png等文件均定為到/nginx-1.4.7/staticresources/image文件夾中進(jìn)行尋找匹配并將文件返回;expires 7d:過期時(shí)效為7天,靜態(tài)文件不怎么更新,過期時(shí)效可以設(shè)大一點(diǎn),如果頻繁更新,則可以設(shè)置得小一點(diǎn);TIPS:下面的樣式、腳本緩存配置同這里一樣,只是定位的文件夾不一樣而已,不再贅述。

    Nginx搭建反向代理服務(wù)器過程詳解

    (2)緩存靜態(tài)資源之樣式文件

    Nginx搭建反向代理服務(wù)器過程詳解

    (3)緩存靜態(tài)資源之腳本文件

    Nginx搭建反向代理服務(wù)器過程詳解

    (4)在nginx服務(wù)文件夾中創(chuàng)建靜態(tài)資源文件夾,并要緩存的靜態(tài)文件拷貝進(jìn)去:這里我主要將Web程序中用到的image、css以及js文件拷貝了進(jìn)去;Nginx搭建反向代理服務(wù)器過程詳解

    (5)總結(jié):通過配置靜態(tài)文件的緩存設(shè)置,對(duì)于這些靜態(tài)文件的請(qǐng)求可以直接從反向代理服務(wù)器中直接返回,而無需再將這些靜態(tài)資源請(qǐng)求轉(zhuǎn)發(fā)到具體的Web服務(wù)器進(jìn)行處理了,可以提高響應(yīng)速度,減輕真實(shí)Web服務(wù)器的負(fù)載壓力。

    3.5 簡(jiǎn)單測(cè)試Nginx反向代理實(shí)現(xiàn)負(fù)載均衡效果(1)第一次訪問http://localhost/Default.aspx時(shí)從127.0.0.1:8050處理響應(yīng)返回結(jié)果(2)第二次訪問http://localhost/Default.aspx時(shí)從127.0.0.1:8060處理響應(yīng)返回結(jié)果(3)多次訪問http://localhost/Default.aspx時(shí)的截屏:

    Nginx搭建反向代理服務(wù)器過程詳解

    學(xué)習(xí)小結(jié)

    在本文中,借助了Nginx這個(gè)神器簡(jiǎn)單地在Windows環(huán)境下搭建了一個(gè)反向代理服務(wù),并模擬了一個(gè)IIS服務(wù)器集群的負(fù)載均衡效果。從這個(gè) DEMO中,我們可以簡(jiǎn)單地感受到反向代理為我們所做的事情,并體會(huì)負(fù)載均衡是怎么一回事。但是,在目前大多數(shù)的應(yīng)用中,都會(huì)將Nginx部署在 Linux服務(wù)器中,并且會(huì)做一些針對(duì)負(fù)載均衡的優(yōu)化配置,這里我們所做的僅僅就是一個(gè)小小的使用而已(just修改一下配置文件)。不過,萬丈高樓平地 起,前期的小小體會(huì),也會(huì)幫助我們向后期的深入學(xué)習(xí)奠定一點(diǎn)點(diǎn)的基礎(chǔ)。

    突然在QQ空間里看到了朋友送的禮物,猛然發(fā)現(xiàn)今天居然是我的陽歷生日,好吧,我祝我自己生日快樂,希望自己在未來的日子中能夠做更多的實(shí)踐,分享更多的內(nèi)容。當(dāng)然,如果你覺得本文還可以,那也麻煩點(diǎn)個(gè)贊,不要吝嗇你的鼠標(biāo)左鍵喲。

    二、nginx如何代理到自己的服務(wù)?

    首先使用curl檢查你要代理的服務(wù)是否已經(jīng)通了,curl http://127.0.0.1:8000/api/get/info/ping,返回pong就沒問題,沒有就在nginx

    添加個(gè)access log和errorlog,訪問然后查看日志排查原因。

    三、怎樣實(shí)現(xiàn)前端nginx后端apache

    說明:

    nginx處理靜態(tài)內(nèi)容是把好手,apache雖然占用內(nèi)存多了點(diǎn),性能上稍遜,但一直比較穩(wěn)健。倒是nginx的FastCGI有時(shí)候會(huì)出現(xiàn)502

    Bad Gateway錯(cuò)誤。一個(gè)可選的方法是nginx做前端代理,處理靜態(tài)內(nèi)容,動(dòng)態(tài)請(qǐng)求統(tǒng)統(tǒng)轉(zhuǎn)發(fā)給后端apache。

    本文就是實(shí)現(xiàn)Nginx作為前端,apache作為后端。當(dāng)用戶訪問的是80端口的nginx,然后nginx將靜態(tài)內(nèi)容留給自己,其余的轉(zhuǎn)發(fā)給非80端

    口的apache,apache處理完畢后再回傳給nginx。例如這里我分別訪問www.test.com/a.html,www.test.com

    /info.php。nginx因?yàn)樽銮懊?,nginx的訪問日志應(yīng)該都有a.html,info.php的記錄;而apache作為后端,只處理php

    請(qǐng)求,應(yīng)該只有info.php的訪問記錄。

    實(shí)現(xiàn):

    1.修改nginx配置文件,將php動(dòng)態(tài)請(qǐng)求轉(zhuǎn)發(fā)給apache

    # cat /usr/local/nginx/conf/vhosts/test.conf

    server

    {

    listen 80;

    server_name www.test.com test.com;

    index index.html index.htm index.php default.html default.htm default.php;

    root /home/www/data/test;

    access_log /usr/local/nginx/logs/test-access.log;

    # nginx找不到文件時(shí),轉(zhuǎn)發(fā)請(qǐng)求給后端Apache

    error_page 404 @proxy;

    # 這是原來lnmp時(shí),nginx自己將php請(qǐng)求提交到127.0.0.1:9000?,F(xiàn)在由apache來處理,因此注釋掉這段。

    #location ~ .*\.(php|php5)?$

    #{

    # fastcgi_pass 127.0.0.1:9000;

    # fastcgi_index index.php;

    # include fastcgi.conf;

    #}

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

    expires 30d;

    }

    location ~ .*\.(js|css)?$

    {

    expires 12h;

    }

    # 動(dòng)態(tài)文件.php請(qǐng)求轉(zhuǎn)發(fā)給后端Apache

    location ~ \.php$ {

    # 向后端服務(wù)器發(fā)起請(qǐng)求時(shí)添加指定的header頭信息

    proxy_set_header Host $http_host;

    # 向后端服務(wù)器發(fā)送真實(shí) IP

    proxy_set_header X-Real-IP $remote_addr;

    # 讓后端如php能直接通過變量獲取真實(shí)IP

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://127.0.0.1:8080;

    }

    # nginx找不到文件時(shí),轉(zhuǎn)發(fā)請(qǐng)求給后端Apache

    location @proxy {

    proxy_set_header Host $http_host;

    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://127.0.0.1:8080;

    }

    }

    然后只要開啟nginx監(jiān)聽80端口,apache監(jiān)聽8080端口,開啟php,就可以了。這邊,我同時(shí)開啟nginx,apache的訪問日志。當(dāng)我

    訪問www.test.com/a.html,www.test.com/info.php時(shí),nginx記錄下了所有a.html,info.html

    的訪問請(qǐng)求。

    nginx訪問日志

    192.168.45.30 - - [19/Jun/2013:14:41:06 +0800] "GET /a.html HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:06 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:08 +0800] "GET /info.php HTTP/1.1" 200 10518 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:08 +0800] "GET /info.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2158 "http://www.test.com/info.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:08 +0800] "GET /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2536 "http://www.test.com/info.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:08 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:09 +0800] "GET /info.php HTTP/1.1" 200 10518 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    當(dāng)我訪問www.test.com/a.html,www.test.com/info.php時(shí),apache只記錄了info.html的訪問請(qǐng)求。說明nginx將php請(qǐng)求轉(zhuǎn)發(fā)給了apache。這里可以看到來源都是127.0.0.1。而不是真實(shí)的來源ip。

    apache訪問日志

    127.0.0.1 - - [19/Jun/2013:11:04:16 +0800] "GET /favicon.ico HTTP/1.0" 404 209

    127.0.0.1 - - [19/Jun/2013:11:04:23 +0800] "GET /favicon.ico HTTP/1.0" 404 209

    127.0.0.1 - - [19/Jun/2013:11:04:31 +0800] "GET /favicon.ico HTTP/1.0" 404 209

    127.0.0.1 - - [19/Jun/2013:11:04:34 +0800] "GET /favicon.ico HTTP/1.0" 404 209

    127.0.0.1 - - [19/Jun/2013:11:04:39 +0800] "GET /favicon.ico HTTP/1.0" 404 209

    127.0.0.1 - - [19/Jun/2013:11:05:09 +0800] "GET /favicon.ico HTTP/1.0" 404 209

    127.0.0.1 - - [19/Jun/2013:11:05:18 +0800] "GET /favicon.ico HTTP/1.0" 404 209

    127.0.0.1 - - [19/Jun/2013:11:05:24 +0800] "GET /info.php HTTP/1.0" 200 55447

    127.0.0.1 - - [19/Jun/2013:11:05:24 +0800] "GET /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.0" 200 2524

    127.0.0.1 - - [19/Jun/2013:11:05:24 +0800] "GET /info.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.0" 200 2146

    127.0.0.1 - - [19/Jun/2013:11:05:24 +0800] "GET /favicon.ico HTTP/1.0" 404 209

    2.apache添加mod_rpaf, 獲取nginx轉(zhuǎn)發(fā)過來的真實(shí)IP

    mod_rpaf模塊不是必須安裝,除非你需要開啟apache日志,但有多此一舉之嫌,因?yàn)橐呀?jīng)有nginx日志了,再開apache日志話就出現(xiàn)重復(fù)了。

    Apache rpaf模塊作用是獲取Nginx轉(zhuǎn)發(fā)過來的真實(shí)IP,否則在Apache日子中來訪IP全部為127.0.0.1。

    # wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

    # tar zxvf mod_rpaf-0.6.tar.gz

    # cd mod_rpaf-0.6

    # /usr/local/www/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

    安裝過程中,若出現(xiàn)error: 'conn_rec' has no member named

    'remote_ip,請(qǐng)參考附錄1.mod_rpaf-2.0.c error: 'conn_rec' has no

    member named 'remote_ip

    # vim /usr/local/apache/conf/httpd.conf //在LoadModule后添加以下內(nèi)容

    LoadModule rpaf_module modules/mod_rpaf-2.0.so

    RPAFenable On

    RPAFproxy_ips 127.0.0.1

    RPAFsethostname On

    RPAFheader X-Forwarded-For

    下面是apache添加了mod_rpaf模塊后,apache的訪問日志

    192.168.45.30 - - [19/Jun/2013:14:41:09 +0800] "GET /info.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2158 "http://www.test.com/info.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:09 +0800] "GET /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2536 "http://www.test.com/info.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:09 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:09 +0800] "GET /info.php HTTP/1.1" 200 10520 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    192.168.45.30 - - [19/Jun/2013:14:41:09 +0800] "GET /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2536 "http://www.test.com/info.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

    附錄:

    附錄1.mod_rpaf-2.0.c error: 'conn_rec' has no member named

    'remote_ip

    mod_rpaf-2.0.c: In function 'rpaf_cleanup':

    mod_rpaf-2.0.c:150: error: 'conn_rec' has no member named

    'remote_ip'

    mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named

    'remote_addr'

    mod_rpaf-2.0.c:151: warning: implicit declaration of function

    'inet_addr'

    mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named

    'remote_ip'

    mod_rpaf-2.0.c: In function 'change_remote_ip':

    mod_rpaf-2.0.c:164: error: 'conn_rec' has no member named

    'remote_ip'

    mod_rpaf-2.0.c:183: error: 'conn_rec' has no member named

    'remote_ip'

    mod_rpaf-2.0.c:186: error: 'conn_rec' has no member named

    'remote_ip'

    mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named

    'remote_addr'

    mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named

    'remote_ip'

    apxs:Error: Command failed with rc=65536

    只要將mod_rpaf-2.0.c的150、151、164、183、186、187這幾行的remote_ip修改成client_ip,remote_addr修改成client_addr,

    然后再/usr/local/www/apache/bin/apxs -i -c -n mod_rpaf-2.0.so

    mod_rpaf-2.0.c即可

    四、使用寶塔nginx 布署前后端分離目錄代理注意事項(xiàng)

    注意事項(xiàng):寶塔默認(rèn)生成的配置文件會(huì)有

    要自己手動(dòng)刪除掉,不然前端的資源也會(huì)被代理掉

    如果要訪問后端的靜態(tài)資源,可以嘗試以下設(shè)置

    完整配置:

    以上就是關(guān)于nginx代理前端有證書后端沒有相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    bing的聊天在哪(bing 聊天)

    chat網(wǎng)站(bing chat網(wǎng)站)

    CHAT.FORCHANGE(chat.forchange.cn ChatGPT)

    糧食的景觀設(shè)計(jì)理念(糧食的景觀設(shè)計(jì)理念有哪些)

    生態(tài)餐廳景觀設(shè)計(jì)(生態(tài)餐廳景觀設(shè)計(jì)任務(wù)書)