Upload progress module: "track_uploads" directive inside an "if" block.
Valery Kholodkov
valery+nginxen at grid.net.ru
Mon Jan 19 03:25:00 MSK 2009
It is because upload progress module's directives do not have flag which
tells nginx to allow them in if block. Patch in attachment might help.
Dave Rothlisberger wrote:
> Hi,
>
> I am using nginx as a proxy in front of a mongrel cluster running a
> rails application.
>
> I can't seem to get nginx to serve static files *and* use the upload
> progress module (I can achieve one or the other, but not both at the
> same time).
>
> For example, if I use an "if" block so that requests for static files
> aren't passed to the mongrel cluster:
>
> location / {
> ...
> if (!-f $request_filename) {
> proxy_pass http://mongrel_cluster;
> track_uploads proxied 30s;
> }
> }
>
> This gives the following error message:
>
> [emerg] 12265#0: "track_uploads" directive is not allowed here
>
> If I try, instead:
>
> location / {
> ...
> if (!-f $request_filename) {
> proxy_pass http://mongrel_cluster;
> }
> track_uploads proxied 30s;
> }
>
> I get the following error message:
>
> [emerg] 12266#0: "track_uploads" directive track_upload should be the
> last directive in the location, after either proxy_pass or fastcgi_pass
>
> If I remove the "if" condition completely:
>
> location / {
> proxy_pass http://mongrel_cluster;
> track_uploads proxied 30s;
> }
>
> That works, but then all requests are proxied to the mongrel cluster,
> even requests for static files, and even requests for the
> "maintenance.html" page which I put up (with a separate rewrite rule)
> when I want to take the mongrel cluster down for maintenance (rails
> developers will be familiar with this). The request for the
> "maintenance.html" file is sent to the mongrels, which are down,
> resulting in a "502 Bad Gateway" error. And even the request for my
> "50x.html" error page is proxied to the mongrel cluster (which is down)
> so users get the default nginx 502 error page.
>
> Does anyone know of a way around this, or a better way to configure the
> proxy_pass to avoid this issue? Any help would be *much* appreciated.
>
> My full nginx config file is pasted below.
>
> Regards,
> --Dave Rothlisberger.
>
>
> user xxx xxx;
> worker_processes 4;
>
> pid /var/run/nginx.pid;
>
> error_log logs/error.log notice;
>
> events {
> worker_connections 1024;
> }
>
> http {
> include mime.types;
> default_type application/octet-stream;
>
> upload_progress proxied 1m;
>
> # This log format is compatible with any tool like awstats
> # that can parse standard apache logs.
> log_format main '$remote_addr - $remote_user [$time_local] '
> '"$request" $status $body_bytes_sent "$http_referer" '
> '"$http_user_agen" "$http_x_forwarded_for"';
>
> sendfile on;
> tcp_nopush on;
> tcp_nodelay on;
>
> keepalive_timeout 65;
>
> gzip on;
> gzip_http_version 1.0;
> gzip_comp_level 2;
> gzip_proxied any;
> gzip_types text/plain text/html text/css application/x-javascript
> text/xml application/xml application/xml+rss
> text/javascript;
>
>
> # Load balance to mongrels
> upstream mongrel_cluster {
> server 0.0.0.0:8000;
> server 0.0.0.0:8001;
> }
>
> server {
> listen 80;
> server_name xxxx.com
> root /home/xxxx/xxxx/current/public;
> access_log /home/xxxx/xxxx/shared/log/nginx.access.log main;
> error_page 500 502 503 504 /50x.html;
> client_max_body_size 50M; # Avoid attempts to overload the server
>
> # Rewrite rule: Display maintenance page if it exists
> # (capistrano disable task creates this maintenance page)
> # BUT allow the image in the maintenance page to be displayed
> if ($request_filename ~ ^/images/) {
> break;
> }
> if (-f $document_root/system/maintenance.html) {
> rewrite ^(.*)$ /system/maintenance.html last;
> break;
> }
>
> location / {
> index index.html index.htm;
>
> location ~ ^/(images|javascripts|stylesheets)/ {
> expires 10y;
> }
>
> if (-f $request_filename) {
> break;
> }
>
> # Directly serve cached pages
> if (-f $request_filename.html) {
> rewrite (.*) $1.html break;
> }
>
> # Otherwise let mongrel handle the request
> #if (!-f $request_filename) { # Commented because of
> "track_uploads" problem
> proxy_pass http://mongrel_cluster;
> track_uploads proxied 30s;
> #}
>
> location ^~ /upload_progress {
> report_uploads proxied;
> }
> }
> }
> }
>
>
--
Regards,
Valery Kholodkov
-------------- next part --------------
A non-text attachment was scrubbed...
Name: uploadprogress_lif.patch
Type: text/x-patch
Size: 981 bytes
Desc: not available
URL: <http://nginx.org/pipermail/nginx/attachments/20090119/6bbe9ae4/attachment.bin>
More information about the nginx
mailing list