Comment puis-je avoir la même règle pour deux emplacements dans la configuration NGINX?
J'ai essayé ce qui suit
server {
location /first/location/ | /second/location/ {
..
..
}
}
mais nginx reload a jeté cette erreur:
nginx: [emerg] invalid number of arguments in "location" directive**
nginx
nginx-location
user1661010
la source
la source
nginx/1.13.2
proxy_pass
de travailler, consultez cette réponse: stackoverflow.com/a/46625656/1246870Une autre option consiste à répéter les règles dans deux emplacements de préfixe à l'aide d'un fichier inclus. Étant donné que les emplacements de préfixe sont indépendants de la position dans la configuration, leur utilisation peut éviter une certaine confusion lorsque vous ajoutez d'autres emplacements de regex plus tard. Éviter les emplacements de regex lorsque vous le pouvez aidera votre configuration à évoluer en douceur.
Voici un exemple shared.conf:
la source
shared.conf
exemple et un emplacement?Les regex et les fichiers inclus sont de bonnes méthodes, et je les utilise fréquemment. Mais une autre alternative consiste à utiliser un «emplacement nommé», qui est une approche utile dans de nombreuses situations, en particulier les plus compliquées. La page officielle "If is Evil" montre essentiellement ce qui suit comme un bon moyen de faire les choses:
Ces différentes approches présentent des avantages et des inconvénients. Un gros avantage d'une expression régulière est que vous pouvez capturer des parties de la correspondance et les utiliser pour modifier la réponse. Bien sûr, vous pouvez généralement obtenir des résultats similaires avec les autres approches en définissant une variable dans le bloc d'origine ou en utilisant
map
. L'inconvénient de l'approche regex est qu'elle peut devenir compliquée si vous souhaitez faire correspondre une variété d'emplacements, et la faible priorité d'une expression régulière peut tout simplement ne pas correspondre à la façon dont vous souhaitez faire correspondre les emplacements - sans oublier qu'il y a apparemment des impacts sur les performances. des regexes dans certains cas.Le principal avantage de l'inclusion de fichiers (pour autant que je sache) est qu'il est un peu plus flexible sur ce que vous pouvez inclure exactement - il n'est pas nécessaire qu'il s'agisse d'un bloc d'emplacement complet, par exemple. Mais c'est aussi subjectivement un peu plus maladroit que les emplacements nommés.
Notez également qu'il existe une solution connexe que vous pourrez peut-être utiliser dans des situations similaires: les emplacements imbriqués. L'idée est de commencer par un emplacement très général, d'appliquer une configuration commune à plusieurs des correspondances possibles, puis d'avoir des emplacements imbriqués distincts pour les différents types de chemins que vous souhaitez faire correspondre. Par exemple, il peut être utile de faire quelque chose comme ceci:
la source
C'est une approche courte, mais efficace et éprouvée:
location ~ (patternOne|patternTwo){ #rules etc. }
Ainsi, on peut facilement avoir plusieurs modèles avec une syntaxe de tuyau simple pointant vers le même bloc / règles de localisation.
la source