이미지를 통해 도메인을 방문하면 접속자 정보를 기록하게끔 하고 싶습니다.

 

예를 들어 abcd.com 이라는 도메인을 가지고 있고,

abcd.com/1234.jpg 라는 주소로 접속을 하면 바로 jpg 파일을 보내주는게 아니라

내부적으로 php 파일을 불러다가 정보처리를 하고, 그 다음에 이미지를 보내려고 합니다.

 

즉, abcd.com/1234.jpg 로 접속을 하면 rewrite 설정에 의해 루트에 있는 /index.php?id=1234 이런 형태로

처리를 하도록 하고 싶습니다.

 

아래는 etc/nginx/conf.d 에 있는 default.conf 파일의 내부 모습입니다.

저 부분을 어떻게 수정해야 제가 원하는 동작이 나올까요?

저 코드는 돌려보면 404 오류만 뜹니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
    listen       80;
    server_name  localhost;
    root   /usr/share/nginx/html;
 
    location / {
        index  index.php index.html;
    rewrite ^/([^\.]+)\.png$ /index.php?id=$1 last;
    }
 
    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }
 
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}
cs

 

구글링을 하면서 여러 예제들을 돌려봤지만, 어느 예제도 제대로 돌질 않네요.

 

 

  • profile

    다음 중 어떤 경우인지 파악하는 게 우선이겠네요.

    1. rewrite가 제대로 안 되고 있는 건지

    2. fastcgi_split_path_info 때문에 경로가 꼬이는 건지

    3. 그 밑의 if 조건 때문에 404를 반환하고 있는 건지

    4. 그 밖에 다른 이유가 있는 건지

     

    index.php가 아니라 index.txt 같은 곳으로 rewrite해보면 1번인지 확인할 수 있겠지요.

    fastcgi_split_path_info를 잠깐 지워보면 2번인지 확인할 수 있겠지요.

    if 조건을 제거하거나 return 404를 다른 코드로 바꿔보면 3번인지 확인할 수 있겠지요.

    위의 세 가지 모두 해봤는데 여전히 안 된다면 4번이겠지요.

  • profile ?
    • KSH
    • 질문기여자
    답변 감사합니다.
    알려주신대로 해보겠습니다.