linux – nginx不会将标头中的ip转发到apache(启用了rpaf)

linux – nginx不会将标头中的ip转发到apache(启用了rpaf),第1张

概述我正在尝试将nginx设置为前端,将apache设置为我的服务器上的后端. 一切照旧,我已经安装了libapache2-mod-rpaf.但是apache没有看到真正的客户端ip和基于ip的一些.htaccess限制完全不起作用,导致apache只看到本地ip. 这是nginx vhost配置^ server { listen 80; server_name domain; 我正在尝试将Nginx设置为前端,将apache设置为我的服务器上的后端.
一切照旧,我已经安装了libapache2-mod-rpaf.但是apache没有看到真正的客户端ip和基于ip的一些.htaccess限制完全不起作用,导致apache只看到本地ip.

这是Nginx vhost配置^

server {    Listen 80;    server_name domain;    location ~* ^/(admin/|dump/|) {        proxy_set_header Host $host;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Real-IP $remote_addr;        proxy_pass http://127.0.0.1:8080;        proxy_redirect http://domain:8080/ /;    }    location / {        proxy_set_header Host $host;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Real-IP $remote_addr;        proxy_pass http://127.0.0.1:8080;        proxy_redirect http://domain:8080/ /;    }    location ~* ^.+\.(jpg|swf|flv|ico|txt|jpeg|gif|png|svg|Js|CSS|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)${        access_log /var/www/logs/domain.Nginx.access.log;        error_page @R_502_6939@ = @fallback;        if ( $host ~* ^((.*).domain)$) {            set $proot /var/www/;            break;        }        if ( $host = "domain" ) {            break;        }        root /var/www/domain;    }    location @fallback {        proxy_pass http://127.0.0.1:8080;        proxy_set_header Host $host;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Real-IP $remote_addr;    }}

这里是apache vhost配置:

<VirtualHost *:8080>    Servername domain    documentRoot /var/www/domain    DirectoryIndex index.PHP    CustomLog /var/www/logs/domain.access.log combined    ErrorLog /var/www/logs/domain.error.log    Serveradmin info@domain    AddDefaultCharset utf8    PHP_admin_value open_basedir "/var/www/mod-tmp:.:/var/www/domain"    PHP_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f webmaster@domain"    PHP_admin_value upload_tmp_dir "/var/www/mod-tmp"    PHP_admin_value session.save_path "/var/www/mod-tmp"    AddType application/x-hwikipd-PHP .PHP .PHP3 .PHP4 .PHP5 .pHTML    AddType application/x-hwikipd-PHP-source .PHPs<Directory /var/www/domain>    Options All    AllowOverrIDe All</Directory></VirtualHost>

正如我在Nginx日志中看到的那样:

xxx.yyy.98.14 - - [28/Jan/2012:02:08:29 +0400] "GET / http/1.0" 403 179 "-" "w3m/0.5.3"

它看到我真正的IP.

但是在apache日志中它只能看到本地ip:

127.0.0.1 - - [28/Jan/2012:02:08:29 +0400] "GET / http/1.0" 403 390 "-" "w3m/0.5.3"

rpaf已启用.

$cat /etc/apache2/mods-enabled/rpaf.conf <IfModule mod_rpaf.c>    RPAFenable On    RPAFsethostname On    RPAFproxy_ips 127.0.0.1 ::1</IfModule>$cat /etc/apache2/mods-enabled/rpaf.load LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so$ls -l /usr/lib/apache2/modules/mod_rpaf.so-rw-r--r-- 1 root root 8488 Oct 17 20:47 /usr/lib/apache2/modules/mod_rpaf.so

那么,有什么不对?

PS.保存此配置后,我已多次重启Nginx和apache,但没有任何更改.

解决方法 这是正确的行为.因为只有您的应用程序(在Apache上运行)才能看到真正的IP.例如,安装示例应用程序(如wordpress)并安装实时分析(如Piwik).将Piwik代码插入wordpress页脚并访问您的wordpress站点(注销后).现在,Piwik将显示真实IP而不是RPAFproxy_ips中设置的IP.

顺便说一句,/ etc / apache2 / mods-enabled / rpaf.conf文件缺少一个重要的指令.它应该有RPAFheader.例如,我的配置文件看起来像这样……

<IfModule mod_rpaf.c>    RPAFenable On    RPAFsethostname On    RPAFproxy_ips 127.0.0.1    RPAFheader X-Forwarded-For</IfModule>

您也可以使用X-Real-IP代替X-Forwarded-For.在任何一种情况下,请确保Nginx配置为在其标头中发送真实IP.例如,如果您使用X-Forwarded-For,那么您的Nginx配置应包含以下内容……

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-For $remote_addr;
总结

以上是内存溢出为你收集整理的linux – nginx不会将标头中的ip转发到apache(启用了rpaf)全部内容,希望文章能够帮你解决linux – nginx不会将标头中的ip转发到apache(启用了rpaf)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1035054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存