一.測試環境html
OS: rhel6前端
Lib1: 192.168.10.100 ##前端代理服務器 nginx
Lib2: 192.168.10.111 ##後端web服務器,nginx須要額外安裝http_realip_module模塊web
二.反向代理的原理正則表達式
在web服務器的前面放置一個代理服務器,當客戶端須要訪問web服務器時,直接訪問代理服務器並由代理服務器作出判斷是否將這次封裝用戶的請求報文發往web服務器,反向代理對外是透明的,用戶並不知道本身訪問的是一個代理服務器。apache
三.實現反向代理vim
1.在web服務器和反向代理服務器上都安裝nginx-1.8.0提供web服務(安裝過程這裏再也不贅述)後端
2.在代理服務器(192.168.10.110)上配置proxy_pass 實現反向代理功能瀏覽器
3.# vim /etc/nginx/.nginx.conf 添加服務器
location /forum {
proxy_pass http://192.168.10.111/test;
}
PS: 若是這裏要使用正則表達式匹配,proxy_pass 只能指一個服務器地址。這時須要在web服務器(192.168.10.111)上創建相應的匹配目錄,如這裏匹配的forum目錄
location ~*^ /forum {
proxy_pass http://192.168.10.111;
}
4.# mkdir /usr/html/forum
5.# vim /usr/html/forum/index.html ##提供測試頁面
6.# service nginx restart
7.#訪問代理服務器看web服務是否能正常訪問
8.在web服務器(192.168.10.111)上建立測試目錄文件
# mkdir /usr/html/test
# vim /usr/html/test/index.html
# service nginx restart
9. 在瀏覽器上訪問192.168.10.110/forum 看是否訪問的是(192.168.10.111)上的測試頁面,若是是則表示實驗成功。。。。。
10.查看192.168.10.111 上的訪問日誌,發現客戶端ip是代理服務器的ip, 這對於後期的日誌分析不利,如何解決?
第一種方法:
192.168.10.110 (前端代理服務器)
location /forum {
proxy_pass http://192.168.10.111/test;
proxy_set_header X-Real-IP $remote_addr; ###添加http首部
proxy_set_header Host $host;
}
192.168.10.111 (後端web服務器) 在server段內添加
set_real_ip_from 192.168.10.0/24;
real_ip_header X-Real-IP; ##在編譯時須要安裝http_realip_module模塊
real_ip_recursive on;
第二種方法:
192.168.10.110 (前端代理服務器)
location /forum {
proxy_pass http://192.168.10.111/test;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ###添加http首部
proxy_set_header Host $host;
}
192.168.10.111 (後端web服務器) 在server段內添加
set_real_ip_from 192.168.10.0/24;
real_ip_header X-Forwarded-For; ##在編譯時須要安裝http_realip_module模塊
real_ip_recursive on;
PS: set_real_ip_from:真實服務器上一級代理的IP地址或者IP段,能夠寫多行。
real_ip_header:從哪一個header頭檢索出要的IP地址。
real_ip_recursive:遞歸排除IP地址,ip串從右到左開始排除set_real_ip_from裏面出現的IP,若是出現了未出現這些ip段的IP,那麼這個IP將被認爲是用戶的IP。
通常來講,X-Forwarded-For是用於記錄代理信息的,每通過一級代理(匿名代理除外),代理服務器都會把此次請求的來源IP追加在X-Forwarded-For中,而X-Real-IP,通常只記錄真實發出請求的客戶端IP。
11.# tail /var/log/nginx/access.log ###查看是否顯示真實客戶端ip
四.後端服務器使用apache的狀況如何使用真實的客戶端ip
1.192.168.10.110 (前端代理服務器)
location /forum {
proxy_pass http://192.168.10.111/test;
proxy_set_header X-Real-IP $remote_addr; ###添加http首部
}
2.修改後端服務器上/etc/httpd/conf/httpd.conf文件
LogFormat %h 改成 %(X-Real-IP)i
五.怎麼樣將整個網站的訪問都代理到後端
location / {
proxy_pass http://192.168.1.113;
proxy_set_header X-Real-IP $remote_addr;
}