我的服务器 IP 是***.***.***.234
。对于 SSL,我需要添加另一个 IP ***.***.***.235
。这是一个 vps,IP 地址是由朋友添加的。
问题是:当有人提交评论(WordPress)时,用户 IP 被检测为***.***.***.235
,这是服务器 IP,而不是用户 IP,这确实是一个问题。如何解决这个问题?
VPS 在 Cent OS 和 Nginx 上运行。
更新:VHOST 条目
server {
error_log /var/log/nginx/vhost-error_log warn;
listen ***.***.***.235:80;
server_name example.com www.example.com;
access_log /usr/local/apache/domlogs/example.com-bytes_log bytes_log;
access_log /usr/local/apache/domlogs/example.com combined;
root /home/tareq/public_html;
location / {
location ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
expires 1d;
try_files $uri @backend;
}
error_page 405 = @backend;
add_header X-Cache "HIT from Backend";
proxy_pass http://***.***.***.235:8081;
include proxy.inc;
}
location @backend {
internal;
proxy_pass http://***.***.***.235:8081;
include proxy.inc;
}
location ~ .*\.(php|jsp|cgi|pl|py)?$ {
proxy_pass http://***.***.***.235:8081;
include proxy.inc;
}
location ~ /\.ht {
deny all;
}
}
答案1
听起来 nginx 未配置为将客户端地址传递给 Apache。
您需要更改 nginx 配置文件以包含以下内容:
server{
location / {
proxy_pass http://127.0.0.1:PORT;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
最后一步是安装 Apache 的 mod_rpaf。此模块允许您在使用代理时设置远程地址的值。如果您尚未安装该模块(尝试“a2enmod rpaf”来查找),您可以通过 apt-get 安装它:
sudo apt-get install libapache2-mod-rpaf
尽管您现在可能正在检索正确的 IP 地址,但您需要确保模块配置正确。我的 Apache 配置文件在所有其他的下面都有以下代码:
# The following lines allow client IP to be passed from Nginx to Apache
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
</IfModule>