linux – nginx不会将标头中的ip转发到apache(启用了rpaf)
发布时间:2020-12-14 02:39:57 所属栏目:Linux 来源:网络整理
导读:我正在尝试将nginx设置为前端,将apache设置为我的服务器上的后端. 一切照旧,我已经安装了libapache2-mod-rpaf.但是apache没有看到真正的客户端ip和基于ip的一些.htaccess限制完全不起作用,导致apache只看到本地ip. 这是nginx vhost配置^ server { listen 80;
我正在尝试将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 404 = @fallback; if ( $host ~* ^((.*).domain)$) { set $proot /var/www/$1; 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |