文章摘要: 在Web伺服器中,動態請求是指該請求需要伺服器端的程式處理,而靜態請求不需要程式處理,直接讀取檔案並返回即可,例如html,css,js,images等檔案。
在Web伺服器中,動態請求是指該請求需要伺服器端的程式處理,而靜態請求不需要程式處理,直接讀取檔案並返回即可,例如html,css,js,images等檔案,針對這兩種請求各自的特點,可以由Nginx提供對外訪問,靜態請求直接由Nginx處理,動態請求轉交給Apache處理,這樣就實現了動靜分離。
1、更改Apache監聽埠
當Nginx作為前端Web伺服器後就會佔用80埠,爲了讓Apache正常執行,需要改變Apache監聽埠,下面將埠修改爲81埠:
httpd.conf配置檔案:
httpd-vhosts.conf配置檔案:
2、更改Nginx對動態請求的處理
proxy_pass:用於代理客戶端瀏覽器請求Apache伺服器;
proxy_set_header:用於傳送Host訊息頭;
Nginx在代理請求時能夠自動傳遞來自客戶端瀏覽器的請求訊息頭,但是無法傳遞Host訊息頭,因此需要設定proxy_set_header指令;
Nginx的$host變數儲存了當前請求的主機名,即虛擬主機:www.test.org,放在Host訊息頭中用於告知Apache當前請求的虛擬主機。
3、傳遞客戶端IP地址
在Web伺服器中,REMOTE_ADDR表示客戶端的IP地址,若要獲取真實的客戶端IP地址,需要Nginx將客戶端IP使用者另一種方式傳遞給Apache,這裏藉助HTTP請求訊息頭,我們可定義一個專門用於傳遞客戶端IP的訊息頭X-Client-IP,當Nginx獲取到客戶端IP後,將IP放入訊息頭髮送給Apache,然後在Apache中替換REMOTE_ADDR即可。
在原有虛擬主機上配置的基礎上增加X-Client-IP訊息頭:
Nginx提供的$rremote_addr變數儲存了客戶端IP地址,然後將其新增到X-Client-IP中,如果Nginx收到的請求中已經存在X-Client-IP訊息頭,則會被替換,從而防止偽造客戶端IP的情況發生。
Apache模組mod_remoteip用於檢測REMOTE_ADDR是否為代理伺服器的IP,如果是則從自定義的HTTP訊息頭中讀取IP,在httpd.conf中啟動mod_remoteip.so模組,並指定訊息頭的名稱和代理伺服器的IP地址。
上述配置後,當Apache的mod_remoteip模組檢測到REMOTE_ADDR為127.0.0.1時,就會用X-Client-IP的值替換,然後清除X-Client-IP訊息頭。
上篇:6、Nginx+Apache環境配置–Apache安裝配置