Как ограничить доступ к папке, но разрешить определенный файл (разрешить абсолютный путь) - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь настроить обратный прокси-сервер 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;
        }
...