NGINX에서 템플릿 .html 파일을 사용하여 이미지 표시

NGINX에서 템플릿 .html 파일을 사용하여 이미지 표시

저는 nginx를 사용하여 웹사이트 서버를 실행하고 있습니다. 저는 현재 제 웹사이트의 HTML 파일 전반에 걸쳐 공통성을 갖기 위해 SSI(Server Side Contains)를 사용하고 있는데 현재는 잘 작동하고 있습니다. 이제 나는 사진이 디렉토리( )에 저장되고 내 웹사이트에서 다음과 같은 방법으로 액세스할 수 있는 사진 갤러리를 갖고 /var/www/photos싶습니다 .site.com/photo/PhotoTitle.jpg/var/www/photos/PhotoTitle.jpg

지금은 이를 달성하기 위해 다음 코드를 사용하고 있습니다.

location /photo {
    root /var/www/photos;
}

이는 작동하며 예상대로 로 이동하면 의 site.com/photo/MilkyWay.jpeg이미지를 가리킵니다 /var/www/photo/MilkyWay.jpeg. 그러나 저는 이미지를 HTML 템플릿으로 표시하고 싶었기 때문에 SSI를 사용하여 이미지 데이터(제목, src, ecc)를 로드하는 photo.html이라는 파일을 제 웹사이트에 만들었습니다. html은 자체적으로 잘 작동합니다. 하지만 원하는 대로 " site.com/photo/anything.jpeg"을 (를) 가리킬 수 없었습니다 . /photo.html이상적으로는 다음과 같이 하면 됩니다.

location /photo {
    ssi on;
    set $photosrc $uri; #variable values are place holders right now
    set $phototitle $uri;
    set $photodesc "";
    alias /photo.html;
}

하지만 404 오류만 반환합니다. 나는 또한 /photo/and 를 사용해 보았지만 /photo/*그것이 어떻게 변할지는 모르겠지만 어쨌든 결과는 변하지 않았습니다.

이 일을 어떻게 해야 할까요? 이것이 NGINX의 범위를 벗어납니까? 별도의 앱에서 프록시 패스를 사용하는 것을 피하고 싶습니다. 한 페이지에만 과도하게 사용하고 html을 사용하면 제대로 작동하기 때문입니다. 그러나 나는 그 측면에 대한 제안에도 열려 있습니다.

답변1

여기 내 전체 구성이 있습니다. 그 이후로 조금 변경했으며 지금은 작동합니다.

map $request_uri $request_basename {
   ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}
server {
    listen 80;
    listen 8080;

    root /var/www/sito;
    index index.html index.htm;

    location / {
        ssi on;
    }
    location * {
        ssi on;
        try_files /$uri /$uri.html /index.html =404;
    }
    location /posts {
        proxy_pass http://127.0.0.1:2727;
        proxy_redirect  http://127.0.0.1:2727/ /;
        proxy_read_timeout 60s;

        proxy_buffering off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Port $server_port;
    }
    location /photos {
        root /var/www;
    }
    location /photo {
        ssi on;
        ssi_last_modified on;
        set $photosrc /photos/$request_basename;
        set $phototitle $request_basename;
        set $photodesc "";
        try_files /photo.html =404;
    }
}

이제 문제는 EXIF ​​데이터에서 캡처 날짜나 제목과 같은 정보를 검색해야 한다는 것입니다. 하지만 이는 이 질문의 범위를 벗어나므로 지금은 이 문제를 해결된 것으로 표시하고 계속 진행하겠습니다.

관련 정보