记录一次puppet 使用apache2代理 不支持中文url问题解决

服务器系统:ubuntu16.04
配置服务:puppetmaster-passenger(3.8.5-2ubuntu0.1)

业务背景

由于业务需要发展,基于webrick 启动的http服务的puppet master已经无法满足业务需求,所以决定使用apache2 + passenger 提供puppet master服务;具体环境搭建步骤请参考:https://blog.csdn.net/weixin_46546303/article/details/140448703?spm=1001.2014.3001.5501

遇到问题

当前同步了puppet master 以前配置的environment环境的配置相关模块。为了方便配置文件的可读性,我们在.pp配置文件中加了中文注释,但是就是因为加了这些注释,导致使用client端同步配置时发生报错具体报错如下:
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not parse for environment production: invalid byte sequence in US-ASCII at /etc/puppet/environments/production/manifests/xxx/xxx.pp:1 on node xxxxx

root@xxxx:~# puppet agent  -t  
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not parse for environment production: invalid byte sequence in US-ASCII at /etc/puppet/environments/production/manifests/xxxx/xxx.pp:1 on node dg03dev80403584wq4c
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

检查了apache的相关日志,没有产生error.log,分别查看了balancer_access.log和两个后端虚拟机access.log均没有发现有用日志信息,均提示:

10.xx.xx.xx - - [17/Jul/2024:14:30:37 +0800] "POST /production/catalog/xxxxHTTP/1.1" 400 616 "-" "Ruby"
10.xx.xx.xx - - [17/Jul/2024:14:32:07 +0800] "POST /production/catalog/xxxx HTTP/1.1" 400 601 "-" "Ruby"
10.xx.xx.xx - - [17/Jul/2024:14:34:54 +0800] "POST /production/catalog/xxxx HTTP/1.1" 400 601 "-" "Ruby"

错误排查

根据报错,猜测应该是字符集的问题,所以做了以下排查,虽然以下方案最终都没有得到解决,但是也算侧面提供了下排查思路:

  • 检查相关报错文件的字符集和服务器环境的字符集
root@xxxx:~#  file     etc/puppet/environments/production/manifests/xxxx/xxx.pp              #检查文件字符集
 /etc/puppet/environments/production/manifests/xxxx/xxx.pp : UTF-8 Unicode text, with CRLF line terminators


root@xxxx:~#  locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

服务环境和文件编码格式没有问题

  • 排查puppet master 和 client
    分别在puppet master 和 client 配置[main] 中添加配置
root@xxxx:~# vim /etc/puppet/puppet.conf
[main]
.......
ENCODING = UTF-8

然后重启服务端的apache2服务,尝试了此方法无效

  • 修改cpache2.conf
    尝试修改了apache2.conf
root@xxxx:~# vim /etc/apache2/apache2.conf
AddDefaultCharset UTF-8

然后重启服务端的apache2服务,尝试了此依旧方法无效

  • 去掉中文注释
    去除报错文件中的中文后,发现报错解决。基本确定就是清单文件中文注释的问题。可以把报错模块中的请单文件中文去掉,但是这个方法显然不是最佳解决办法。

最终解决方案

偶然发现在/etc/apache2/目录下存在一个“envvars”的配置文件,在这个文件中,默然配置了“LANG=C”

root@xxxx:/etc/apache2# cat envvars |grep LANG
#export LANG=C
export LANG=en_US.UTF-8                     ##将C更换成了en_US.UTF-8
export LANG

然后重启apache2服务,问题解决

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值