我公司的网站服务器主要是用C语言制作的Nginx模块。我们收到了一个从模块回退到PHP的任务,模块返回NGX_DECLINED,如果它无法连接某些服务,后备工作正常如果uri是主页'/',但如果网址是/ XXX / YYYY,则nginx会尝试查找root / XXX / YYY文件夹并失败。
我尝试使用带有@rewrite方法的try_files来解决这个问题,但是使用这个指令模块完全被忽略了,我只需要在模块返回NGX_DECLINED时使用try_files,我该怎么办?
这是位置配置
location ~ ^/(casas|coches|ropa|otros-anuncios)/ {
#petra is the module name
petra on;
petra_conf_file /etc/nginx/petra.cfg;
petra_tmpl_loc /var/www/vhost/htdocs/app/webroot/petra/listing;
petra_mobile_tmpl_loc /var/www/vhost/htdocs/app/webroot/petra/mobile_listing;
petra_mobile on;
custom_url off;
error_log /var/log/nginx/petra.log;
}
更多信息:
使用自定义方法解析url以使用Sphinxsearch进行搜索,如果Sphinx守护程序关闭,则返回NGX_DECLINED,如果它已启动,则会将搜索结果注入某些模板并使用ngx_http_output_filter发送缓冲区链。该模块在NGX_HTTP_CONTENT_PHASE
中调用 事先提前答案 0 :(得分:0)
您应该使用错误的nginx核心方法,而不是试图获得一个不稳定的解决方法,您应该更正您的C代码。
您需要使用ngx_parse_url代替ngx_http_map_uri_to_path - 就像。
答案 1 :(得分:0)
我以一种相当肮脏的方式解决了这个问题......
在返回NGX_DECLINED之前,我更改了请求uri,所以它指向框架index.php,这样:
void set_url_to_home(ngx_http_petra_request_t* preq)
{
preq->r->uri.len = 1;
preq->r->uri.data = (u_char*)"/";
}
/* Handler */
if(search_client_create_and_init(preq) == NGX_ERROR){
ndk_request_log_err(r, "petra_mod: unable to create sphinx search client, send the petition to php!");
set_url_to_home( preq );
return NGX_DECLINED;
}