nginx reescreve move de risky if statements para try_files. Alguém pode ajudar a converter? (baixo)

0

Estou tentando limpar minhas regras de regravação do nginx para o meu fórum do vBulletin, que possui algumas modificações e softwares adicionais no mesmo site, o que causa problemas. Eu tenho as coisas funcionando como deveriam, mas de acordo com nginx If is Evil eu estou preocupado e gostaria de tentar converter essas poucas regras em try_files em vez disso.

Atualmente, existe

  1. Uma regra para imagens e arquivos estáticos, para que eles não sejam passados para o mod de SEO (por exemplo, gif, .ico e até .css)

  2. Uma regra para a subpasta mobiquo que é também conhecida como: plugin do tapatalk. Para que isso funcione, eu tive que excluir todo o diretório das reescritas.

  3. Se o arquivo não existir. Não tenho certeza de como isso é importante, mas parece uma boa ideia. Talvez seja para diminuir o trabalho do mod de SEO.

As regras de reescrita do nginx no formulário do bloco If aparentemente arriscado:

isso está acima do / fórum / bloco porque eu queria dar prioridade, se isso for feito de forma indevida eu adoraria saber.

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            # Some basic cache-control for static files to be sent to the browser
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location /forum/ {

            try_files $uri $uri/ /forum/dbseo.php?$args;

            if ($request_uri ~* ^/forum/mobiquo) {
                    break;
            }

            if (-f $request_filename) {
            expires 30d;
                    break;
            }

            if ($request_filename ~ "\.php$" ) {
                    rewrite ^(/forum/.*)$ /forum/dbseo.php last;
            }


            if (!-e $request_filename) {
                    rewrite ^/forum/(.*)$ /forum/dbseo.php last;
            }

    }

END

Em algum lugar das minhas pesquisas, encontrei um modelo que tentei adaptar, mas como não entendi o regex, falhei:)

localização / {

            # if you're just using wordpress and don't want extra rewrites
            # then replace the word @rewrites with /index.php

try_files $ uri $ uri / /index.php;

}

localização @rewrites {

            # Can put some of your own rewrite rules in here
            # for example rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
            # If nothing matches we'll just send it to /index.php

try_files $ uri $ uri / /forum/dbseo.php?$args;

reescreva ^ /index.php por último;

reescreva ^ (/ .php) $ /forum/dbseo.php por último;

}

    
por user3125310 22.12.2013 / 00:35

1 resposta

0

Tente limpar sua dúvida, especialmente no final, em que você está gritando, em vez de fornecer código.

Com base na configuração que você forneceu no topo da sua pergunta, acabei com isso:

location /forum/ {
    index dbseo.php; # You obviously wish to send everything erroneous/inexistent to dbseo.php, any index.php file would suffer the regex location below
    try_files $uri $uri/ /forum/dbseo.php?$args; # Any inexistent file/directory will be handled over to /forum/dbseo.php

    location ^~ /forum/dbseo.php { # Avoids matching the regex location below (performance)
    }

    location ^~ /forum/mobiquo { # Avoids matching any other rules
    }

    location ~* \.php$ {
        try_files /forum/dbseo.php =404;
        # Be careful here, try to secure your location since the regex can still be manipulated for arbitrary code execution
    }
}

Locais aninhados são bons para o isolamento de blocos de localização potencialmente conflitantes. Tenha em mente que as localizações regex são avaliadas sequencialmente, assim, para evitar que a ordem dos blocos de localização tenha um impacto (que é uma bagunça exatamente como a configuração do Apache), tente sempre incluir locais de expressão regular em outros prefixo para evitar que vários deles sigam um ao outro. / p>

Você pode aprender sobre os modificadores location em sua página de documentação.

Talvez haja mais subtelty, mas você tem todas as informações básicas que você precisa no meu exemplo. O trabalho é seu para entender / melhorá-lo para melhor atender às suas necessidades. : o)

    
por 05.11.2014 / 13:40

Tags