Nginx caching no header content-length

Hi,

I am using nginx(caching server) in front my tomcat. My tomcat is
serving
header(content-length). But my nginx is not serving header
content-length.

However, i can put that header in my config with some static value then
it
will serve. But, in my case, the content length is coming from tomcat
server.

Could anybody please help me here.

my config file

location /comet {

    chunked_transfer_encoding off;
    proxy_http_version 1.1;
    proxy_buffering on;

    proxy_pass http://tomcat:8080/xxxx

        proxy_cache my_cache;

        # Adding a header to see the cache status in the browser
        add_header X-Cache-Status $upstream_cache_status;

        proxy_cache_key "$scheme$request_uri $http_x_seneca_uid";
        proxy_cache_min_uses 1;
        proxy_cache_valid 200 302 120m;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout invalid_header http_500

http_502 http_503 http_504;

      }

==============>

My problem:- i have to pass content-header to my client. Could any body
please help me here

Hello!

On Wed, Mar 02, 2016 at 09:58:26PM +0530, Vikas Parashar wrote:

I am using nginx(caching server) in front my tomcat. My tomcat is serving
header(content-length). But my nginx is not serving header content-length.

However, i can put that header in my config with some static value then it
will serve. But, in my case, the content length is coming from tomcat
server.

The “Content-Length” header is expected to be automatically
removed by nginx if it does some processing on the response body
and the length can be changed during processing. In particular,
this includes the following cases:

  • the response is gzipped (“gzip on”);
  • SSI is enabled;
  • sub_filter is enabled.

Various 3rd party modules can also remove Content-Length.

If you want to preserve Content-Length, you should identify which
modules remove Content-Length in your particular configuration and
switch them off.

[…]

    chunked_transfer_encoding off;

Note: this directive in your config prevents nginx from using
“Transfer-Encoding: chunked” to indicate response length. As a
result nginx won’t be able to maintain persistent connections with
clients when Content-Length isn’t known in advance.

Unless you’ve added this directive to resolve specific problems
with broken clients and you know for sure you need it, you may
want to remove this directive from your configuration.


Maxim D.
http://nginx.org/

Thanks for your promot response.

location /xxxxx {

error_log /var/log/nginx/contenttroubleshooterror.log debug;
#chunked_transfer_encoding off;
#proxy_http_version 1.1;
#proxy_buffering on;
#proxy_pass_header Content-Length;

proxy_pass http://tomcat:8080/xxxxx;

proxy_cache my_cache;

Adding a header to see the cache status in the browser

add_header X-Cache-Status $upstream_cache_status;

sub_filter_last_modified on;

#add_header ‘Content-Length’ $upstream_http_content_length;
#add_header ‘Content-Length’ 12312;

proxy_cache_key “$scheme$request_uri $http_x_seneca_uid”;
proxy_cache_min_uses 1;
proxy_cache_valid 200 302 120m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout invalid_header http_500 http_502
http_503 http_504;
}

don’t know how to do it. Could you please let me know, how to add
header
forcefully.
like add_header ‘Content-Length’ $upstream_http_content_length;

somehow,

add_header ‘Content-Length’ 12312312

Static value is working fine. But at the moment, i replaced it from
upstream_http_content_length

it did not work. Any Luck

Hello!

On Wed, Mar 02, 2016 at 10:33:34PM +0530, Vikas Parashar wrote:

[…]

don’t know how to do it.

Check your configuration for any modules which are expected to
change content. Disable them (comment out relevant directives out
or switch off in a particular location).

In particular, check for the following directives:

  • ssi;
  • sub_filter;
  • gzip, gunzip;
  • add_before_body, add_after_body.

More details can be found here:

http://nginx.org/en/docs/http/ngx_http_ssi_module.html
http://nginx.org/en/docs/http/ngx_http_sub_module.html
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
http://nginx.org/en/docs/http/ngx_http_guzip_module.html
http://nginx.org/en/docs/http/ngx_http_addition_module.html

Could you please let me know, how to add header
forcefully.
like add_header ‘Content-Length’ $upstream_http_content_length;

somehow,

add_header ‘Content-Length’ 12312312

Static value is working fine. But at the moment, i replaced it from
upstream_http_content_length

You shouldn’t try to add Content-Length manually. This is very
likely to break things completely.


Maxim D.
http://nginx.org/