#nginx #nginx-config
#nginx #nginx-config
Вопрос:
Я пытаюсь ограничить доступ к определенному файлу json для определенного пользовательского агента, используя файлы конфигурации в Nginx.
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
try_files $uri$args $uri$args/ /index.html;
}
location /v1/ {
proxy_pass http://127.0.0.1:8118;
proxy_pass_header Server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location = /v1/apischema {
root /usr/share/nginx/json;
if ($http_user_agent ~ useragentname) {
try_files /openapi.json;
break;
}
}
}
Идея состоит в том, чтобы ограничить доступ к openapi.json для внутреннего пользователя.
Пожалуйста, дайте мне знать, где я ошибаюсь.
Ответ №1:
try_files
может использоваться в server
location
блоке или. См. Контекст: в этом документе.
Для достижения этой цели существует несколько способов.
Использование if
:
location = /v1/apischema {
if ($http_user_agent ~ useragentname) {
rewrite ^ /openapi.json last;
}
}
location = /openapi.json {
internal;
root /usr/share/nginx/json;
}
internal
Директива запрещает прямой доступ к этому URI. См . Это предостережение по использованию if
.
Или map
с помощью try_files
:
map $http_user_agent $apischema {
~useragentname /openapi.json;
default /nonexistant;
}
server {
...
location = /v1/apischema {
root /usr/share/nginx/json;
try_files $apischema =404;
}
}
Подробности см. В этом документе.