WildFly 10:通过域名无法上传1MB以上文件,求解决方案
解决PrimeFaces + WildFly 10 域名访问大文件上传失败问题
看起来你遇到的问题是域名访问时大文件上传受限,但localhost正常,结合你用PrimeFaces和WildFly10的场景,大概率是以下几个环节的限制没配置到位,我帮你一步步梳理排查:
1. 检查PrimeFaces自身的上传限制
PrimeFaces的p:fileUpload组件有自己的大小限制,哪怕服务器端放开了,组件层面也可能拦着:
- 如果是PrimeFaces 5.x及之前的
commons-fileupload模式,需要在web.xml里添加如下配置,调整大小:<filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> <init-param> <param-name>maxFileSize</param-name> <param-value>134217728</param-value> <!-- 128MB,设成比12MB大的数值即可 --> </init-param> <init-param> <param-name>maxRequestSize</param-name> <param-value>134217728</param-value> </init-param> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> - 如果是PrimeFaces 6+的
native模式(依赖Servlet 3.0+),则需要在web.xml的FacesServlet配置里添加multipart参数:
同时别忘了检查你的<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> <multipart-config> <max-file-size>134217728</max-file-size> <max-request-size>134217728</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config> </servlet>p:fileUpload标签,别手动设置过小的sizeLimit属性,比如:<p:fileUpload sizeLimit="134217728" ... /> <!-- 要么和全局配置一致,要么去掉用默认 -->
2. 确认WildFly的Undertow配置是否正确
你说改了standalone.xml没效果,可能是改的位置不对。WildFly10用Undertow作为web服务器,要确保两个关键配置点:
打开standalone/configuration/standalone.xml,找到<subsystem xmlns="urn:jboss:domain:undertow:3.1">节点:
- 检查HTTP/HTTPS listener的
max-post-size属性:<http-listener name="default" socket-binding="http" redirect-socket="https" max-post-size="134217728"/> - 检查Servlet容器的multipart配置:
这里的数值都是字节数,12MB对应12582912字节,设成128MB足够覆盖需求,改完后一定要重启WildFly生效。<servlet-container name="default"> <jsp-config/> <websockets/> <multipart-config max-file-size="134217728" max-request-size="134217728" file-size-threshold="0"/> </servlet-container>
3. 排查域名访问的反向代理限制
如果你的www.xyz.com是通过反向代理(比如Nginx、Apache)指向WildFly的,那代理服务器本身也会有文件大小限制——这很可能是你遇到问题的核心:localhost直接访问跳过了代理,所以大文件能传;域名走代理就被拦了。
- Nginx:在站点配置文件或
nginx.conf里添加client_max_body_size 128M;,可以放在http、server或location块里,然后重启Nginx。 - Apache:在虚拟主机配置或
.htaccess里添加LimitRequestBody 134217728(字节数),或者设为0表示无限制,然后重启Apache。
4. 验证配置是否生效
改完所有配置后,重启相关服务,然后:
- 用域名访问时,打开浏览器控制台,看上传请求的响应状态码,如果是413(Payload Too Large),说明还有限制没放开;
- 查看WildFly的
standalone/log/server.log日志,找有没有文件大小超限的错误信息,能帮你快速定位是哪个组件抛出的限制。
按照这个顺序排查,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Gopi Lal
相关产品推荐
相关产品推荐

