Nginx: redireciona um intervalo de IP para um arquivo, se existir

1

Eu quero redirecionar os usuários para um arquivo maintenance.php, se existir, mas não para nosso endereço interno. Agora eu tenho este trabalho através de declarações if, mas estes são considerados maus dentro do bloco de localização ..

Esta é a configuração agora:

if (-f $document_root/maintenance.php) {
    return 503;
}

error_page 503 @maintenance;

location @maintenance {
    if ($ourips = 0) {
        rewrite ^(.*)$ /maintenance.php last;
    }
    if ($ourips = 1) {
        rewrite ^(.*)$ /app.php/$1 last;
    }
}

location / {
    # try to serve file directly, fallback to rewrite
    try_files $uri @rewriteapp;
}

location @rewriteapp {
    # rewrite all to app.php
    rewrite ^(.*)$ /app.php/$1 last;
}

location ~ ^/(app|clear|maintenance)\.php(/|$) {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param HTTPS off;
}

Qualquer maneira alternativa de fazer isso sem as duas instruções if na localização @maintenance?

    
por Alt-rock ninja cowgirl 29.07.2016 / 13:35

1 resposta

0

Entendi, use alguns ifs mas eles não devem ser malignos nesse contexto até onde eu sei ..

    if (-f $document_root/maintenance.php) {
            set $test A;
    }
    if ($ourips = 0) {
            set $test "${test}B";
    }
    if ($test = AB) {
            return 503;
    }

    error_page 503 @maintenance;

    location @maintenance {
        rewrite ^(.*)$ /maintenance.php last;
    }
    location / {
            # try to serve file directly, fallback to rewrite
            try_files $uri @rewriteapp;
    }
    location @rewriteapp {
            # rewrite all to app.php
            rewrite ^(.*)$ /app.php/$1 last;
    }
    location ~ ^/(app|clear|maintenance)\.php(/|$) {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param HTTPS off;
    }

nginx.conf

    geo $ourips {
      default 0;
      xxx.xxx.xxx.xxx 1;
    }
    
por 01.09.2016 / 10:02

Tags