/etc/nginx/sites-enabled/example.com中的未知指令“”+ HttpUploadProgressModule

时间:2012-12-22 23:15:46

标签: nginx

我试图理解为什么几乎相同的nginx / HttpUploadProgressModule配置在我的本地Ubuntu下工作,而不是在Linode服务器上。

长话短说:nginx是从源代码配置的,以包含HttpUploadProgressModule模块支持((http://wiki.nginx.org/HttpUploadProgressModule#Installationhttps://github.com/masterzen/nginx-upload-progress-module

使用相同的1.2.4 nginx,在本地和服务器上使用相同的虚拟主机配置。现在我在服务器上重新加载nginx时遇到错误:

Restarting nginx: nginx: [emerg] unknown directive "  " in /etc/nginx/sites-enabled/example.com:12
location ~ (?<upload_form_uri>.*)/x-progress-id:(?<upload_id>\d*) {
#Line 12 below #
rewrite ^ $upload_form_uri?X-Progress-ID=$upload_id; 
# Line 12 above #
}

但它在本地工作得很好。以下是nginx-V和ldd /usr/sbin/nginx比较,这使我无法到目前为止搜索谷歌:

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

显然会导致nginx配置解析器无法正常工作。

带有命名反向引用的正则表达式引起了我的注意。 Nginx使用PCRE库来解析正则表达式,因此这应该是有效的语法

请参阅此内容以了解捕获组和命名/未命名的反向引用 http://regular-expressions.mobi/named.html

试试这个

location ~ (.*)/x-progress-id:([0-9]+) {
    set $upload_form_uri $1;
    set $progress_id $2;
    rewrite .* $upload_form_uri?X-Progress-ID=$progress_id;
}

相同的含义,但更基本的语法。 如果这没有帮助,则需要进行更多调查。