天天看點

Nginx反向代理部署指南 一.反向代理二.如何實作三.nginx開機自啟

  我們都知道,80端口是web服務的預設端口,其他主機通路web伺服器也是預設和80端口進行web互動,而一台伺服器也隻有一個80端口,這是約定俗成的标準.

我們來看下面兩個場景:

 1.伺服器的80端口被占用了,我們想實作伺服器的其他端口(比如port:2368)web服務.

 2.我們想在一台伺服器上實作多個站點的web服務.

要解決這個問題,需要用到反向代理,下面的小對話可能更容易了解‘反向代理’這個概念

主機H:我給你發了一個http get請求,IP分組部分資訊為:

    a.我通路的域名(解析前的域名,如:www.domain.com).     b.我要通路的IP(www.domain.com域名解析後的公網IP).

伺服器S的web服務程式收到IP分組後,先把這個IP分組丢給nginx(或Apache反向代理服務)看,nginx拿到IP分組後根據a.要通路的域名來檢查配置檔案,看是否需要轉其他端口.例如:配置檔案裡面有這樣的描述:

    如果這個分組的a是www.domain1.com,那麼轉到2368端口;     如果這個分組的a是www.domain2.com,那麼轉到1243端口;     如果這個分組的a是www.domain3.com,那麼轉到2104端口;     否則就用80端口.

web服務程式照做,把相應端口的資料傳給主機H.

通俗的說,就是:伺服器根據主機來訪域名區分需要轉哪個端口.

利用上面的配置,我們就可以實作在一台伺服器上建立4個web服務站點.

實作反向代理一般有兩種方法:

1.Apache反向代理服務

2.nginx反向代理服務

其中nginx在負載均衡這方面比Apache更專業,小巧專一,很是優雅.

nginx反向代理的具體操作如下:

安裝nginx

以RedHat為例

1.下載下傳媒體

   nginx部署之前,首先根據項目的需要選擇需要安裝的元件,實際環境一般會考慮需要支援gzip壓縮和rewrite子產品,是以安裝的第一步是下載下傳Ngix及Ngix的相關元件.

1) nginx本身

   建議下載下傳最新版本媒體,目前最新的是:1.9.9

2) gzip壓縮依賴庫:zlib

   下載下傳版本:Version 1.2.5

3)Rewrite子產品的正規表達式依賴庫:pcre

   pcre庫簡稱:Perl相容正規表達式

   下載下傳版本:pcre-8.38

2.開始安裝

1) .安裝 pcre

預設安裝到/usr/local/lib下即可,安裝完成後可以#ls -l /usr/local/lib/libpcre.so

2).安裝nginx

3) .配置nginx

安裝完成之後,配置目錄conf下有以下配置檔案,過濾掉了xx.default配置:

除了nginx.conf,其餘配置檔案,一般隻需要使用預設提供即可.

nginx.conf是主配置檔案,預設配置去掉注釋之後的内容如下圖所示:

worker_process表示工作程序的數量,一般設定為cpu的核數

worker_connections表示每個工作程序的最大連接配接數

server{}塊定義了虛拟主機

listener監聽端口

server_name監聽域名

location{}是用來為比對的 URI 進行配置,URI 即文法中的“/uri/”,location  / { }比對任何查詢,因為所有請求都以 / 開頭.

root指定對應uri的資源查找路徑,這裡html為相對路徑,完整路徑為/opt/ opt/nginx-1.7.7/html/

index指定首頁index檔案的名稱,可以配置多個,以空格分開。如有多個,按配置順序查找.

Nginx反向代理部署指南 一.反向代理二.如何實作三.nginx開機自啟

從配置可以看出,nginx監聽了80端口、域名為localhost、跟路徑為html檔案夾(我的安裝路徑為/opt/nginx-1.7.7,是以/opt/nginx-1.7.7/html)、預設index檔案為index.html, index.htm、伺服器錯誤重定向到50x.html頁面。

可以看到/opt/nginx-1.7.7/html/有以下檔案:

檔案擴充名與檔案類型映射表,nginx根據映射關系,設定http請求響應頭的Content-Type值.

當在映射表找不到時,使用nginx.conf中default-type指定的預設值。例如,預設配置中的指定的default-type為application/octet-stream.

下面截一段mime.types定義的檔案擴充名與檔案類型映射關系,完整的請自行檢視:

Nginx反向代理部署指南 一.反向代理二.如何實作三.nginx開機自啟

nginx配置Fastcgi解析時會調用fastcgi_params配置檔案來傳遞伺服器變量,這樣CGI中可以擷取到這些變量的值。預設傳遞以下變量:

Nginx反向代理部署指南 一.反向代理二.如何實作三.nginx開機自啟

這些變量的作用從其命名可以看出.

對比下fastcgi.conf與fastcgi_params檔案,可以看出隻有以下差異:

即fastcgi.conf隻比fastcgi_params多了一行“fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;”

原本隻有fastcgi_params檔案,fastcgi.conf是nginx 0.8.30 (released: 15th of December 2009)才引入的.

原本nginx隻有fastcgi_params,後來發現很多人在定義SCRIPT_FILENAME時使用了寫死的方式。例如,fastcgi_param SCRIPT_FILENAME

/var/www/foo$fastcgi_script_name。于是為了規範用法便引入了fastcgi.conf。

不過這樣的話就産生一個疑問:為什麼一定要引入一個新的配置檔案,而不是修改舊的配置檔案?

這是因為fastcgi_param指令是數組型的,和普通指令相同的是:内層替換外層;和普通指令不同的是:當在同級多次使用的時候,是新增而不是替換.

換句話說,如果在同級定義兩次SCRIPT_FILENAME,那麼它們都會被發送到後端,這可能會導緻一些潛在的問題,為了避免此類情況,便引入了一個新的配置檔案。

是以不再建議大家使用以下方式(搜了一下,網上大量的文章,并且nginx.conf的預設配置也是使用這種方式):

而使用最新的方式:

與fastcgi_params一樣,傳遞哪些伺服器變量,隻有字首不一樣,以uwsgi_param開始而非fastcgi_param.

這三個檔案都是與編碼轉換映射檔案,用于在輸出内容到用戶端時,将一種編碼轉換到另一種編碼。

4).管理nginx服務

啟動:

停止

重新開機

檢視狀态

實作:編寫shell腳本,并把shell腳本啟動指令加到系統自啟名單.

vi /etc/init.d/nginx  (輸入下面的代碼)

 :wq  儲存并退出

設定檔案的權限:

這樣在控制台就很容易的操作nginx了:檢視nginx目前狀态、啟動nginx、停止nginx、重新開機nginx…

 同樣的修改了nginx的配置檔案nginx.conf,也可以使用上面的指令重新加載新的配置檔案并運作,可以将此指令加入到rc.local檔案中,這樣開機的時候nginx就預設啟動了

加入一行  /etc/init.d/nginx start  儲存并退出,下次重新開機會生效。

繼續閱讀