위치 내의 nginx if 문이 404를 반환 함


11

다음 블록

location / {
    if ($http_origin ~* (https?://[^/]*\.example\.com(:[0-9]+)?)) {
        add_header 'Access-Control-Allow-Origin' "$http_origin";
    }
    try_files $uri $uri/ /index.php?$args;
}

… 위 코드가 try_files지시문에 도달하지 않으므로 404가 발생합니다 .

  1. 이것은 nginx 의 IfIsEvil 과 관련이 있습니까?

  2. 그렇다면 http_originif 문을 사용하지 않고 테스트하는 다른 방법이 있습니까?

나는 nginx> 1.4 (1.4.6, 1.7, 1.7.8)로 이것을 시도했다.


1) 그것은 "악한 경우"예에서 온 것입니다. 2) 외부에서 사용 map하거나 사용할 수 있습니다 if.
Alexey Ten

@AlexeyTen, if위치 블록 외부에서 사용하는 방법에 대한 예를 제공 할 수 있습니까?
Eliran Malka

답변:


19

나는 사용할 것이다 map:

map $http_origin $cors_header {
    default "";
    "~^https?://[^/]+\.example\.com(:[0-9]+)?$" "$http_origin";
}

server {
    ...
    location / {
        add_header Access-Control-Allow-Origin $cors_header;
        try_files $uri $uri/ /index.php;
    }
    ...
 }

허용 된 출처가 서버마다 다르면 어떻게됩니까?
Chris Martin

3
map변수가 다른 여러 s를 사용하십시오
Alexey Ten
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.