AWS Beanstalk自定义Nginx配置部署.NET5项目报未知指令错误
AWS Beanstalk部署.NET5项目Nginx未知指令报错排查
核心报错日志
部署过程中eb-engine.log记录的错误信息如下:
2022/07/03 20:22:13.936014 [ERROR] An error occurred during execution of command [app-deploy] - [FlipProxyForDotNetCore]. Stop running the command. Error: copy proxy conf from staging failed with error validate nginx configuration failed with error Command /bin/sh -c /usr/sbin/nginx -t -c /var/proxy/staging/nginx/nginx.conf failed with error exit status 1. Stderr:nginx: [emerg] unknown directive "client_max_body_size" in /var/proxy/staging/nginx/conf.d/myconf.conf:1 nginx: configuration file /var/proxy/staging/nginx/nginx.conf test failed
自定义配置目录结构参考截图:
故障根因
你参照官方文档搭建的自定义配置目录结构、文件命名规则完全符合AWS Elastic Beanstalk的要求,故障和目录配置无关,核心原因是自定义Nginx配置文件的编码格式错误:
- 日志里未知指令名前缀的
是*UTF-8 BOM(字节顺序标记)*的乱码表现,是Windows系统下部分文本编辑器(如系统自带记事本)保存UTF-8文件时,默认在文件头部追加的3个特殊标识字节 - Nginx解析配置文件时不会自动跳过文件开头的BOM标记,会把这3个字节和后续的
client_max_body_size拼接成完整指令名,无法匹配到合法的Nginx指令,直接触发配置校验失败、部署中断。
修复步骤
- 打开本地的
myconf.conf配置文件,将文件重新保存为无BOM的UTF-8编码格式:- 使用VS Code编辑时,点击窗口右下角的编码显示区域,选择「通过编码保存」,选中
UTF-8(不要选择带BOM的UTF-8选项) - 使用Notepad++编辑时,点击顶部「编码」菜单,选择「UTF-8 无BOM编码」后保存文件
- 使用VS Code编辑时,点击窗口右下角的编码显示区域,选择「通过编码保存」,选中
- 检查
client_max_body_size指令语法,确保指令行末尾添加分号,正确写法示例:client_max_body_size 100M; - 重新打包项目上传至Elastic Beanstalk即可正常完成部署。
内容的提问来源于stack exchange,提问作者Abdul Ali
相关产品推荐
相关产品推荐

