wsgidav独立服务器使用手册

2018/12/13 18:37 下午 posted in  Linux

很久以前写的,我也不记得写的什么东西了。wsgidav是一个提供webdav服务的python库,可以用来共享文件。更多相关知识可以自行百度“什么是webdav?”。

使用示例(或者说是个本地测试)

sudo wsgidav --host=0.0.0.0 --port=80 --root=/home/lonelyor
这里的sudo是个坑,不加的话就找不到wsgidav指令,为此搞了好久诶。

wsgidav高级设置:

sudo wsgidav --config=./wsgidav.conf
引用配置文件,配置文件使用python语法来指定这些选项:
服务器选项(主机名,端口,SSL证书,...)
共享名称/ WebDAV提供程序映射列表
认证用户列表
可选的自定义DAV提供程序(即FilesystemProvider以外)
可选的自定义锁管理器,属性管理器和域控制器
高级调试选项
(和更多)

配置文件示例

#注意:这个文件是Python的语法和格式

####################################### ##########################################
WsgiDAV配置文件
#请参阅
#http : //wsgidav.readthedocs.io/en/latest/run-configure.html#
以获取配置文件格式的一些解释。
################################################## ############################## 

#助手-请不要修改此节

provider_mapping  =  {} 
user_mapping  =  {} 

高清 addShare (SHARENAME , davProvider ):
    provider_mapping [ shareName ]  =  davProvider

    
def  addUser (realmName , user , password , description , roles = []):
    realmName  =  “/”  +  realmName 。条(- [R “\ /” )
    的UserDict  =  user_mapping 。setdefault (realmName , {})。setdefault (user , {})
    userDict [ “password” ]  =  密码
    userDict [ “description”]  =  描述
    userDict [ “roles” ]  =  角色


####################################### ##########################################
SERVER OPTIONS 
#===== ================================================== ======================== 
#在这个WSGI服务器中运行WsgiDAV。
#支持的服务器:“cheroot”,“cherrypy-wsgiserver”,“ext_wsgiutils”,
#“flup-fcgi”,“flup-fcgi-fork”,“paste”,“wsgiref” 
#“wsgiref”和“ext_wsgiutils”内置的服务器,应该*不* 
生产中使用。
#所有其他服务器必须已经安装,例如`pip install cheroot`。
#(二进制发行版已经包含了'cheroot')
#默认:“cheroot”,使用命令行上的--server选项来改变它。

#server =“cheroot” 

#在初始化时传递给服务器的附加参数(取决于`server`)
#例如,对于cheroot:

#server_args = { 
#“numthreads”:10,
#“max”:-1,
#“request_queue_size “:5,
#”timeout“:10,
#”shutdown_timeout“:5,
#”verbose“:0,
#} 

#服务器端口(默认:8080,在命令行使用--port)
port  =  8080 

#服务器主机名默认:localhost,
  

#================================================= ============================== 
#启用SSL支持
#注意:
#有效的证书必须与服务器的主机名匹配,所以假的证书将
不会在所有情况下工作。
#改为创建自己的证书!
 
#ssl_certificate =“wsgidav / server / sample_bogo_server.crt” 
#ssl_private_key =“wsgidav / server / sample_bogo_server.key” 
#ssl_certificate_chain = None 

#cheroot服务器支持'builtin'和'pyopenssl'(默认值:'builtin')
#ssl_adapter = pyopenssl“ 


#=============================================== ================================= 
#Misc。setings 
#

#将MS-Author-Via响应头添加到OPTIONS命令,以允许
使用Microsoft Office 

编辑#(默认值:False)add_header_MS_Author_Via  =  True 


#以字节为单位的块大小

#block_size = 8192 


#将此值设置为True,强制不引用PATH_INFO。这应该已经由WSGI 
#Framework 

完成了,所以这个设置只能用来解决那里的意外问题(见问题#8)。#unquote_path_info = False 


#使用UTF-8重新编码PATH_INFO(回落到ISO-8859-1)。
#这似乎是错误的,因为每个PEP 3333 PATH_INFO始终是ISO-8859-1编码
#(请参阅https://www.python.org/dev/peps/pep-3333/#unicode-issues)。
#但是,在使用中文字符访问资源时,似乎可以解决错误
(例如,参见问题#73)。
#设置为`None`(默认),仅对Python 3启用。

#re_encode_path_info =无


#============================================= ================================== 
#中间件
##
使用此部分来修改默认中间件堆栈

#from wsgidav .dir_browser import WsgiDavDirBrowser#
from debug_filter import WsgiDavDebugFilter#
from http_authenticator import HTTPAuthenticator 
#from error_printer import ErrorPrinter 
#middleware_stack = [WsgiDavDirBrowser,HTTPAuthenticator,ErrorPrinter,WsgiDavDebugFilter]

#================================================= ============================== 
#调试

verbose  =  1        #0  - 没有输出(除了应用程序例外)          
                     #1  - 显示单一(HTTP日志记录)
                     #2  - 显示附加事件
                     #3  - 显示完整的请求/响应头信息(HTTP日志记录)
                     #请求正文和GET响应正文未显示


#启用特定的模块记录器
#Eg [“lock_manager”,“property_manager “,”http_authenticator“,...] 
enable_loggers  =  [] 

#启用最大值。记录某些http方法
#Eg [“COPY”,“DELETE”,“GET”,“HEAD”,“LOCK”,“MOVE”,
debug_methods  =  [] 

#启用最大值。在包含某些字符串的石蕊套件测试中进行日志记录
#Eg [“lock_excl”,“notowner_modify”,“fail_cond_put_unlocked”,...] 
debug_litmus  =  [] 


################## ################################################## ############# 
WsgiDavDirBrowser 

dir_browser  =  { 
    “enable” : True ,               #为集合的GET请求呈现HTML列表
    “response_trailer” : “” ,       #原始HTML代码,附加为页脚
    “davmount” : 假,            #发送<dm:mount>
    “ms_mount” : False ,            #添加一个“打开为webfolder”链接(需要Windows)
    “ms_sharepoint_plugin” : True , #调用MS 
    Offce 文档以使用WebDAV进行编辑“ms_sharepoint_urls” : False ,  #
Prepend'ms -word:ofe | u |” 到MS Offce 
文档的URL #“app_class”:MyBrowser,









#默认值:死性不支持
wsgidav.property_manager.PropertyManager:#也可用
#wsgidav.property_manager.ShelvePropertyManager 
#
#查看如何开发定制物业管理的文档。
#注意,默认的PropertyManager在内存中工作,因此不是
#持久化的。

###使用内存中的属性管理器(不是永久的)
#(这与传递'propsmanager = True'相同)
#from wsgidav.property_manager import PropertyManager 
#propsmanager = PropertyManager()

###使用基于持久性架构的属性管理器
#从wsgidav.property_manager导入ShelvePropertyManager
#propsmanager = ShelvePropertyManager(“wsgidav-props.shelve”)

###使用基于持久性MongoDB的属性管理器
#from wsgidav.addons.mongo_property_manager import MongoPropertyManager 
#prop_man_opts = {} 
#propsmanager = MongoPropertyManager(prop_man_opts)

###使用基于持久性CouchDB属性管理器
#from wsgidav.addons.couch_property_manager import CouchPropertyManager 
#prop_man_opts = {} 
#propsmanager = CouchPropertyManager(prop_man_opts)

###使用内存中的属性管理器(NOT persistent)
propsmanager  =  True 


###可选的附加动态属性修改
#注意:默认情况下,像文件大小和上次修改时间的生活属性是
#只读,但如果底层DAV提供程序
#支持
,则可以在这里覆盖。现在只有FileSystemProvider支持它,只有#更改为上次修改的时间戳。使用下面的mutable_live_props 
#列表来
启用它,以允许客户端使用utime系统调用,或者例如#touch 或cp / rsync命令与挂载的
#DAV共享中
的preserve-timestamp标志一起使用。#请注意,时间戳是在实际的文件或目录中设置的,所以
即使对于内存中的属性管理器
,它也是持久的。还应该注意#可变的最后修改可能不符合RFC 
4918. #mutable_live_props = [“{DAV:} getlastmodified”]


#================================================= ============================== 
#锁管理器
##
取消注释此行以指定您自己的锁管理器。                    
#默认值:wsgidav.lock_storage.LockStorageDict 
#还有:wsgidav.lock_storage.LockStorageShelve 
#
#查看如何开发自定义锁管理器的文档。
#注意默认的LockStorageDict在内存中工作,因此不是
#持久化的。
                 
#示例:使用内存中的锁存储
#(这与默认情况下传递'locksmanager = True'相同)
#from wsgidav.lock_storage import LockStorageDict 
#locksmanager = LockStorageDict()


#示例:使用基于PERSISTENT架构的锁管理器
#from wsgidav.lock_storage import LockStorageShelve 
#locksmanager = LockStorageShelve(“wsgidav-locks.shelve”)


##################### ################################################## ##########
SHARES 
##
如果您想通过
#WsgiDAV共享文件
发布位置“/ v_root”中的文件,以便可以通过以下URL访问文件:#http   :/ / /服务器:端口/文件
#插入以下行:
#addShare( “文件”, “/ v_root”) 
#或者,在Windows中:
#addShare( “文件”, “C:\\ v_root”) #
#
要使用根级别共享访问相同的目录
#http:// server:港口/

#add this line:#addShare(“”,“/ v_root”)
##
上面的例子使用wsgidav.fs_dav_provider.FilesystemProvider,它是
缺省提供程序实现。
##
如果您希望使用自定义提供程序,则必须将对象作为第二个
参数


传递。看下面的例子。  ###添加一个读写文件共享:
addShare (“dav” , r “C:\ temp” )

###添加一个只读文件共享:
#from wsgidav.fs_dav_provider import FilesystemProvider 
#addShare(“tmp”, FilesystemProvider(“/ tmp”,readonly = True))


###发布MySQL'world'数据库作为共享'/ world-db'
#from wsgidav.addons.mysql_dav_provider import MySQLBrowserProvider 
#addShare(“world-db”,MySQLBrowserProvider(“localhost”,“root”,“test”,“world”))


### 
从wsgidav.samples 
发布一个虚拟结构。 virtual_dav_provider import VirtualResourceProvider #addShare(“virtres”,VirtualResourceProvider())


###发布一个Mercurial仓库
#from wsgidav.addons.hg_dav_provider import HgResourceProvider 
#addShare(“hg”,HgResourceProvider(“PATH_OR_URL”))


###发布一个MongoDB 
#from wsgidav.samples.mongo_dav_provider import MongoResourceProvider 
#mongo_dav_opts = {} 
#addShare(“mongo”,MongoResourceProvider(mongo_dav_opts))


################################################## ###############################
AUTHENTICATION 
#================= ================================================== ============ 
#HTTP验证选项

acceptbasic  =  True     #允许基本验证,True或False 
acceptdigest  =  True    #允许摘要验证,True或False 
defaultdigest  =  True   #True(默认摘要)或False默认基本)

#输入将被接受为授权用户的标题字段的名称。
#包括引号,例如:trusted_auth_header =“REMOTE_USER” 
trusted_auth_header  =  无


#================================================= ============================== 
#域控制器
#取消注释此行以指定您自己的域控制器
#默认值:wsgidav.domain_controller,它采用下面的用户部分
#
#示例:
#使用域控制器,允许用户对一个认证
#Windows NT域或本地计算机。
#注意:NTDomainController需要基本身份验证:
#set acceptbasic = True,acceptdigest = False,defaultdigest = False 

#from wsgidav.addons.nt_domain_controller import NTDomainController 
#domaincontroller = NTDomainController(presetdomain = None,presetserver = None)
#acceptbasic = True 
#acceptdigest =假
#defaultdigest = False 


#============================================= ================================== 
#USERS 
##
此部分仅供DEFAULT域控制器使用。
#
#用户被每领域中定义的:
#ADDUSER(<境界>,<用户>,<密码>,<描述>) #   
#
请注意,缺省域控制器使用共享名作为领域名称。   
##
如果没有用户指定领域,则不需要认证。
#因此授予读写访问匿名!
##
注意:如果您希望使用Windows WebDAV支持(例如Windows XP的My 
#网络位置),则需要将用户的域作为

#username 

(注意DOUBLE斜线),例如:#addUser(“v_root”,“domain \\ user”,“password”,“description”)addUser (“” , “tester” , “secret” , “” )
ADDUSER (“” , “tester2” , “secret2” ,“”  )

#addUser( “DAV”, “测试器”, “秘密”, “”)
#addUser( “DAV”, “tester2”, “secret2”,“ “)

#addUser(”virtres“,”tester“,”secret“,”“)