Есть у сервера nginx такой замечательный механизм - секретные ссылки. Позволяет генерить ссылку, активную только в рамках сессии/ip пользователя. И делается в два счета и пользы много. Для этого собирается отдельный модуль secure_links и настраивается он в конфиге так: location ~ ^/mem/(?<secure>[\w-]+)/(?<time>\d+)/(?<ureq>.+)$ { secure_link $secure,$time; secure_link_md5 PASSWORD$ureq$time$remote_addr; if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 404; } rewrite ^/mem/(?<secure>[\w-]+)/(?<time>\d+)/(?<ureq>.+)$ /$ureq break; proxy_pass http://inner.site; } Это говорит о том, что все URL вида /mem/... будут у нас секретными-одноразовыми. Одноразовые ссылки, при этом, нужно генерить в скрипте, таким образом: <?php $mypublicurl = "cover/5557"; $secret = 'PASSWORD'; $expired = time() + 30; // ссылка будет рабочей 30 секунд $key = str_replace("=", "", strtr(base64_encode(md5($secret.$mypublicurl.$expired.getenv("REMOTE_ADDR"), TRUE)), "+/", "-_")); $old_url = "http://www.myserv.ru/$mypublicurl"; $new_url = "http://www.myserv.ru/mem/$key/$expired/$mypublicurl"; echo "OLD=$old_url<br>"; echo "NEW=$new_url"; ?> Теперь на странице можно отобразить только $new_url и эта ссылка будет валидна только для заданного IP и только 30 секунд. Прикольно, да?
Linux/Windows Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor