バージョン0.8.50以降、Nginxのsecure_linkモジュールは、リンクを偽造から保護する点で大幅に改善されています。 奇妙なことに、新しい機能はまだ公式ドキュメントに反映されていません[ 
1 ]。 英語の説明はNginxコミュニティのWebサイト[ 
2 ]にあり、これらの変更に関するSysoyevの説明[ 
3 ]にもあります。 安全なリンクを生成するためのPHPコードは、nginxフォーラムにあります[ 
4 ]。
一般的に、イノベーションは次のようになります。 
nginx.conf:
場所〜^ / p /(?<secure> [\ w-] +、\ d +)/(?<secured_stuff>。+)$ {
      secure_link $ secure; 
      #この例では、 '$ secure' = "HASH、TIMESTAMP"
      secure_link_md5 PASSWORD $ secure_link_expires $ secure_stuff;
      # '$ secure_link_expires'は、 'secure_link' = TIMESTAMPからの10進数値を含むnginx変数です
      if($ secure_link = ""){return 403;  }#無効なリンク
      if($ secure_link == 0){return 410;  }#有効期限切れのリンク
     
      #リンクは問題ありません、ここで何かをしてください
 }
URLは次のようになります。/ p / HASH、TIMESTAMP / ANYTHING
PASSWORDシークレットパスワード
TIMESTAMPは、UNIXエポックのリンクが有効になるまでの時間です
任意のテキスト
secure_link_md5テンプレートからのbase64-URL [ 
5 ] md5ハッシュにエンコードされたHASH(この例では$ secured_stuff = ANYTHING)。 base64の後の文字「=」は省略可能
Nginxには、md5の量を計算する際にいくつかの暗黙のニュアンスがあります。
1. URLからカウントするための文字列($ secured_stuff)は、元の形式のURLエンコードからデコードされます
2. base64でエンコードする場合は、md5ハッシュをバイナリ形式で送信する必要があります
PHPのコードは次のようになります。
$time = time() + EXPIRE_TTL;  
引数とCookieを使用して、ハッシュと時間を渡すこともできます。
ビューURL用
  http://example.com/p/files/top_secret.pdf?st=PIrEk4JX5gJPTGmvqJG41g&e=1324527723 
stは、PASSWORD、URI、および引数
eからのハッシュです
場所を見る
 
場所/ p / {
      secure_link $ arg_st、$ arg_e;  #これは、関連するURI部分と一致する必要があります 
      secure_link_md5 PASSWORD $ uri $ arg_e;  #PASSWORDは秘密トークンです
      ....
 }
推測するのは難しくありません。ハッシュを作成するときに、クライアントのIPアドレスを使用できます。
参照:
[1] 
sysoev.ru/nginx/docs/http/ngx_http_secure_link_module.html[2] 
wiki.nginx.org/HttpSecureLinkModule[3] 
nginx.org/pipermail/nginx/2010-September/022324.html[4] forum.nginx.org/read.php?21、126363,128324#msg-128324
[5] 
en.wikipedia.org/wiki/Base64#URL_applications