Nginx + tomcat 代理linux下出现 访问某些相对路径upstream sent invalid header while reading response header from upstream

Mr.寂寞 发布于 2014/11/05 18:37
阅读 2K+
收藏 0

ERROR日志:

2014/11/05 18:27:26 [error] 9280#3304: *143 upstream sent invalid header while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /zxoa/servlet/DisplayChart?filename=jfreechart-3025196835529911988.png HTTP/1.1", upstream: "http://192.168.99.251:8080/zxoa/servlet/DisplayChart?filename=jfreechart-3025196835529911988.png", host: "127.0.0.1:9999", referrer: "http://127.0.0.1:9999/zxoa/statistics/tot_agent_hw.jsp?type=result&srtTime=2014-05-01+00%3A00%3A00&endTime=2014-05-30+23%3A59%3A59&agent_ids=&agent_names=&r_iSec=0&r_mode=0&r_call_type=2"

我在 192.168.99.251 (linux服务器 )测试服务器上部署tomcat项目,在本地使用nginx访问。报表图无法访问。出现以上错误。但是奇怪的是,我在windows 下部署的tomcat项目,在本地使用nginx访问,报表图又能正常显示。求大神,谁有遇到类似的问题?

以下为我的nginx配置:

#user  nobody;
worker_processes  1;


#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream localhost {     
           server 192.168.99.251:8080; 
           ip_hash; 
     }
    server {
        listen       9999;
        server_name  localhost;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        ignore_invalid_headers on; 
        location ~* software/(.*).*\.(jpg|rar)
        {
            expires 21d;
            root d:/temp/;
            access_log d:/temp/soft.3g.cn_nginx_s3gd-205.log;
            proxy_store on;
            proxy_store_access user:rw group:rw all:rw;
            proxy_temp_path            d:/temp/;
            proxy_redirect            off;
            proxy_set_header        Host 112.25.10.140;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size    10m;
            client_body_buffer_size 1280k;
            proxy_connect_timeout   900;
            proxy_send_timeout      900;
            proxy_read_timeout      900;
            proxy_buffer_size       40k;
            proxy_buffers           40 320k;
            proxy_busy_buffers_size 640k;
            proxy_temp_file_write_size 640k;
            if ( !-e $request_filename)
            {
                 proxy_pass  http://192.168.99.251:8080;


            }
        }


      location / {  

            root html;  
            index index.html index.htm;  
            #此处的 http://localhost与upstream localhost对应  
            proxy_pass  http://localhost;  
 
            proxy_redirect off;  
            proxy_set_header Host $host;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  
            client_max_body_size   10m;   
            client_body_buffer_size  128k;  
            proxy_connect_timeout  100;  
            proxy_send_timeout   100;  
            proxy_read_timeout 100;  
            proxy_buffer_size 4k;  
            proxy_buffers  4 32k;  
            proxy_busy_buffers_size 64k;  
            proxy_temp_file_write_size  64k;  
        }  


        #error_page  404              /404.html;


        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


        
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}


        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}


        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }




    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;


    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}




    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;


    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;


    #    ssl_session_timeout  5m;


    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;


    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


}



加载中
0
M
Mr.寂寞
有碰到过相同问题的大神么?求指点啊
0
wangma
wangma
莫非文件没有权限访问?
M
Mr.寂寞
不做负载的时候,直接访问是可以的。还有项目在 windows下部署也是可以的
0
winnie_tour
winnie_tour
           root d:/temp/;

            access_log d:/temp/soft.3g.cn_nginx_s3gd-205.l你确定linux服务器也是这个路径?还有就一台机器为啥还负载均衡。。

M
Mr.寂寞
root d:/temp/; access_log d:/temp/soft.3g.cn_nginx_s3gd-205.l 这块只是日志吧,应该对整体配置也没什么影响才对。我现在的问题是 负载 windows底下部署的tomcat是能正常看到报表图片。负载linux底下的tomcat就不行了.
M
Mr.寂寞
这个配置我是在windows底下测试的。生产系统是要做负载均衡的。
0
M
Mr.寂寞
没有人碰到过相同问题吗?
0
winnie_tour
winnie_tour
access_log是访问日志,但是上面那个root地址按照你的配置是指后缀为jpg和rar的请求会直接走nginx而不走tomcat,继而访问root地址里的文件
M
Mr.寂寞
那是要直接去掉吗?还是说要怎样修改
0
M
Mr.寂寞

引用来自“winnie_tour”的评论

access_log是访问日志,但是上面那个root地址按照你的配置是指后缀为jpg和rar的请求会直接走nginx而不走tomcat,继而访问root地址里的文件

access日志是这样的:

127.0.0.1 - - [06/Nov/2014:09:35:57 +0800] "GET /zxoa/servlet/DisplayChart?filename=jfreechart-7545045162690926758.png HTTP/1.1" 502 537 "http://127.0.0.1:9999/zxoa/statistics/tot_agent_hw.jsp?type=result&srtTime=2014-05-01+00%3A00%3A00&endTime=2014-05-31+23%3A59%3A59&agent_ids=&agent_names=&r_iSec=0&r_mode=0&r_call_type=2" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"


0
M
Mr.寂寞
@红薯  老大..求帮助
返回顶部
顶部