Publier d'abord la configuration de mon serveur :
server {
listen 80;
server_name xxx;
# 1
location = /favicon.ico {
root /home/www-data/static;
rewrite (.*) /img/designs/admin-favicon.ico;
}
#2
location = /robots.txt {
root /home/www-data/static;
rewrite (.*) /admin-robots.txt;
}
# 3
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://127.0.0.1:22222;
}
}
La priorité officielle du chemin de recherche de localisation et la description de l'algorithme sont les suivantes :
Pour trouver l'emplacement correspondant à une requête donnée, nginx vérifie d'abord
emplacements définis à l'aide des chaînes de préfixe (emplacements de préfixe Among
). eux, l'emplacement avec le préfixe correspondant le plus long est sélectionné et
mémorisées. Ensuite, les expressions régulières sont vérifiées, dans l'ordre de
. leur apparition dans le fichier de configuration. La recherche de régulier
. les expressions se terminent au premier match, et le correspondant
la configuration est utilisée si aucune correspondance avec une expression régulière n'est trouvée
alors la configuration de l'emplacement du préfixe mémorisée plus tôt est
utilisé.
D'après ma compréhension, l'algorithme lors des recherches Nginx devrait être comme ceci :
- Recherchez l'emplacement en fonction du préfixe de la demande et recherchez la correspondance de préfixe commun la plus longue (s'il y a un modificateur =, l'emplacement sera mis en correspondance directement, s'il y a un modificateur ^~, l'emplacement sera utilisé directement), rappelez-vous le emplacement correspondant le plus long.
- Continuez à rechercher des correspondances régulières dans l'ordre de configuration. S'il y en a une, faites correspondre directement le premier emplacement correspondant, sinon utilisez l'emplacement ordinaire le plus long
En d'autres termes, selon ma configuration, lorsque le navigateur demande /favicon.ico, il doit correspondre directement et précisément
1 est correct, mais il correspond à 3 à chaque fois.
Je voudrais demander à tout le monde ici : y a-t-il un écart dans ma compréhension de l'emplacement de Nginx ? Alors pourquoi ma configuration donne-t-elle ce résultat ?
Après l'avoir configuré selon la méthode de l'affiche originale, je peux accéder au n°1 ici.
Je pense qu'il s'agit peut-être d'un problème de cache CDN. L'auteur peut essayer de réécrire d'autres fichiers ou l'essayer dans un environnement sans CDN.