Como posso ter a mesma regra para dois locais na configuração do NGINX?
Eu tentei o seguinte
server {
location /first/location/ | /second/location/ {
..
..
}
}
mas o nginx reload lançou este erro:
nginx: [emerg] invalid number of arguments in "location" directive**
nginx
nginx-location
user1661010
fonte
fonte
nginx/1.13.2
proxy_pass
trabalhar, consulte esta resposta: stackoverflow.com/a/46625656/1246870Outra opção é repetir as regras em dois locais de prefixo usando um arquivo incluído. Como os locais de prefixo são independentes da posição na configuração, usá-los pode economizar alguma confusão, à medida que você adiciona outros locais de regex posteriormente. Evitar locais regex, quando possível, ajudará sua configuração a ser dimensionada sem problemas.
Aqui está uma amostra shared.conf:
fonte
shared.conf
exemplo e localização?O regex e os arquivos incluídos são bons métodos, e eu os uso com frequência. Mas outra alternativa é usar um "local nomeado", que é uma abordagem útil em muitas situações - especialmente as mais complicadas. A página oficial "If is Evil" mostra essencialmente o seguinte como uma boa maneira de fazer as coisas:
Existem vantagens e desvantagens nessas várias abordagens. Uma grande vantagem de uma regex é que você pode capturar partes da correspondência e usá-las para modificar a resposta. Obviamente, você geralmente pode obter resultados semelhantes com as outras abordagens, definindo uma variável no bloco original ou usando
map
. A desvantagem da abordagem regex é que ela pode ficar pesada se você deseja combinar uma variedade de locais, além da baixa precedência de uma regex simplesmente não se encaixar na maneira como você deseja combinar locais - sem mencionar que aparentemente há impactos no desempenho de regexes em alguns casos.A principal vantagem de incluir arquivos (até onde eu sei) é que ele é um pouco mais flexível sobre exatamente o que você pode incluir - não precisa ser um bloco de localização completo, por exemplo. Mas também é subjetivamente um pouco mais desajeitado do que locais nomeados.
Observe também que há uma solução relacionada que você pode usar em situações semelhantes: locais aninhados. A idéia é que você comece com um local muito geral, aplique alguma configuração comum a várias das correspondências possíveis e, em seguida, tenha locais aninhados separados para os diferentes tipos de caminhos que deseja corresponder. Por exemplo, pode ser útil fazer algo assim:
fonte
Essa é uma abordagem curta, porém eficiente e comprovada:
location ~ (patternOne|patternTwo){ #rules etc. }
Assim, pode-se facilmente ter vários padrões com sintaxe de canal simples apontando para as mesmas regras / bloco de localização.
fonte