Применить блокировку местоположения к запросам псевдонимов только для запросов HTTP GET
У меня есть веб-приложение, доступ к которому осуществляется через nginx, который действует как обратный прокси-сервер. Однако подпуть этого приложения связан с каталогом. Конфигурация сервера выглядит следующим образом:
server {
# ...
location /myapp/files {
alias /var/www/myapp/files;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
}
location /myapp/ {
proxy_pass http://127.0.0.1:3000/;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
}
}
Приведенная выше настройка создает псевдонимы для всех запросов /myapp/files
независимо от способа запроса. Есть ли способ получить псевдоним только для GET запросов /myapp/files
, а прокси метод УДАЛИТЬ к веб-приложению?
Ограничения, если помешают что-то подобное написано:
if ($request_method = "GET") {
location /myapp/files {
alias /var/www/myapp/files;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
}
}
Как предлагается в комментариях, пытаюсь сделать что-то подобное с моей конфигурацией:
location /myapp/files {
auth_basic Restricted;
auth_basic_user_file /etc/nginx/htpasswd;
if ($request_method = "GET") {
alias /var/www/myapp/files;
}
if ($request_method = "DELETE") {
proxy_pass http://127.0.0.1:3000/;
}
}
}
результаты в:
nginx: [emerg] "alias" directive is not allowed here in /etc/nginx/sites-enabled/default:44
Как мне этого добиться?
1 ответ
Решение
Попробуйте использовать серию внутренних переписываний (не проверено, написано непосредственно в браузере):
location /myapp/files {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
rewrite ^(/myapp/files)(.*) $1.$request_method$2 break;
}
location /myapp/files.GET {
alias /var/www/myapp/files;
internal;
}
location /myapp/files.DELETE {
rewrite ^/myapp(/files)(.*) $1$2 break;
proxy_pass http://127.0.0.1:3000/;
internal;
}