lnamp下apk下载,IE和chrome都可以正常下载,但是firefox显示乱码。

大圈 发布于 2016/01/19 14:52
阅读 343
收藏 0

我的网站架构比较简单,所有的软件都在一台机器上。Nginx在前段监听80端口,负责做反向代理将接收到的请求转发给81端口的apache处理。Nginx可以解析php页面因为安装了php-fpm,apache也可以解析php页面,因为php作为模块加载在apache里。



这个是虚拟机(/usr/local/nginx/conf/vhosts/newdata.conf)的配置文件:


server {


    listen 80;


    server_name   newdata.downloadatoz.com;


 


       ## send request back to apache ##


    location / {


        proxy_pass  http://127.0.0.1:81;


 


        #Proxy Settings


        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;


        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;


        proxy_connect_timeout      300;


        proxy_send_timeout         300;


        proxy_read_timeout         300;


        proxy_buffer_size          512k;


        proxy_buffers              32 512k;


        proxy_busy_buffers_size    512k;

    

        proxy_temp_file_write_size 512k;


   }


}





这个是apache虚拟机(/etc/httpd/conf/vhosts/newdata.conf)的配置文件


<VirtualHost *:81 >


    DocumentRoot /home/wwwroot


    ServerName newdata.downloadatoz.com


    UseCanonicalName Off


    ErrorLog logs/newdata.downloadatoz.com_error_log


    CustomLog logs/newdata.downloadatoz.com_access_log common


    <Directory "/home/wwwroot">


    #    Options Indexes FollowSymLinks


        Options None


        AllowOverride all


        Order Allow,Deny


        Allow from all


    </Directory>


</VirtualHost>



上面就是我的架构,现在的情况是我下载这个网站下的apk时,用iechrome下载都是正常的,可以下载到apk但是用firefox下载 就是乱码了。我也试过 "IP:81/apk文件名" 来下载,这个可以正常下载。我猜测问题还是出在firefox和nginx的处理机制上。


因为出现这样的问题所以我就尝试把apache去掉了,直接用nginx作处理请求。这种情况下用三种浏览器都可以正常下载。


 


我哪里叙述的不清楚,前各位辈在跟我沟通。谢谢各位前辈。



加载中
0
eechen
eechen
对于没有在mime.types定义的文件类型(比如apk),Nginx会默认当做Content-Type: application/octet-stream来处理,用curl -I测试可见.
http {
    include       mime.types;
    default_type  application/octet-stream;
}
确定你没有设置 default_type 'text/plain'; 否则当mime.types里没有匹配时,会把未知类型的文件当做text/plain返回给浏览器.
大圈
大圈
前辈请看我下面的评论。是我自己说的,希望前辈能够指点。
0
大圈
大圈

的确没有设置default_type 'text/plain'; 但是在gzip类型里添加了有'text/plain'这一项,后来我把这个从gzip里去掉,然后就可以正常下载了。使用firefox的firebug调试可以发现服务器端(nginx)会把apk文件的传输类型识别为'text/plain'然后进行压缩,最后就出现了乱码。当我把'text/plain'从压缩类型里去掉时就可正常下载了,但是服务器端响应 请求文件的类型还是‘text/plain’。为什么在gzip里掉“text/plain”后就可以正常下载了呢?这里面的原理还是不太明白,希望前辈可以讲讲。

大圈
大圈
回复 @eechen : 这是选择需要压缩文件的类型啊。
eechen
eechen
Nginx里不是gzip on;就能打开gzip支持了吗?为什么还要配置text/plain这些东西呀?
0
大圈
大圈

引用来自“eechen”的评论

对于没有在mime.types定义的文件类型(比如apk),Nginx会默认当做Content-Type: application/octet-stream来处理,用curl -I测试可见.
http {
    include       mime.types;
    default_type  application/octet-stream;
}
确定你没有设置 default_type 'text/plain'; 否则当mime.types里没有匹配时,会把未知类型的文件当做text/plain返回给浏览器.
前辈说的虽然没解决我的问题,但是让我明白了心里很久都疑问的问题。多谢。
返回顶部
顶部