我试图理解为什么几乎相同的nginx / HttpUploadProgressModule配置在我的本地Ubuntu下工作,而不是在Linode服务器上。
长话短说:nginx是从源代码配置的,以包含HttpUploadProgressModule模块支持((http://wiki.nginx.org/HttpUploadProgressModule#Installation,https://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
比较,这使我无法到目前为止搜索谷歌:
答案 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;
}
相同的含义,但更基本的语法。 如果这没有帮助,则需要进行更多调查。