У меня есть веб-приложение, доступ к которому осуществляется через 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
, и проксировать метод DELETE в веб-приложение?
Ограничения если предотвратите написание чего-то вроде этого:
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
Как я могу этого добиться?
Попробуйте использовать серию внутренних перезаписей (не тестировалось, написано прямо в браузере):
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;
}