我读过, 如果是邪恶的,不应该在NginXconfiguration中使用。 但是,我怎么能重写我的代码,以便我不使用if? 我想要做的是:如果有一个特殊的请求“foobar.php”和一个叫做“magicargument”的特殊参数,NginX应该调用Redis而不是php。 当redis失败时,NginX proxy_passes到PHP。 它的工作,但只有当我使用如果!
这是configuration
location ~ foobar.php$ { default_type application/json; error_page 404 = @redisfailed; if ($args = "") { return 404; } if ($arg_magicargument = false) { return 404; } set $redis_key $args; redis_pass 127.0.0.1:6379; } location @redisfailed { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; }
如果你可以控制redis应用程序,那么你可以在那里检查magicargument / other参数,并且在你的nginxconfiguration中只使用一个简单的location块,而不使用if语句。
BTW。 您的location说明与每个以foobar.php结尾的url匹配,例如http://www.example.com/nonexistingdirectory/foobar.php 。 你可能想要更具体一些,比如location = /foobar.php来处理只有根URI中foobar.php请求。