Я пытаюсь настроить обратный прокси-сервер nginx для обслуживания изображений через мой REST API.
Но я застрял в настройке доступа к этим изображениям.Мне нужно отключить доступ и список на:
domaine.name/images/
domaine.name/images/t/
domaine.name/images/t/p/
Но хочу разрешить доступ к:
domaine.name/images/profile.png
domaine.name/images/t/zgdizgugiuzgdiu.gif
domaine.name/images/t/p/878675465.png
Знаете ли вы, как это сделать в конфигурационном файле nginx?Это регулярное выражение или что-то?
Я уже пробовал этот тип регулярных выражений, но он не работал.
location ~* ^.+.(jpeg|gif|png|jpg)
{
allow all;
}
Спасибо!
РЕДАКТИРОВАТЬ
Вот мойполная конфигурация nginx:
server {
server_name www.domain.com domain.com;
location /images/ {
deny all;
return 403;
}
location /images/^.+.(jpeg|gif|png|jpg) {
allow all;
}
location / {
proxy_pass http://127.0.0.1:8080/;
}
location /dbadmin {
deny all;
proxy_pass http://127.0.0.1:4321/dbadmin;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
error_page 400 /ErrorPages/HTTP400.html;
error_page 401 /ErrorPages/HTTP401.html;
error_page 402 /ErrorPages/HTTP402.html;
error_page 403 /ErrorPages/HTTP403.html;
error_page 404 /ErrorPages/HTTP404.html;
error_page 500 /ErrorPages/HTTP500.html;
error_page 501 /ErrorPages/HTTP501.html;
error_page 502 /ErrorPages/HTTP502.html;
error_page 503 /ErrorPages/HTTP503.html;
location /ErrorPages/ {
alias /home/webservices/errorPages/;
internal;
}
}
server {
server_name api.domain.com;
location / {
deny all;
}
location /v1/ {
proxy_pass http://127.0.0.1:8888/;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
error_page 400 /ErrorPages/HTTP400.html;
error_page 401 /ErrorPages/HTTP401.html;
error_page 402 /ErrorPages/HTTP402.html;
error_page 403 /ErrorPages/HTTP403.html;
error_page 404 /ErrorPages/HTTP404.html;
error_page 500 /ErrorPages/HTTP500.html;
error_page 501 /ErrorPages/HTTP501.html;
error_page 502 /ErrorPages/HTTP502.html;
error_page 503 /ErrorPages/HTTP503.html;
location /ErrorPages/ {
alias /home/webservices/errorPages/;
internal;
}
}
server {
if ($host = www.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name www.domain.com domain.com;
return 404; # managed by Certbot
}
server {
if ($host = api.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name api.domain.com;
return 404; # managed by Certbot
}
РЕДАКТИРОВАТЬ 2:
Я решил проблему! Я поместил это в блоки местоположения в конфигурации и работал,Прежде чем пытаться сопоставить изображения / URL, а также /images/something.png.Я не знаю, почему это не сработало.
Чтобы решить проблему, я пытаюсь сопоставить / images / url, поэтому domain.com/images/
будет заблокировано.И затем я пытаюсь сопоставить все URL, которые заканчиваются на .png .jpeg и т. Д., Чтобы позволить им.
location /images/ {
deny all;
return 404;
}
location ~* .(png|gif|ico|jpg|jpeg|svg)$ {
proxy_pass http://127.0.0.1:8080;
}