我配置了一个 nginx 作为反向代理。我想通过以下两个地址访问一个网站:
- 统计测试网
- test.com/stats
test.com 和 stats.test.com 位于 2 个不同的服务器上。我的问题是,当客户端通过 stats.test.com 访问网站时,一切正常,nginx 显示客户端 ip。但是当客户端通过 test.com/stats 访问网站时,nginx 会显示 Nginx 反向代理服务器 IP。stats.test.com 的前端配置:
upstream stats.test.com{
server 192.168.0.130;
}
server {
include /etc/nginx/default_server_settings;
server_name stats.test.com;
location / {
include /etc/nginx/default_location_settings;
proxy_pass http://stats.test.com;
}
}
test.com/stats 的前端配置:
upstream test.com{
server 192.168.0.11;
}
upstream stats{
server 192.168.0.130;
}
server {
listen 80 default;
include /etc/nginx/default_server_settings;
server_name test.com;
location / {
include /etc/nginx/default_location_settings;
proxy_pass http://test.com;
}
location /stats/ {
proxy_pass http://stats/;
}
}
统计的后端配置:
server {
listen 80 default;
access_log /var/log/nginx/stats_access.log;
error_log /var/log/nginx/stats_error.log;
# Disable all methods besides HEAD, GET and POST.
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
root /var/www/stats/public_html;
index index.php index.html index.htm;
server_name stats stats.test.com;
location / {
try_files $uri $uri/ /index.html;
}
location /doc/ {
alias /usr/share/doc;
autoindex on;
allow 127.0.0.1;
deny all;
}
location ~* \.(js)$ {
expires 14d;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~\.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
# Return a 404 for all text files.
location ~* ^/(?:README|LICENSE[^.]*|LEGALNOTICE)(?:\.txt)*$ {
return 404;
}
}
我在 nginx.conf 中设置了这个:
set_real_ip_from 192.168.0.2;
real_ip_header X-Forwarded-For
192.168.0.2
是nginx反向代理服务器ip。
答案1
在 php 中,您可以使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 代替 $_SERVER["REMOTE_ADDR"],并且如果您使用 nginx,则会出现客户端的 ip,而不是反向代理。
答案2
我可能错了,但您的 stats.exemple.com 网站包括以下内容:
include /etc/nginx/default_location_settings;
您的基于 URI 的服务器不是,我敢打赌,包含 default_location_settings 文件包含这样的 proxy_header 和代理设置,可以像 real_ip_header X-Forwarded-For 一样完成这个技巧