Como criar blocos de localização em nginx para um único arquivo, mas seguir as regras de outro bloco de localização além do próprio?

3

Eu tenho um bloco de localização para / que faz todas as minhas coisas de fastcgi e tem um tempo limite normal de 10s. Eu quero ser capaz de ter timesouts diferentes para determinados arquivos (/ admin, sitemap.xml). Existe uma maneira fácil de fazer isso sem copiar todo o bloco de localização para cada local?

location /admin{
 fastcgi_read_timeout 5m;
 #also use the location info below.
}

location /sitemap.xml{
 fastcgi_read_timeout 5m;
 #also use the location info below.
}

location / {
            fastcgi_pass 127.0.0.1:8014;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
            fastcgi_pass_header Authorization;
            fastcgi_intercept_errors off;
            fastcgi_param  SERVER_ADDR        $server_addr;
            fastcgi_param  SERVER_PORT        $server_port;
            fastcgi_param  SERVER_NAME        $server_name;
            fastcgi_param  SERVER_PROTOCOL    $server_protocol;
            fastcgi_param  REMOTE_ADDR        $remote_addr;
            fastcgi_param  REMOTE_PORT        $remote_port;
            fastcgi_param  HTTP_X_FORWARDED_FOR $http_x_forwarded_for;
        }
    
por Ryan Detzel 17.03.2011 / 17:03

2 respostas

2

Eu acho que existem duas possibilidades, das quais a segunda seria a mais flexível.

1

Você pode tentar:

location /admin{
    fastcgi_read_timeout 5m;
    include snippets/location.fcgi.conf;
}

location /sitemap.xml{
    fastcgi_read_timeout 5m;
    include snippets/location.fcgi.conf;
}

Arquivo snippets/location.fcgi.conf (sem necessidade de bloco de localização):

fastcgi_pass 127.0.0.1:8014;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
# ...

2

Ou eu acho que você poderia ir assim.

location / {
    # set you default, so we don't bomb out
    set $timeout 2s;
    # your other general stuff
}

location /sitemap.xml{
    set $timeout 5m;
    include snippets/location.fcgi.conf;
}

location /admin{
    fastcgi_read_timeout 5m;
    include snippets/location.fcgi.conf;
}

NOTA: Todos os caminhos de inclusão são sempre relativos à pasta de configuração principal do Nginx.
E sim, você pode colocá-los onde quiser, desde que você tenha um symlink no lugar.

    
por 19.03.2011 / 01:16
0

Você não pode herdar entre os blocos de localização, mas o que você pode fazer é usar a diretiva de inclusão para colocar todos os seus dados comuns. diretivas de configuração em um arquivo e, em seguida, incluir isso em cada localidade.

    
por 17.03.2011 / 22:58

Tags