一、基礎知識
1.1、反向代理過程
Nginx前端,Apache後端過程其實很簡單,首先用戶訪問的是80端口的nginx,然後nginx將靜態內容留給自己,其余的轉發給非80端口的apache,apache處理完畢後再回傳給nginx。
1.2、Nginx lo
cation 基礎
詳細見《Nginx Location 指令基礎》,在不同的 Location 位置添加反向代理,Nginx 前端就充當了完全不一樣的角色。
二、編輯 Nginx 配置文件
vim /usr/local/nginx/conf/nginx.conf
2.1、添加"proxy_set_header"指令
編輯Nginx配置文件,在"http"字段內添加相應代碼,發送發送真實IP到後端
vim /usr/local/nginx/conf/nginx.conf
# 向後端服務器發起請求時添加指定的header頭信息
proxy_set_header Host $host;
# 向後端服務器發送真實 IP
proxy_set_header X-Real-IP $remote_addr;
#讓後端如php能直接通過變量獲取真實IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2.2、添加"proxy_pass"指令
在相應 ”location" 字段添加如下反向代理語句。這部分是難點,也是國內教程都沒有提及的地方。
方法一:
將所有請求都轉發給後端 apache 處理,但由於 "~*" 優先級高於 "/" ,所以圖片、JS、CSS例外,"expires" 用於設置緩存時間。
location / {
proxy_pass http://127.0.0.1:8080;
}
location ~* \.(jpg|jpeg|gif|png)$ {
access_log off;
expires 30d;
}
location ~* \.(js|css)$ {
access_log off;
expires 1d;
}
方法二:
只將.php後綴的文件,交由後端 apache 處理
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
}
2.3、添加高級選項(選做)
#請求連接後端服務器超時時間。即在規定時間,後端必須響應前端握手請求。
proxy_connect_timeout 30;
#後端服務器響應時間。即連接成功,在後端排隊等候處理不能超過的時間。
proxy_read_timeout 60;
#後端數據回傳時間。即在規定時間,後端服務器必須將所有數據回傳完畢。
proxy_send_timeout 30;
#從後端服務器讀取的頭信息的緩沖區大小。
proxy_buffer_size 4k;
#從後端服務器讀取的頭信息的緩沖區數目和大小
proxy_buffers 4 32k;
如果服務器繁忙,可申請的proxy_buffers大小
proxy_busy_buffers_size 64k;
#代理緩存臨時文件大小
proxy_temp_
file_write_size 64k;
#代理最大緩存臨時文件大小
proxy_max_temp_file_size 128m;
三、編輯 Apache 配置文件(選做)
注意:mod_rpaf 模塊不是必須安裝,除非你需要開啟 Apache 日志,但有多此一舉之嫌,因為已經有 Nginx 日志了,再開 Apache 日志話就出現重復了。
Apache rpaf 模塊作用是獲取Nginx轉發過來的真實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
vim /usr/local/apache/conf/httpd.conf LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 127.0.0.1
RPAFsethostname On
RPAFheader X-Forwarded-For