Удаление содержимого Nginx - имя файла Trim - PullRequest
0 голосов
/ 13 декабря 2018

Кратко расскажу о своей проблеме, мне нужно обрезать первые 14 символов (0-9 и -) , при загрузке файла речь идет только о заголовке Content-Disposition, как чего-то добитьсякак это?

Я хочу, чтобы файл выглядел так:

1235467890123-FileName.txt

для таких

FileName.txt

Файл конфигурации:

upstream oxide_io {
    ip_hash;

    server 127.0.0.1:xxx;
    server 127.0.0.1:xxx;
    server 127.0.0.1:xxx;
}

server {
    listen 443      ssl http2;
    listen [::]:443 ssl http2;

    server_name oxidepolska.pl;
    error_log /var/log/nginx/forum-error.log error;

    ssl ***

    proxy_hide_header X-Powered-By;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_redirect off;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    gzip ***

    location @oxide {
        proxy_pass http://oxide_io;
    }

    location ~ ^/assets/(.*) {
        root /var/www/forum/;
        try_files /build/public/$1 /public/$1 @oxide;
    }

    location /plugins/ {
        root /var/www/forum/build/public/;
        try_files $uri @oxide;
    }

    location ~ ^/public/uploads/files/(.*)$ {
        root /var/www/forum/public/uploads/files/;
        add_header Content-Disposition 'inline; filename="$1"';
    }

    location / {
       proxy_pass http://oxide_io;
    }

    error_page 502 503 /503.html;

    location = /503.html {
    root /var/www/forum/public/;
    }
}

server {
    if ($host = oxidepolska.pl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    listen [::]:80;

    server_name oxidepolska.pl;
}

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018
➜  ~ curl -I https://ddl.oxidepolska.pl/1544820059040-lootconfig.zip
HTTP/2 200 
server: nginx
date: Fri, 14 Dec 2018 21:54:56 GMT
content-type: application/zip
content-length: 7138
last-modified: Fri, 14 Dec 2018 20:40:59 GMT
etag: "5c14155b-1be2"
accept-ranges: bytes
0 голосов
/ 15 декабря 2018

Как я, наконец, понимаю, вы пытаетесь избавиться от префикса метки времени, добавляемого к файлам, загруженным на каком-то форуме?Вот еще один конфиг, добавляющий заголовок Content-Disposition вручную:

map $uri $content_disposition {
    '~/\d{13}-([^/]+)$' 'attachment; filename="$1"';
}

server {

    ...

    location <uploaded_files_location> {
        add_header Content-Disposition $content_disposition;
    }

    ...

}

Когда запрашиваемый файл не соответствует шаблону \ d {13} - (13 цифр и знак "-" перед остальной частью имени файла), переменная $ content_disposition оценивается как пустая строка, поэтому заголовок Content-Disposition не добавляется в ответ.

0 голосов
/ 15 декабря 2018

Отказ от ответственности: Этот ответ касается изменения существующего заголовка Content-Disposition, что не соответствует требованию OP.

map $upstream_http_content_disposition $content_disposition {
    default $upstream_http_content_disposition;
    '~^(.*filename="?)[-\d]{14}(.+?)("?$)' $1$2$3;
}

server {

    ...

    location @oxide {
        proxy_pass http://oxide_io;
        proxy_hide_header Content-Disposition;
        add_header Content-Disposition $content_disposition;
    }

    ...

    location / {
        proxy_pass http://oxide_io;
        proxy_hide_header Content-Disposition;
        add_header Content-Disposition $content_disposition;
    }

    ...

}

(при условии, что первые 14 символов могут быть только 0-9и '-')

...