環境介紹:
兩臺nginx代理服務器,第一臺接收真實客戶端的請求,然後調度到第二臺nginx代理服務器上,最後調度到web後端。
需求:
因爲第二臺nginx是接收第一臺nginx的請求,所以默認情況下日誌記錄的全部是第一臺nginx的ip訪問,現在在要求第二臺nginx的訪問日誌能夠記錄真實客戶端的ip。
第一臺nginx配置:
- worker_processes 1;
- error_log logs/error.log notice;
- pid logs/nginx.pid;
- worker_rlimit_nofile 65535;
- events {
- use epoll;
- worker_connections 65535;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- keepalive_timeout 65;
- proxy_temp_path /data0/proxy_temp_path;
- proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache:128m inactive=1d max_size=1g;
- upstream hdwiki {
- server 192.168.253.105;
- }
- server {
- listen 80;
- server_name www.hdwiki.com;
- index index.html index.htm;
- location /
- {
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- proxy_pass http://hdwiki;
- }
- access_log logs/access_hdwiki.log;
- }
- }
proxy_set_header Host $host; 把訪問的域名加到請求包的頭部信息中,能夠找到後端web的虛擬主機。
proxy_set_header X-Forwarded-For $remote_addr; 把客戶端真是ip地址加到請求包的頭部信息中,以X-Forwarded-For做標示。
第二臺nginx配置:
首先在編譯的時候加上--with-http_realip_module這個模塊。
參考:http://wiki.nginx.org/HttpRealIpModule
- worker_processes 1;
- #error_log logs/error.log notice;
- pid logs/nginx.pid;
- worker_rlimit_nofile 65535;
- events {
- use epoll;
- worker_connections 65535;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- keepalive_timeout 65;
- proxy_temp_path /data0/proxy_temp_path;
- proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache:128m inactive=1d max_size=1g;
- upstream hdwiki {
- server 192.168.253.105:8090;
- }
- server {
- listen 80;
- server_name www.hdwiki.com;
- index index.html index.htm;
- location /
- {
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- set_real_ip_from 192.168.253.103;
- real_ip_header X-Forwarded-For;
- proxy_pass http://hdwiki;
- }
- access_log logs/access_hdwiki.log;
- }
- }
set_real_ip_from 192.168.253.103; 第一臺nginx的ip的地址,指定真實ip來自哪兒。
real_ip_header X-Forwarded-For; 從第一臺nginx上獲取客戶端的ip,因爲真實客戶端的ip已經在第一臺nginx設置中被X-Forwarded-For標示,所以衝header頭中提取它。
這樣就能在第二臺nginx代理服務器的訪問日誌中看到真實客戶端訪問ip。