解析不了 session_sticky; 这样命令
netblack opened this issue · 2 comments
nginx config file :
upstream xx.com_backend{
server 10.193.2.2:9061 weight=1 max_fails=2 fail_timeout=30s;
server 10.193.2.1:9061 weight=1 max_fails=2 fail_timeout=30s;
session_sticky;
}
server {
listen 80;
location / {
set $xlocation 'test';
proxy_pass http://xx.com_backend;
}
}
import nginx
c = nginx.loadf('/tmp/site.conf')
Traceback (most recent call last):
File "", line 1, in
File "/home/wangjifeng/.pyenv/versions/2.7.12/lib/python2.7/site-packages/nginx.py", line 530, in loadf
return load(f)
File "/home/wangjifeng/.pyenv/versions/2.7.12/lib/python2.7/site-packages/nginx.py", line 520, in load
return loads(fobj.read())
File "/home/wangjifeng/.pyenv/versions/2.7.12/lib/python2.7/site-packages/nginx.py", line 469, in loads
if isinstance(lopen[0], Container):
IndexError: list index out of range
You can try using this function instead of loadf. It returns the object 'conf' back.
def Read(configPath):
d = nginx.Conf()
brac = []
with open(configPath) as f:
content = f.readlines()
for line in content:
m = re.compile(r'^\s*events\s*{', re.S).match(line)
if m:
e = nginx.Http()
brac.insert(len(brac), e)
m = re.compile(r'^\s*http\s*{', re.S).match(line)
if m:
h = nginx.Http()
brac.insert(len(brac), h)
m = re.compile(r'^\s*server\s*{', re.S).match(line)
if m:
s = nginx.Server(m.group(0))
brac.insert(len(brac), s)
m = re.compile(r'^\s*location\s*(.*?\S+)\s*{', re.S).match(line)
if m:
b = nginx.Location(m.group(1))
brac.insert(len(brac), b)
m = re.compile(r'^\s*if\s*(.*?\S+)\s*{', re.S).match(line)
if m:
ifs = nginx.If(m.group(1))
brac.insert(len(brac), ifs)
m = re.compile(r'^\s*upstream\s*(.*?\S+)\s*{', re.S).match(line)
if m:
u = nginx.Upstream(m.group(1))
brac.insert(len(brac), u)
m = re.compile(r'^(\s*)#\s*(.*?)\n', re.S).match(line)
if m:
c = nginx.Comment(m.group(2), inline='\n' not in m.group(1))
if brac:
(brac[-1]).add(c)
else:
d.add(c)
m = re.compile(r'^\s*}', re.S).search(line)
if m:
c = brac[-1]
brac.pop()
if brac:
(brac[-1]).add(c)
else:
d.add(c)
key_with_quoted = r'^\s*(\S*?)\s*"([^"]+)";?|\'([^\']+)\';?|\\S+;?'
key_wo_quoted = r'^\s*([a-zA-Z0-9-_]+?)\s+(.+?);'
m1 = re.compile(key_with_quoted, re.S).match(line)
m2 = re.compile(key_wo_quoted, re.S).match(line)
if m1 and m2:
if m1.start() <= m2.start():
m = m1
else:
m = m2
else:
m = m1 or m2
if m:
k = nginx.Key(m.group(1), m.group(2))
if brac:
(brac[-1]).add(k)
else:
d.add(k)
m = re.compile(r'^\s*(\S+);', re.S).match(line)
if m:
k = nginx.Key(m.group(1), '')
if brac:
brac[-1].add(k)
else:
d.add(k)
return d