Задать вопрос
@MiddleClient

Как запретить прямое скачивание файлов nginx?

Облазил много, не нашел.

Пробовал location /local { deny all; return 403; }, Но тогда на самом сайте не работает скрипт. Ну, пример: вот у меня на сайте был вход в ак, а когда я прописал location /local { deny all; return 403; }, он перестал работать. Но мне нужно, чтобы скачать его нельзя было, но на сайте он работал. Вот код:
server {
    listen                  443 ssl http2;
    listen                  [::]:443 ssl http2;
    server_name             hello.ru;
    # SSL
    ssl_certificate         /etc/letsencrypt/live/hello.ru/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/hello.ru/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/hello.ru/chain.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    error_page 502 /502.html;
    location = /502.html {
        root /usr/share/nginx/html;
        internal;
    }
    location = /server.js {
        internal;
    }
    location ~* \.(js|css|html)$ {
        access_log /var/log/nginx/static.log; # Логирование для отладки
        valid_referers none blocked server_names ~\.davalka-case\.online$;
        if ($invalid_referer) {
            return 403;
        }
           # Проверяем, что запрос идёт от браузера (через User-Agent)
       if ($http_user_agent ~* (curl|wget|bot|spider)) {
            return 403;
       }
       proxy_pass http://localhost:3000;
       proxy_http_version 1.1;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection 'upgrade';
       proxy_set_header Host $host;
       proxy_cache_bypass $http_upgrade;
    }

    # reverse proxy
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

}

# subdomains redirect
server {
    listen                  443 ssl http2;
    listen                  [::]:443 ssl http2;
    server_name             *.hello.ru;
    # SSL
    ssl_certificate         /etc/letsencrypt/live/hello.ru/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/hello.ru/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/hello.ru/chain.pem;
    return                  301 https://hello.ru$request_uri;
}

# HTTP redirect
server {
    listen      80;
    listen      [::]:80;
    server_name .hello.ru;

    location / {
        return 301 https://hello.ru$request_uri;
    }
}

(я вот что то пробовал поменять не помогло)
Apache нет, только NGINX и node.
  • Вопрос задан
  • 51 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Серверная часть приложения размещается в отдельном каталоге с ограниченными правами, а не в каталоге статических файлов, которые отдаются веб-сервером. Традиционно для бэкенда на сервере создаётся отдельный пользователь, от имени которого запускается NodeJS как сервис, а в его домашнем каталоге или в другом каталоге с ограниченными правами и размещается код бэкенда. Второй случай используется, когда доступ к данному каталогу нужен другим приложениям/сервисам. Например системе доставки и развёртывания.
Ответ написан
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Когда определитесь, чем "скачивание" отличается от "открывается на сайте" - добавьте это условие в конфиг, и будет вам счастье.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы