%PDF- %PDF-
| Direktori : /usr/local/src/publicnginx/ |
| Current File : //usr/local/src/publicnginx/createvhosts.py |
#!/usr/bin/env python
# Nginx Admin Installer
# Website: www.nginxcp.com
#
# Copyright (C) NGINXCP.COM.
#
import yaml
import os
from xml.dom import minidom
import sys
sys.path.append('/scripts/')
import xmlapi
def wildcard_safe(domain):
return domain.replace('*', '_wildcard_')
def writeconfded(user, domain, docroot, passedip, alias):
user = user
domain = domain
passedip = passedip
dedipvhost = """server {
error_log /var/log/nginx/vhost-error_log warn;
listen %s:80;
listen [::]:80;
server_name %s %s %s;
access_log /usr/local/apache/domlogs/%s bytes_log;
access_log /usr/local/apache/domlogs/%s combined;
root %s;
#location / {
location ~*.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
expires 1M;
try_files $uri @backend;
}
location / {
error_page 405 = @backend;
add_header X-Cache "HIT from Backend";
proxy_pass http://%s:8081;
include proxy.inc;
include microcache.inc;
}
location @backend {
internal;
proxy_pass http://%s:8081;
include proxy.inc;
include microcache.inc;
}
location ~ .*\.(php|jsp|cgi|pl|py)?$ {
proxy_pass http://%s:8081;
include proxy.inc;
include microcache.inc;
}
location ~ /\.ht {
deny all;
}
}""" % (passedip, domain, alias, passedip, wildcard_safe(domain) + "-bytes_log", wildcard_safe(domain), docroot, passedip, passedip, passedip)
if not os.path.exists( '/etc/nginx/vhosts'):
os.makedirs('/etc/nginx/vhosts')
if os.path.exists( '/etc/nginx/staticvhosts/' + domain):
pass
else:
domainvhost = open ('/etc/nginx/vhosts/' + domain, 'w')
domainvhost.writelines( dedipvhost )
domainvhost.close()
def writeconfshared(user,domain,docroot,passedip, alias):
sharedipvhost = """server {
error_log /var/log/nginx/vhost-error_log warn;
listen %s:80;
listen [::]:80;
server_name %s %s;
access_log /usr/local/apache/domlogs/%s bytes_log;
access_log /usr/local/apache/domlogs/%s combined;
root %s;
#location / {
location ~*.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
expires 1M;
try_files $uri @backend;
}
location / {
error_page 405 = @backend;
add_header X-Cache "HIT from Backend";
proxy_pass http://%s:8081;
include proxy.inc;
include microcache.inc;
}
location @backend {
internal;
proxy_pass http://%s:8081;
include proxy.inc;
include microcache.inc;
}
location ~ .*\.(php|jsp|cgi|pl|py)?$ {
proxy_pass http://%s:8081;
include proxy.inc;
include microcache.inc;
}
location ~ /\.ht {
deny all;
}
}""" % (passedip, domain, alias, wildcard_safe(domain) + "-bytes_log", wildcard_safe(domain), docroot, passedip, passedip, passedip)
if not os.path.exists( '/etc/nginx/vhosts'):
os.makedirs('/etc/nginx/vhosts')
if os.path.exists( '/etc/nginx/staticvhosts/' + domain):
pass
else:
domainvhost = open ('/etc/nginx/vhosts/' + domain, 'w')
domainvhost.writelines( sharedipvhost )
domainvhost.close()
#def redirectfunc():
def getmainip():
ipDOC = xmlapi.api("listips")
parsedipDOC = minidom.parseString(ipDOC)
iptaglist = parsedipDOC.getElementsByTagName('ip')
serverip = iptaglist[0].childNodes[0].toxml()
return serverip
def getipliststring():
ipDOC = xmlapi.api("listips")
parsedipDOC = minidom.parseString(ipDOC)
iptaglist = parsedipDOC.getElementsByTagName('ip')
iplist =[]
q = 0
while q < len(iptaglist):
iplist.append(str(iptaglist[q].childNodes[0].toxml()))
q = q + 1
ipliststring = ' '.join(iplist)
return ipliststring
def getvars(ydomain):
DOC = xmlapi.api("domainuserdata?domain=" + ydomain)
parsedDOC = minidom.parseString(DOC)
docroottaglist = parsedDOC.getElementsByTagName('documentroot')
yiptaglist = parsedDOC.getElementsByTagName('ip')
aliastaglist=[]
aliastaglist = parsedDOC.getElementsByTagName('serveralias')
aliaslist =[]
a = 0
while a < len(aliastaglist):
newalias = str(aliastaglist[a].childNodes[0].toxml())
if not newalias.startswith("www.*."):
aliaslist.append(newalias)
a = a + 1
alias = ''.join(aliaslist)
docroot=""
yip=""
try:
docroot = docroottaglist[0].childNodes[0].toxml()
yip = yiptaglist[0].childNodes[0].toxml()
except IndexError:
errf=open('/root/failedcreation.txt', 'a')
import time
from time import strftime
t=strftime("%Y-%m-%d %H:%M:%S")
errortxt="%s Failed to create vhost for %s\n" % (t, ydomain)
errf.write(errortxt)
errf.close()
return docroot, yip, alias
if __name__ == '__main__':
DOC = xmlapi.api("listaccts")
parsedDOC = minidom.parseString(DOC)
usertaglist = parsedDOC.getElementsByTagName('user')
userlist = []
numusers = 0
while numusers < len(usertaglist):
userlist.append(str(usertaglist[numusers].childNodes[0].toxml()))
numusers = numusers + 1
for i in userlist:
f = open('/var/cpanel/userdata/' + i + '/main')
ydata = yaml.load(f)
f.close()
sublist = ydata['sub_domains']
addondict = ydata['addon_domains']
parkedlist = ydata['parked_domains']
mainlist = ydata['main_domain']
serverip = getmainip()
if len(sublist) != 0:
slcont = 0
while slcont < len(sublist):
domain = sublist[slcont]
docroot, yip, alias = getvars(sublist[slcont])
if docroot == "":
slcont = slcont + 1
else:
if yip == serverip:
writeconfshared(i, domain, docroot, yip, alias)
else:
writeconfded(i, domain, docroot, yip, alias)
slcont = slcont + 1
DOC = xmlapi.api("accountsummary?user=" + i)
parsedDOC = minidom.parseString(DOC)
domaintaglist = parsedDOC.getElementsByTagName('domain')
domain = domaintaglist[0].childNodes[0].toxml()
docroot, yip, alias = getvars(domain)
if yip == serverip:
writeconfshared(i, domain, docroot, yip, alias)
else:
writeconfded(i, domain, docroot, yip, alias)