У меня есть следующий файл nginx.conf:
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;
}
}
Я хотел бы служить healthcheck.json
когда localhost:8080/v1/healthcheck
запрашивается. Однако nginx отказывается обслуживать любой файл json, если я не нажимаю явно localhost:8080/v1/healthcheck.json
, в противном случае он регистрирует, что файл не найден, и ответом будет страница 404 nginx. Если я добавлю .json в конец URL-адреса, файл будет найден волшебным образом, и произойдет великая магия. Я пытался заставить application/json
тип, а также изменение try files
row, чтобы явно вернуть файл, который я хотел бы вернуть (поэтому я установил try_files healthcheck.json =404;
) все возвращает одну и ту же проблему.
Я совсем потерялся .. У кого-нибудь есть идеи?
На самом деле это ожидаемое поведение с этой конфигурацией. Итак, что вы делаете, это удаляет URL-адрес и затем передает его в try_files
.
Но в try_files
для обработки файлов без расширения. Для этого измените его следующим образом
try_files $last_path_component $last_path_component.json $last_path_component.json =404;
Это позволит вам служить .json
файлы без расширения. тем не мение, это не будет служить тому же .json
файл с расширением или без него. В try_files
Директива проверяет наличие файлов и обслуживает их в указанном порядке. Итак, если у вас есть healthcheck.json
и попробуйте получить к нему доступ через localhost:8080/v1/healthcheck
он все равно не удастся. Итак, вам нужно иметь healthcheck
конечная точка должна быть фактически без расширения на сервере, чтобы она была доступна.
Если вы хотите обрабатывать оба варианта, с расширением или без него, вы можете удалить .json
часть первая как это
if ($request_uri ~ ^/([^?]*)\.json(\?.*)?$) {
return 302 /$1$2;
}
try_files $uri $uri.json =404;
}