vbulletin fix for apache + nginx

Page Title Module
Move Remove Collapse

Unconfigured Ad Widget

Unconfigured Ad Widget Module
Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • vbulletin fix for apache + nginx

    Here is a fix for vbulleting forum sites which have installed apache with nginx proxy on the server,

    without this fix all users of the site will have the same ip (the ip of the server the site installed at)

    the problem can appear if you set timeout limit of 15 minutes after several login fails, this will cause that users who login with correct username and password will receive an error message like: You have used up your failed login quota! Please wait 15 minutes before trying again.

    so here is a fix:

    open includes/class_core.php with your editor and replace functions fetch_ip()
    and fetch_alt_ip()

    by this:

    PHP Code:
    function fetch_ip()
        {
            if(isset(
    $_SERVER["HTTP_X_REAL_IP"]))return $_SERVER["HTTP_X_REAL_IP"];        
            else return 
    $_SERVER['REMOTE_ADDR'];
        }
        
    function 
    fetch_alt_ip()
        {
            if(isset(
    $_SERVER["HTTP_X_REAL_IP"]))$alt_ip =  $_SERVER["HTTP_X_REAL_IP"];        
            else 
    $alt_ip =  $_SERVER['REMOTE_ADDR'];        #$alt_ip = $_SERVER['REMOTE_ADDR'];

            
    if (isset($_SERVER['HTTP_CLIENT_IP']))
            {
                
    $alt_ip $_SERVER['HTTP_CLIENT_IP'];
            }
            else if (isset(
    $_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s'$_SERVER['HTTP_X_FORWARDED_FOR'], $matches))
            {
                
    // make sure we dont pick up an internal IP defined by RFC1918
                
    foreach ($matches[0] AS $ip)
                {
                    if (!
    preg_match('#^(10|172\.16|192\.168)\.#'$ip))
                    {
                        
    $alt_ip $ip;
                        break;
                    }
                }
            }
            else if (isset(
    $_SERVER['HTTP_FROM']))
            {
                
    $alt_ip $_SERVER['HTTP_FROM'];
            }

            return 
    $alt_ip;
        } 

    i have simpy added the $_SERVER["HTTP_X_REAL_IP"] to both functions because thi is the enviroment variable which shows the correct user ip in nginx

    after i fixed mine i found a similar article here: http://wiki.unixcraft.com/display/~g...+load+balancer

  • #2
    You can use $http_remote_addr and set:

    server { underscores_in_headers on;
    Last edited by Anshul; 11-07-09, 12:30.

    Comment


    • #3
      I too have smiliar problem on my apach and nginx as proxy server.. I can't get this modification to get work with the latest version of Vbulletin 3.8.4..

      Please give me the updated version of this modification or please attach the modified file for me..
      Thank you.

      Comment


      • #4
        here is the editet file for vb 3.8.4 i havent tested it because here is an older version of vb installed, hope it works.

        extract it and upload to includes/ directory

        Comment


        • #5
          btw. another way to get real ip is to install the mod_rpaf install instruction which worked for me you can find here: Reduce Apache’s Load With Nginx On RHEL 5.2 - Vpire Blog

          Comment


          • #6
            Thank you very much... It works :D

            Comment

            Working...
            X