python修改nginx配置文件_一个修改nginx.conf配置文件的开源工具

本文介绍了一个Python库PyNginxConfig,它允许读取、修改和删除nginx配置文件,然后保存为新的配置文件。通过示例展示了如何访问和操作nginx.conf中的各个配置项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发现一个修改nginx.conf配置文件的python开源工具,挺好用的,分享一下:

这个工具可以读取,修改以及删除nginx的配置项,然后重新生成配置文件。这其中保留了大部分原始配置文件格式,有一些会改变;所以不保证新生成的文件格式完全一致,还需要用肉眼比较一下哦。

基本用法:

from pynginxconfig import NginxConfig

nc = NginxConfig()

nc.loadf('/etc/nginx/nginx.conf')

##########################################

# operate with nc

# nc.get(...)

# nc.set(...)

# nc.append(...)

# nc.remove(...)

##########################################

nc.savef('/etc/nginx/nginx.new.conf')

下面以一个例子来说明如何具体访问nginx.conf对象。

/etc/nginx/nginx.conf

user nginx;

worker_processes 1;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;

keepalive_timeout 65;

upstream server_www1 {

server www1.com:7054;

}

server {

listen *:10000 ssl;

ssl_certificate /etc/nginx/server.pem;

ssl_certificate_key /etc/nginx/serverkey.pem;

location / {

auth_request /auth-proxy;

error_page 401 403 /404.html;

proxy_pass http://server_www1/;

}

location = /auth-proxy {

internal;

proxy_pass http://www:8000;

proxy_set_header X-Original-URI $request_uri;

proxy_pass_request_body off;

}

}

}

stream {

upstream server_www2 {

server www2.com:9090;

}

server {

listen *:10001 ssl;

ssl_certificate /etc/nginx/server.pem;

ssl_certificate_key /etc/nginx/serverkey.pem;

proxy_pass server_www2;

}

upstream server_www3 {

server www3.com:8080;

}

server {

listen *:10002 ssl;

ssl_certificate /etc/nginx/server.pem;

ssl_certificate_key /etc/nginx/serverkey.pem;

proxy_pass server_www3;

}

}

读取

block = nc.get(('error_log'))

print "BLOCK=", block

# BLOCK=('error_log', '/var/log/nginx/error.log warn')

data = nc.get_value(block)

print "DATA=", data

# DATA=/var/log/nginx/error.log warn

block = nc.get(('events',))

print "BLOCK=",block

# BLOCK={'value': [('worker_connections', '1024')], 'name': 'events', 'param': ''}

data = nc.get_value(block)

print "DATA=",data

# DATA=[('worker_connections', '1024')]

print "DATA=",data[0]

# DATA=('worker_connections', '1024')

print "DATA=",data[0][0]

# DATA=worker_connections

block = nc.get([('http',), ('access_log')])

print "BLOCK=",block

# BLOCK=('access_log', '/var/log/nginx/access.log main')

data = nc.get_value(block)

print "DATA=",data

# DATA=/var/log/nginx/access.log main

block = nc.get([('stream',)])

print "BLOCK=",block

# BLOCK=

# {

# 'value': [

# {'value': [('server', 'www2.com:9090')], 'name': 'upstream', 'param': 'server_www2'},

# {'value': [('listen', '*:10001 ssl'), ('ssl_certificate', '/etc/nginx/server.pem'), ('ssl_certificate_key', '/etc/nginx/serverkey.pem'), ('proxy_pass', 'server_www2')], 'name': 'server', 'param': ''},

# {'value': [('server', 'www3.com:8080')], 'name': 'upstream', 'param': 'server_www3'},

# {'value': [('listen', '*:10002 ssl'), ('ssl_certificate', '/etc/nginx/server.pem'), ('ssl_certificate_key', '/etc/nginx/serverkey.pem'), ('proxy_pass', 'server_www3')], 'name': 'server', 'param': ''}

# ],

# 'name': 'stream',

# 'param': ''

#}

data = nc.get_value(block)

print "DATA=",data

#DATA=

#[

# {'value': [('server', 'www2.com:9090')], 'name': 'upstream', 'param': 'server_www2'},

# {'value': [('listen', '*:10001 ssl'), ('ssl_certificate', '/etc/nginx/server.pem'), ('ssl_certificate_key', '/etc/nginx/serverkey.pem'), ('proxy_pass', 'server_www2')], 'name': 'server', 'param': ''},

# {'value': [('server', 'www3.com:8080')], 'name': 'upstream', 'param': 'server_www3'},

# {'value': [('listen', '*:10002 ssl'), ('ssl_certificate', '/etc/nginx/server.pem'), ('ssl_certificate_key', '/etc/nginx/serverkey.pem'), ('proxy_pass', 'server_www3')], 'name': 'server', 'param': ''}

#]

block = nc.get([('stream',), ('server',), ])

print "BLOCK=",block

# BLOCK={'value': [('listen', '*:10001 ssl'), ('ssl_certificate', '/etc/nginx/server.pem'), ('ssl_certificate_key', '/etc/nginx/serverkey.pem'), ('proxy_pass', 'server_www2')], 'name': 'server', 'param': ''}

data = nc.get_value(block)

print "DATA=",data

#DATA=[('listen', '*:10001 ssl'), ('ssl_certificate', '/etc/nginx/server.pem'), ('ssl_certificate_key', '/etc/nginx/serverkey.pem'), ('proxy_pass', 'server_www2')]

== notice: only get the first one ==

block = nc.get([('stream',), ('upstream', 'server_www2')])

print "BLOCK=",block

#BLOCK={'value': [('server', 'www2.com:9090')], 'name': 'upstream', 'param': 'server_www2'}

data = nc.get_value(block)

print "DATA=",data

#DATA=[('server', 'www2.com:9090')]

block = nc.get([('stream',), ('upstream', 'server_www2'), ('server')])

print "BLOCK=",block

#BLOCK=('server', 'www2.com:9090')

data = nc.get_value(block)

print "DATA=",data

#DATA=www2.com:9090

删除

nc.remove('user')

nc.remove([('events',),('worker_connections')])

nc.remove([('stream',),('server',)])

nc.remove([('stream',),('upstream', 'server_www3',)])

nc.remove([('stream',),('server',),('proxy_pass')])

修改

nc.set('user', 'XXXX')

nc.set([('events',),('worker_connections')], '999')

nc.set([('stream',),('server',),('proxy_pass')], 'WWWWW')

nc.set([('stream',),('upstream', 'server_www3',),('server')], 'NEWSERVER')

List的遍历

for item in nc.get([('stream',)])['value']:

print "NAME=",item['name']

print "VALUE=",item['value']

#NAME= upstream

#VALUE= [('server', 'www2.com:9090')]

#NAME= server

#VALUE= [('listen', '*:10001 ssl'), ('ssl_certificate', '/etc/nginx/server.pem'), ('ssl_certificate_key', '/etc/nginx/serverkey.pem'), ('proxy_pass', 'server_www2')]

#NAME= upstream

#VALUE= [('server', 'www3.com:8080')]

#NAME= server

#VALUE= [('listen', '*:10002 ssl'), ('ssl_certificate', '/etc/nginx/server.pem'), ('ssl_certificate_key', '/etc/nginx/serverkey.pem'), ('proxy_pass', 'server_www3')]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值