簡體   English   中英

nginx重寫安全鏈接

[英]nginx rewrite secure link

我正在嘗試重寫一個安全鏈接,這是我的Nginx conf:

    location /files/ {
        deny all;
        return 403;
    }

    # MEMBERS ONLY #####
    location /auth/ {
        secure_link $arg_h,$arg_e;
        secure_link_md5 authkey$uri$arg_e;
        if ($secure_link = "") {
            return 403;
        }
        if ($secure_link = "0") {
            return 403;
        }
        rewrite  ^/auth/(.*)$  /files/$1  break;
        add_header Content-Disposition "attachment; filename=$arg_f";
    }

如果我這樣放置下載鏈接,它的工作是:

http://13.37.13.37/auth/path/to/dir/file.zip?h=sdiouqosid&e=1337&f=the_file.zip

但是如果我打印這樣的鏈接則不會:

http://subdir.mysite.org/auth/path/to/dir/file.zip?h=sdiouqosid&e=1337&f=the_file.zip

請注意:

  • subdir.mysite.org在DNS記錄中具有“ A”重命名為13.37.13.37
  • 13.37.13.37是與mysite.org不同的服務器

也:
- http://subdir.mysite.org/path/to/something/somefile.zip的偉大工程,這只是當我使用secure_link它失敗(返回無論是403還是無法加載的ressource)。 我想這與我的url_rewrite有關。 對於這種奇怪的行為,我嘗試了很多事情,但都沒有成功。

謝謝您的幫助

編輯:
完整的nginx如下:

user www-data;
worker_processes  2;

events {
    worker_connections  1024;
}

http {

    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    #server_tokens off;

    keepalive_timeout  65;

    gzip on;
    gzip_disable "msie6";

    limit_conn_zone $binary_remote_addr zone=freeuser:10m;

    map $request_uri $request_qs {
        default '';
        ~.*\?(?P<key>.+)$ $key;
    }

    server {

        listen          80;
        server_name     localhost;
        root            /var/www;


        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            access_log off;
            add_header Cache-Control public;
        }


        location ~* \.(jpg|jpeg|gif|css|png|js|ico|swf|mp3)$ {
            expires        365d;
            access_log     off;
        }


        location /file/ {
            deny all;
            return 403;
           }


        location /auth/ {
            secure_link $arg_h,$arg_e;
            secure_link_md5 authkey$uri$arg_e$remote_addr;
            if ($secure_link = "") {
                return 403;
            }
            if ($secure_link = "0") {
                return 403;
            }
            rewrite  ^/auth/(.*)$  /file/$1  break;
            add_header Content-Disposition "attachment; filename=$arg_f";
        }


    }

}

我會說更改/files塊,因為現在邏輯上返回403是因為您只是拒絕所有。

location /files/ {
    internal;
}

對於未授權的用戶,這將返回404而不是403,不知道這是否對您有用。

我解決了編輯“反向”(主機名)的問題。
問候,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM