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;
}

…导致404,因为上述代码从未到达try_files指令,因此:

  1. 这与nginx 的IfIsEvil有关吗?

  2. 如果是,那么是否还有其他方法可以http_origin通过不使用if语句来测试?

我已经尝试使用nginx> 1.4(1.4.6,1.7,1.7.8)来进行此操作。


1)完全来自“如果是邪恶的”示例。2)您可以在场所外使用map或使用if
阿列克谢2015年

@AlexeyTen,您能否提供一个if在定位块外使用的示例?
Eliran Malka'9

Answers:


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;
    }
    ...
 }

如果每个服务器允许的来源不同,该怎么办?
克里斯·马丁

3
使用map具有不同变量的多个s
Alexey 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.