414 Request-URI Too Large

浏览器报错:414 Request-URI Too Large
在nginx中追加2句:
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

查看tomcat日志中也报错:
java.lang.IllegalArgumentException: Request header is too large

在tomcat配置Connector段中追加一个参数 maxHttpHeaderSize
<Connector xxx maxHttpHeaderSize =”512000″/>
以字节为单位,默认是4096字节也就是4k,这里改为跟nginx一致,512k。

重启tomcat、nginx,但是 没! 生! 效!

根本原因在于,浏览器中操作时要批量删除一些数据,这些数据的id传递到后台是通过get方式传输,但是get传输是有长度限制,具体多长没查。
让开发改为post请求即可。

评论关闭

WebDriverException: Message: unknown error: call function result missing ‘value’

python + selenium + chrome 模拟操作

WebDriverException: Message: unknown error: call function result missing ‘value’

出现此错误一般是chrome浏览器版本更新了,但是chromeDriver的版本过低导致。升级chromeDriver版本即可解决。

chromeDriver下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads
更新原先 chromedriver.exe 文件,我这里更新 C:\Windows\System32\chromedriver.exe 下再次运行解决。

评论关闭

etcd+confd+nginx实现服务注册及自动发现

etcd:etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。
confd:confd是一个配置管理工具。通过查询etcd,结合配置模板引擎生成正式配置文件,同时具备定期探测机制(根据参数手动指定间隔秒数)来生成新的配置,配置变更自动重载。

# 安装 etcd 单机版,直接github下载二进制版本即可运行。

nohup etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 > etcd.log &

# 安装 confd 直接github下载二进制版
# 创建配置文件目录及模板目录

mkdir -p /etc/confd/{conf.d,templates}

# 配置文件内容,注意后缀名

[root@localhost confd]# cat conf.d/test2.toml
[template]
src = "nginx2.conf.tpl"
dest = "/tmp/nginx2.conf"
keys = [
 "/myapp/web/nginx2/user",
 "/myapp/web/nginx2/root",
 "/myapp/web/nginx2/upstream"
]

check_cmd = "/usr/sbin/nginx -t -c {{.dest}}"
reload_cmd = "/usr/sbin/nginx -s reload"

如果有多个,可以写多个 [template]

注释:
src 模板文件路径
dest 生成的配置文件路径
keys 去etcd抓取的key
check_cmd 可以检测配置文件是否有问题
reload_cmd 是检测成功才执行的命令

# 模板文件内容

aaa
bbb
ccc
user = {{getv "/myapp/web/nginx2/user"}}
root = {{getv "/myapp/web/nginx2/root"}}
ddd
eee

upstream aaa {
 {{range getvs "/myapp/web/nginx2/upstream/*"}}
 server {{.}}
 {{end}}
}

#这里随便写了点东西测试效果
这样通过读src的模板路径,生成到dest路径下,根据定义的keys去etcd抓取回来后,赋值给模板中。
可以看到有getv和getvs,前面是抓取单个key,getvs是批量抓取,根据定义的前缀(key的前缀)循环写入模板。(比如nginx的upstream会用到多个server)

# 往 etcd 中添加key

etcdctl set /myapp/web/nginx2/user www
etcdctl set /myapp/web/nginx2/root /home/www2
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.1:80
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.2:80
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.3:80

# 运行 confd ,每隔1秒抓取一次etcd

confd -interval=1 -backend etcd -node http://192.168.10.64:2379

# 运行 confd ,单次

confd -onetime -backend etcd -node http://192.168.10.64:2379

# 查看生成结果

[root@localhost ~]# cat /tmp/nginx2.conf
aaa
bbb
ccc
user = www
root = /home/www2
ddd
eee

upstream aaa {

 server 1.1.1.2:80

 server 1.1.1.3:80

 server 1.1.1.3:80

}

这样就自动生成想要的配置文件了。

评论关闭