small issue about Nginx upload module
Roman Vasilyev
roman.vasilyev на yousendit.com
Пт Сен 23 23:20:17 UTC 2011
Наткнулся на достаточно неприятное поведение модуля.
При upload выдается нотификация из разряда:
HTTP/1.1 200 OK
Server: nginx/1.1.4
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
в которой невозможно упавлять заголовками.
тоесть Access-Control-Allow-Origin * выставить невозможно.
Поскольку HTML5 работает crossdomain то без этого заголовка все идет прахом.
Прилагаю пример конфига
location / {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'POST, OPTIONS';
add_header Access-Control-Allow-Headers
'X-Content-Range,Session-ID,Content-Type,Content-Disposition';
return 200;
}
add_header Access-Control-Allow-Origin *;
upload_resumable on;
upload_pass /uwsgi/blah;
upload_store /usr/share/nginx/;
}
захардкодил пока этот заголовок прямо в ответ сервера, хотя конечно это
не дело, на всякий случай вкладываю патч того безобразия что я сделал, и
всетаки хотелось бы получить более верное направление как это лучше решить.
=============================================
[root на pocsto01 nginx-1.1.4]# cat 123.patch
diff -Naur nginx_upload_module-2.2.0/ngx_http_upload_module.c
nginx_upload_module-2.2.0.new/ngx_http_upload_module.c
--- nginx_upload_module-2.2.0/ngx_http_upload_module.c 2010-09-27
11:54:15.000000000 -0700
+++ nginx_upload_module-2.2.0.new/ngx_http_upload_module.c 2011-09-23
16:03:20.000000000 -0700
@@ -771,6 +771,13 @@
ngx_str_t dummy = ngx_string("<ngx_upload_module_dummy>");
ngx_table_elt_t *h;
+ h = ngx_list_push(&r->headers_out.headers);
+ if (h == NULL) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
+ h->hash = 1;
+ ngx_str_set(&h->key, "Access-Control-Allow-Origin");
+ ngx_str_set(&h->value, "*");
if(ctx->prevent_output) {
r->headers_out.status = NGX_HTTP_CREATED;
Подробная информация о списке рассылки nginx-ru