J'ai le fichier nginx.conf suivant:
server {
listen 8080;
server_name dummy_server;
root /usr/share/nginx/html;
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
default_type 'application/json';
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Content-Type' 'application/json';
if ($request_uri ~* "([^/]*$)" ) {
set $last_path_component $1;
}
try_files $last_path_component.json $last_path_component.json =404;
}
}
Je voudrais servir healthcheck.json
quand localhost:8080/v1/healthcheck
Est demandé. Cependant, nginx refuse de servir tout fichier json si je ne frappe pas explicitement localhost:8080/v1/healthcheck.json
, sinon il enregistre le fichier introuvable et la réponse est la page 404 de nginx. Si j'ajoute .json à la fin de l'url, le fichier est trouvé comme par magie et une grande magie opère. J'ai essayé de forcer application/json
type, ainsi que la modification du try files
row pour renvoyer explicitement le fichier que je voudrais retourner (j'ai donc défini try_files healthcheck.json =404;
) tous renvoie le même problème.
Je suis assez perdu .. quelqu'un a des idées?
Il s'agit en fait d'un comportement attendu avec cette configuration. Donc, ce que vous faites, c'est supprimer l'URL puis la passer à try_files
.
Mais il n'y a rien dans try_files
pour gérer les fichiers sans extension. Pour ce faire, modifiez-le comme ceci
try_files $last_path_component $last_path_component.json $last_path_component.json =404;
Cela vous permettra de servir .json
fichiers sans extension. Cependant, cela ne servira pas la même chose .json
fichier avec ou sans extension. Le try_files
directive vérifie l'existence des fichiers et les sert dans cet ordre. Donc, si vous avez healthcheck.json
et essayez d'y accéder via localhost:8080/v1/healthcheck
il échouera toujours. Vous devez donc avoir healthcheck
end-point pour être réellement sans extension sur le serveur pour qu'il soit accessible.
Si vous souhaitez gérer les deux variantes, avec ou sans extension, vous pouvez supprimer le .json
première partie comme celle-ci
if ($request_uri ~ ^/([^?]*)\.json(\?.*)?$) {
return 302 /$1$2;
}
try_files $uri $uri.json =404;
}