前言

HipChat是Atlassian公司的一款团队协作即时通讯工具,服务端为Linux(官方给的服务端就是一个虚拟机),在Windows、Linux、Android、IOS、Mac等平台都有客户端软件,还可以直接在PC的Web上直接聊天,对于团队协作交流需求整理的比较到位,最主要的是HipChat可以和Confluence对接讨论主题(不是有Confluence的需求个人觉得不如其他一些团队通讯软件)。

前些天接下了配置HipChat服务端的任务,但是使用了几天后发现,聊天时发送超过10M的文件就会报错:

嗯,而且给了个明显是废话的报错提示:在上传文件的时候出错了。

而官方文档上写的限制是50M。所以这里肯定是有问题的。

这里先给出最终解决方法:

1.登录linux,使用下面命令取得root权限

  1. sudo /bin/dont-blame-hipchat

2.编辑配置文件:

  1. vi /etc/nginx/includes/web-site

3.在大概120行的位置找到如下代码片段,添加并修改client_max_body_size 1024m;(原来是10M)

  1. # Coral requests
  2. location /v2 {
  3.  
  4. # Allow larger requests for import
  5. location ~ /v2/import/(.*) {
  6. client_max_body_size 1024m;
  7. rewrite ^/v2/(.*)$ /$ break;
  8. proxy_pass http://coral_servers;
  9. }
  10.  
  11. # all other Coral calls
  12. client_max_body_size 1024m;
  13. rewrite ^/v2/(.*)$ /$ break;
  14. proxy_pass http://coral_servers;
  15. }

4.执行重载参数文件命令:

  1. /opt/nginx-1.4./sbin/nginx -s reload

如果修改完成后还不行可以试着修改该文件内其他client_max_body_size参数。

如果不行那么可能是官方版本变动导致某些文件位置变动,可以参考我后面解决问题的过程。

下面说明下我解决问题的思路。

1.确定Web服务器类型

上传文件的问题是在Windows桌面版本的Hipchat上发现的,不过因为与浏览器访问的效果一致,我猜测后面一定是一个Web服务器,于是乎打开浏览器试着在聊天界面发送文件,果然是同样的报错,不过不同的是,我可以用现代浏览器的调试工具查看下请求的报错内容,于是看到:

点进去看到:

看到了nginx,没接触过nginx,不过现在网络资料一大把,很容易就可以找到其相关资料。

(注:我这里使用的是Chrome的开发者工具)

2.查找并修改配置文件

网上很容易可以搜到nginx是代理,其配置文件中的client_max_body_size字段表明了最大上传大小。故现在登录服务器

1.登录linux,使用下面命令取得root权限

  1. sudo /bin/dont-blame-hipchat

2.用命令查找nginx的配置文件:

  1. find / -name 'nginx.conf'

结果如下:

  1. /opt/atlassian/hipchat/dependencies/source/nginx-1.4./conf/nginx.conf
  2. /hipchat-scm/web/application/vendor/Elastica/test/nginx/nginx.conf
  3. /etc/nginx/conf.d/nginx.conf
  4. /etc/nginx/nginx.conf
  5. /usr/local/src/nginx-1.4./conf/nginx.conf

3.编辑配置文件

  1. vi /etc/nginx/nginx.conf

改动后如下:

  1. user www-data;
  2. worker_processes ;
  3. daemon off;
  4.  
  5. error_log /var/log/nginx/error.log;
  6. pid /var/run/nginx.pid;
  7.  
  8. events {
  9. worker_connections ;
  10. }
  11.  
  12. http {
  13. include /etc/nginx/mime.types;
  14. default_type application/octet-stream;
  15.  
  16. log_format custom '$remote_addr - $remote_user [$time_local] '
  17. '"$request" $status $body_bytes_sent '
  18. '"$http_referer" "$http_user_agent" '
  19. '"$http_x_forwarded_for" $http_x_forwarded_proto';
  20. access_log /var/log/nginx/access.log custom;
  21.  
  22. server_tokens off;
  23. sendfile on;
  24. tcp_nopush on;
  25. tcp_nodelay on;
  26.  
  27. keepalive_timeout ;
  28.  
  29. client_max_body_size 1024m;
  30.  
  31. gzip on;
  32. gzip_http_version 1.0;
  33. gzip_comp_level ;
  34. gzip_proxied any;
  35. gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  36.  
  37. proxy_buffers 16k;
  38. proxy_buffer_size 16k;
  39.  
  40. server_names_hash_bucket_size ;
  41.  
  42. include /etc/nginx/conf.d/*.conf;
  43. include /etc/nginx/sites-enabled/*;
  44. }

4.执行重载参数文件命令:

  1. /opt/nginx-1.4.2/sbin/nginx -s reload

发现并没有解决问题,重启Linux虚拟机,仍然没有解决问题,且重启后发现该配置文件里client_max_body_size又被改回10m了。于是后来又从怎么样重启后使得该配置文件不重置参数着手,实际证明这条思路是错误的。

该配置文件最下面有两个include语句,/etc/nginx/conf.d/目录为空,于是进入/etc/nginx/sites-enabled目录。发现里面有个链接文件

  1. root@hipchat:/etc/nginx/sites-enabled# cd /etc/nginx/sites-enabled/
  2. root@hipchat:/etc/nginx/sites-enabled# ls -l
  3. total
  4. lrwxrwxrwx root root Sep : -web -> /etc/nginx/sites-available/-web

于是查看文件/etc/nginx/sites-available/000-web。发现底部又是一个包含文件:

  1. ... ...
  2. server {
  3. listen default_server;
  4. more_clear_input_headers 'X-HIPCHAT-GROUP';
  5. more_clear_input_headers 'X-HIPCHAT-USER';
  6.  
  7. add_header Strict-Transport-Security "max-age=31536000";
  8.  
  9. more_clear_input_headers 'X-HIPCHAT-REQUEST';
  10. more_set_input_headers 'X-HIPCHAT-REQUEST: public';
  11.  
  12. include includes/web-site;
  13. }

于是再找includes/web-site:

  1. root@hipchat:/etc/nginx/sites-enabled# find / -name 'web-site'
  2. /etc/nginx/includes/web-site

5.打开该web-site文件,查找其中的client_max_body_size,最终发现120行附件location /v2中增加client_max_body_size配置项有效。

  1. # Coral requests
  2. location /v2 {
  3.  
  4. # Allow larger requests for import
  5. location ~ /v2/import/(.*) {
  6. client_max_body_size 1024m;
  7. rewrite ^/v2/(.*)$ /$ break;
  8. proxy_pass http://coral_servers;
  9. }
  10.  
  11. # all other Coral calls
  12. client_max_body_size 1024m;
  13. rewrite ^/v2/(.*)$ /$ break;
  14. proxy_pass http://coral_servers;
  15. }

6.改完保存后,执行以下命令重新载入配置文件。

  1. /opt/nginx-1.4./sbin/nginx -s reload

(注:nginx路径可能会有变动,如无法执行请查找其他nginx目录)。

3.总结

这样改过以后,Hipchat即可以上传50M以上文件了,当然50M也不大,但是这是官方限制,估计只有向官方反馈或者付费才能解决这个问题。

其实在使用Hipchat的时候我有点搞不清楚Hipchat在Atlassian公司的地位,因为有许多问题。除了这次遇到的,还有自带的Windows、Linux、Mac、IOS、Android等平台的客户端版本都比较老,Windows端的无法发图和文件,Android直接就连不上,最终是直接从官网下载最新的客户端包才解决问题,其他平台没有试过。(Android版本需要到Google Play商店安装)。

Hipchat算是一个小众软件,所以估计也没什么人会遇到这问题。本文除了记录该问题外,算是提供一种解决问题的思路。遇到这种网络连接类的问题,且服务端和客户端都不能看源代码的,就可以类似这样解决。即使服务器不是HTTP服务器,也可以使用wireshark这类工具来查找问题。

HipChat上传文件报未知错误解决方案的更多相关文章

  1. idea 内置tomcat jersey 跨服务器 上传文件报400错误

    报错内容 com.sun.jersey.api.client.UniformInterfaceException: PUT http://.jpg returned a response status ...

  2. 最近上传图片上传文件报413错误及仅Https下报413问题,IIS高版本的配置方案及Web.config配置全解

    IIS文件上传大小限制30M,C盘中有的IIS_schema.xml文件 C:\Windows\System32\inetsrv\config\schema\ 但是考虑到安全等问题,而且这个文件默认是 ...

  3. PHPStrom上传文件报502错误原因

    PhpStorm是一个轻量级且便捷的PHP IDE,其自身拥有apache类似的编译器,能够在无Apache的情况下运行,很适合初学PHPStrom的朋友. 但是我发现了一个问题,那就是用PHPStr ...

  4. http遇到的那些坑,iis上传文件报413错误 asp.net MVC

    话不多说,直接上解决方法. 修改配置文件  applicationHost.config  具体地址在C:\Windows\System32\inetsrv\config 按照下面的节点进行 添加&l ...

  5. idea 内置tomcat jersey 上传文件报403错误

    Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: ...

  6. Tomcat上传文件报错:returned a response status of 403 Forbidden

    出现这样的错误是没有权限对服务器进行写操作.需要在这个项目所在的tomcat中配置可写操作即可: 在tomcat的web.xml添加下面代码: <init-param><param- ...

  7. 解决wordpress上传文件出现http错误问题

    解决wordpress上传文件出现http错误问题 问题现象 今天上传约1.4m大小的gif文件到wordpress的媒体库时失败,提示http错误. 原因 由于之前一直上传图片都是可以的,所以推测最 ...

  8. Linux - xshell上传文件报错乱码

    xshell上传文件报错乱码,解决方法 rz -be 回车 下载sz  filename

  9. Azkban上传文件报错installation Failed.Error chunking

    azkaban 上传文件报错Caused by: java.sql.SQLException: The size of BLOB/TEXT data inserted in one transacti ...

随机推荐

  1. 使用Microsoft.Office.Interop.Excel.Application xlApp 生成Excel

    object filePath = @"C:\" + DateTime.Now.ToShortDateString().Replace("-", "& ...

  2. 恶心的sbt 超级慢--解决

    最近在看sbt相关的资料.发现其构建仓库是用ivy和maven 相信使用过maven的人都知道下载 jar的过程十分痛苦(因为你穷,买不起VPN) 然后我们天朝本来有开源中国的maven库,后来又突然 ...

  3. Material Design练习

    最近写了个小应用练习material design的控件使用,使用豆瓣V2 API访问豆瓣电影,程序很小,也就用了几个API而已,能够显示北美票房榜.电影排行榜,查看电影详情,以及进行电影搜索,可惜豆 ...

  4. 一个winform带你玩转rabbitMQ

    源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一.安装部署初探 二.进阶 三.api相关 安装 部署 初探 先上图 一. 安装部署 下载 rab ...

  5. 【Cocos2d-Js基础教学(6)网络层(弱联网)的封装及使用】

    谈到联网,在游戏中也是非常核心的模块,在官方Js-test中我们可以找到联网部分 的NetworkTest文件下有两个类 SocketIOTest.js(Socket 类) WebSocketTest ...

  6. Linux设备驱动剖析之Input(四)

    static void input_pass_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) ...

  7. android-tools-adb

    sudo apt-get install android-tools-adbsudo apt-get install android-tools-fastboot

  8. Gradle 脚本剪片---copy

    Gradle是以Groovy语言为基础,基于DSL语法的自动化构建工具,一个构建脚本能够包含任何Groovy语言元素,每个脚本都是UTF-8编码的文件. 6-1 Project对象API 前面我们说过 ...

  9. CRUD Operations In ASP.NET MVC 5 Using ADO.NET

    Background After awesome response of an published by me in the year 2013: Insert, Update, Delete In ...

  10. 简单设置 navgationbar(导航栏) 的 title 字体跟颜色

    NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor white ...