Configuração Nginx - Cabeçalhos de cache em determinados caminhos

2

Da minha compreensão dos documentos do nginx, os locais não podem ser aninhados (ou melhor, se forem os efeitos, não são herdáveis) e proxy_pass não pode pertencer ao nível server {} . Portanto, minha configuração no momento é assim, eu sei que posso aliviar alguns usando caminhos de arquivos, mas vamos fingir que quero cabeçalhos de cache diferentes em caminhos diferentes usando proxy_pass . Presumivelmente, há uma maneira melhor de escrever isso sem a repição:

server {
  listen  80;
  server_name salessystem.acmecorp.com;

  location /extjs/ {
    ## proxy_buffers 128 256k;
    proxy_pass http://localhost:5400/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
    expires max;
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 7;
    gzip_proxied any;
    gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
    access_log off;
    break;
  }

  location / {
    ## proxy_buffers 128 256k;
    proxy_pass http://localhost:5400/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
    expires epoch;
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 7;
    gzip_proxied any;
    gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
    access_log off;
    break;
  }
}
    
por nginxtest 22.01.2012 / 07:57

1 resposta

2

Eu penso no seguinte para sua configuração do nginx:

  • pois é apenas o cabeçalho de expiração que difere para seus dois locais diferentes, embora ambos correspondam ao proxy com o mesmo servidor.
  • tente colocar os dois locais no bloco único
  • com base na string de consulta (ou string de correspondência de local), defina um expira cabeçalho
tag

.

server {
  listen  80;
  server_name salessystem.acmecorp.com;

  location ~* (/extjs/|/) {
    ## proxy_buffers 128 256k;
    proxy_pass http://localhost:5400/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
    expires max;
      if ($query_string ~ \/extjs\/) {
      expires epoch;
      }
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 7;
    gzip_proxied any;
    gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
    access_log off;
    break;
  }

}

No entanto, teste de acordo com suas necessidades, especialmente perto das correspondências de expressão regular em location e query_string value matching.

No entanto, não está claro, por que você deseja que extjs seja servido em um servidor proxy (parece um servidor de aplicativos dinâmico), já que eles são apenas arquivos de texto simples, se minha suposição estiver correta. As solicitações pertencentes ao extjs não precisam passar pelo proxy ou pelo sistema lógico do aplicativo, mas podem ser atendidas independentemente por meio do sistema de arquivos. Eu penso em mantê-lo em sua própria localização separada, e ter as diretivas exclusivas gzip / expires exclusivas para ele em seu próprio bloco de localização, enquanto as outras diretivas comuns podem ser mantidas no próprio bloco de servidor.

Por exemplo:

server {
   ...
   common gzip directives
   common header setters
   common expires setters
   ...
   location / {
     proxy to backend app server
     settings unique to / location
     ..
   }
   location /extjs {
     settings unique to /extjs location
     expires header reset
     ...
   }
}
    
por 22.01.2012 / 08:26

Tags