이미지를 통해 도메인을 방문하면 접속자 정보를 기록하게끔 하고 싶습니다.
예를 들어 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 |
구글링을 하면서 여러 예제들을 돌려봤지만, 어느 예제도 제대로 돌질 않네요.
댓글 2
다음 중 어떤 경우인지 파악하는 게 우선이겠네요.
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번이겠지요.
알려주신대로 해보겠습니다.