내 서버에는 다음과 같은 폴더 계층 구조가 있습니다.
/var/images/d/d8/d82fa6c3eed/image.png
디렉터리 구조는 MD5 해시에서 생성되고 하위 폴더로 구분됩니다.
Nginx를 사용하여 웹 사용자에게 이미지를 제공하고 싶지만 디렉터리 구조를 노출하고 싶지 않습니다. 예를 들어, 나는~ 아니다다음과 같은 파일을 제공하고 싶습니다.
http://domain.tld/d/d8/d82fa6c3eed/image.png
나는 다음과 같은 것을 제공하고 싶습니다 :
http://domain.tld/b/4324re3fg34f6td/image.png
또한 nginx secure link
모듈을 사용하고 있지만 이미지를 얻으려면 다음과 같이 디렉터리를 지정해야 합니다.
http://domain.tld/b/<secure link MD5 hash>/path/to/file.png
다음과 같이 다시 작성됩니다.
http://domain.tld/images/path/to/file.png?md5=<secure link md5>
파일을 가져오기 위해 파일 시스템의 실제 특정 디렉터리 경로를 지정하고 싶지 않습니다. 나는 다음과 같은 내용을 생각하고 있었습니다.
- 클라이언트는 파일의 디렉터리 경로를 나타내는 일종의 MD5 값을 보낼 수 있으며 NGINX는 / 모든 N 문자를 삽입합니다. 이것이 가능한가?
- base64로 인코딩된 디렉터리 경로를 보내고 NGINX가 이를 디코딩하여 내부적으로 그곳으로 리디렉션하도록 합니다. 이?
- 아마도 openresty 모듈과 같은 추가 모듈을 사용할 수 있을까요?
이걸 이룰 수 있을까..?
내 nginx 구성:
server {
..
root /var/www/html;
..
location /b/ {
rewrite ^/b/([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_\-]+)/(.*)$ /images/$2/$3?md5=$1 last;
}
location /images/ {
internal;
secure_link $arg_md5;
secure_link_md5 '$uri mysecretkey';
if($secure_link = "") { return 404; }
if($secure_link = "0") { return 410; }
}
}
답변1
나는 사용하지 않았기 secure_link
때문에 귀하의 제안 중 해당 부분에 대해 언급할 수 없습니다. 그러나 구성의 명백한 오류는 rewrite...last
다시 작성된 URI가 블록에 의해 처리되기를 원하는 경우 사용해야 한다는 것입니다 location /images/
. 접미사 break
는 URI가 동일한 위치 내에서 처리되도록 합니다.
보다이 문서자세한 내용은.