我有2个vps:
两者都安装了VestaCP相同的配置(apache为后端,nginx为前端)。
有相同的脚本,在第二台服务器上不起作用。
.htaccess规则:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|png|gif)$ [NC]
RewriteCond %{REMOTE_ADDR} !^(127.0.0.1)$ [NC]
RewriteCond %{HTTP_USER_AGENT} (bad|useragents) [NC]
RewriteRule (.*) script.php?src=$1 [L]
</IfModule>
注意:
可能是什么?我尝试调试apache日志,以查找请求未重定向的原因,但是apache LogLevel debug
没有显示任何错误。
答案 0 :(得分:1)
如@Phil所说,问题出在REMOTE_ADDR
在工作的服务器头上:
[HTTP_X_FORWARDED_FOR] => CLIENT_IP
[SERVER_NAME] => sitename.org
[SERVER_ADDR] => SERVER_IP
[SERVER_PORT] => 80
[REMOTE_ADDR] => CLIENT_IP
服务器无法正常工作
[HTTP_X_REAL_IP] => CLIENT_IP
[HTTP_X_FORWARDED_FOR] => CLIENT_IP
[SERVER_NAME] => sitename.org
[SERVER_ADDR] => SERVER_IP
[SERVER_PORT] => 80
[REMOTE_ADDR] => SERVER_IP
如您所见,“不工作”的服务器返回标头SERVER_ADDR
和REMOTE_ADDR
的服务器IP。
因此,要使其正常工作,我的代码是:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|png|gif)$ [NC]
RewriteCond %{HTTP_X_REAL_IP} !^(127.0.0.1)$ [NC]
RewriteCond %{HTTP_USER_AGENT} (bad|useragents) [NC]
RewriteRule (.*) script.php?src=$1 [L]
</IfModule>
现在的问题是-如何将客户端IP放入REMOTE_ADDR
或更好地修复.htaccess并将其更改为HTTP_X_REAL_IP
?
哪种方法是“正确的方法”?我还没有找到快速的解决方案,目前只是将htaccess更改为HTTP_X_REAL_IP
。