AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1019730
Accepted
adrelanos
adrelanos
Asked: 2020-06-03 08:47:24 +0800 CST2020-06-03 08:47:24 +0800 CST 2020-06-03 08:47:24 +0800 CST

Quão caras são as variáveis ​​nginx?

  • 772

FAQ do nginx Existe uma maneira adequada de usar variáveis ​​do nginx para tornar as seções da configuração mais curtas, usando-as como macros para fazer com que partes da configuração funcionem como modelos? ) dizendo (negrito é meu):

P: Existe uma maneira adequada de usar variáveis ​​nginx para tornar as seções da configuração mais curtas, usando-as como macros para fazer com que partes da configuração funcionem como modelos?

R: As variáveis ​​não devem ser usadas como macros de modelo. As variáveis ​​são avaliadas em tempo de execução durante o processamento de cada solicitação, portanto, são bastante caras em comparação com a configuração estática simples . Usar variáveis ​​para armazenar strings estáticas também é uma má ideia. Em vez disso, uma expansão de macro e diretivas "include" devem ser usadas para gerar configurações mais facilmente e isso pode ser feito com as ferramentas externas, por exemplo, sed + make ou qualquer outro mecanismo de modelo comum.

Por exemplo, em vez de um super longo add_header Content-Security-Policypara melhor legibilidade, estou usando:

set $CSP "default-src 'none'";

set $CSP "${CSP}; connect-src 'self'";

set $CSP "${CSP}; script-src 'self' https://*.domain.org 'unsafe-inline' 'unsafe-eval'";

set $CSP "${CSP}; style-src 'self' https://*.domain.org 'unsafe-inline'";

set $CSP "${CSP}; img-src 'self' data: https://*.domain.org";

set $CSP "${CSP}; font-src 'self' https://*.domain.org";

## CSP closing colon.
set $CSP "${CSP};";

add_header Content-Security-Policy "$CSP";

Quanto impacto no desempenho do nginx esse uso da variável teria adequadamente? Houve algum teste/pesquisa de desempenho sobre esse assunto?

performance configuration nginx variables
  • 2 2 respostas
  • 529 Views

2 respostas

  • Voted
  1. Best Answer
    Muhammad Dyas Yaskur
    2020-06-11T07:59:19+08:002020-06-11T07:59:19+08:00

    As variáveis ​​são avaliadas em tempo de execução durante o processamento de cada solicitação

    Imagine cada solicitação que você deve obter e salvar a variável da memória ou tempo de execução, quanto tempo e memória você precisa gastar? Talvez se você tiver alguns pedidos, não seja significativo, mas se você tiver tantos pedidos, será muito significativo

    É como uma planície estática aberta versus um arquivo dinâmico. Não há nada mais rápido do que o arquivo simples sendo acessado diretamente.

    No seu caso, você usa uma variável e a define tantas vezes. Não posso fazer benchmark usando o próprio Nginx por falta de infraestrutura, mas quero compartilhar o benchmark do script PHP dessa suíte para uma analogia com o seu caso.

    Você deseja definir este texto:

    default-src 'nenhum'; connect-src 'self; script-src 'self' https:// .domain.org 'unsafe-inline' 'unsafe-eval'; style-src 'self' https:// .domain.org 'unsafe-inline'; dados img-src 'self': https:// .domain.org; font-src 'self' https:// .domain.org;

    com PHP você pode configurá-lo usando este código:

    $csp = "default-src 'none'; connect-src 'self; script-src 'self' https://*.domain.org 'unsafe-inline' 'unsafe-eval'; style-src 'self' https://*.domain.org 'unsafe-inline'; img-src 'self' data: https://*.domain.org; font-src 'self' https://*.domain.org;";
    

    Mas, por alguns motivos, você deseja definir várias vezes antes de definir a saída real. Então o código ficará assim:

    $csp =  "default-src 'none'";
    $csp = $csp."; connect-src 'self'";
    $csp = $csp."; script-src 'self' https://*.domain.org 'unsafe-inline' 'unsafe-eval'";
    $csp = $csp."; style-src 'self' https://*.domain.org 'unsafe-inline'";
    $csp = $csp."; img-src 'self' data: https://*.domain.org; font-src 'self' https://*.domain.org";
    $csp = $csp.";";
    

    Eu executo o primeiro código usando um loop por 10 milhões de vezes e leva 0,0725793838500982 segundos e o segundo código leva 1,049282026290894 segundos . Assim, o segundo código demora cerca de 15 vezes mais devagar . E mostra apenas um benchmark de tempo de solicitação, não memória, CPU, disco ou qualquer outro benchmark de uso de recursos. talvez o segundo código leve muito mais recursos do que o primeiro também.

    Como acontece no PHP, também acontecerá com o tempo de execução do Nginx. Então, como nos documentos do Nginx, o uso de variáveis ​​​​para armazenar strings estáticas é caro e também uma má idéia . Se for igual à analogia do PHP acima, o custo é 15 vezes mais lento

    • 1
  2. Tero Kilkanen
    2020-06-13T07:26:31+08:002020-06-13T07:26:31+08:00

    Você deve comparar sua própria configuração, porque muitos fatores de sua configuração específica afetam a desaceleração.

    Portanto, primeiro configure a configuração onde o CSP desejado é definido de uma só vez.

    Faça um benchmark da configuração usando, por exemplo, Siege: https://github.com/JoeDog/siege

    Em seguida, defina a configuração como na sua pergunta e execute o mesmo teste de benchmark novamente.

    Dessa forma, você pode obter uma resposta precisa para sua configuração.

    De qualquer forma, recomendo que você construa seu arquivo de configuração usando um sistema de gerenciamento de configuração como Ansible, Chef ou Puppet. Na fonte, você pode dividir as linhas como quiser, mas o resultado final seria ideal para o nginx.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve