InPanel 1.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. inpanel/__init__.py +29 -0
  2. inpanel/acme.py +289 -0
  3. inpanel/aliyuncs.py +269 -0
  4. inpanel/app.py +514 -0
  5. inpanel/apt.py +223 -0
  6. inpanel/base.py +200 -0
  7. inpanel/config.py +139 -0
  8. inpanel/data/config.ini +29 -0
  9. inpanel/data/history +5 -0
  10. inpanel/data/runlogs.ini +12 -0
  11. inpanel/data/update_info.ini +4 -0
  12. inpanel/dnf.py +225 -0
  13. inpanel/lib/__init__.py +9 -0
  14. inpanel/lib/async_process.py +98 -0
  15. inpanel/lib/filelock.py +82 -0
  16. inpanel/lib/magic.py +233 -0
  17. inpanel/lib/pxssh.py +310 -0
  18. inpanel/lib/pyDes.py +867 -0
  19. inpanel/mod/__init__.py +0 -0
  20. inpanel/mod/apt.py +316 -0
  21. inpanel/mod/certificate.py +268 -0
  22. inpanel/mod/config.py +372 -0
  23. inpanel/mod/cron.py +315 -0
  24. inpanel/mod/disk.py +322 -0
  25. inpanel/mod/dnf.py +239 -0
  26. inpanel/mod/file.py +722 -0
  27. inpanel/mod/firewall.py +199 -0
  28. inpanel/mod/firewall_base.py +137 -0
  29. inpanel/mod/firewall_firewalld.py +170 -0
  30. inpanel/mod/firewall_iptables.py +176 -0
  31. inpanel/mod/firewall_macos.py +213 -0
  32. inpanel/mod/firewall_ufw.py +128 -0
  33. inpanel/mod/ftp.py +231 -0
  34. inpanel/mod/httpd.py +1205 -0
  35. inpanel/mod/lighttpd.py +26 -0
  36. inpanel/mod/login.py +98 -0
  37. inpanel/mod/mysql.py +577 -0
  38. inpanel/mod/named.py +26 -0
  39. inpanel/mod/nginx.py +2327 -0
  40. inpanel/mod/package.py +33 -0
  41. inpanel/mod/package_apt.py +62 -0
  42. inpanel/mod/package_base.py +77 -0
  43. inpanel/mod/package_dnf.py +62 -0
  44. inpanel/mod/package_map.py +366 -0
  45. inpanel/mod/package_yum.py +64 -0
  46. inpanel/mod/php.py +289 -0
  47. inpanel/mod/process.py +291 -0
  48. inpanel/mod/proftpd.py +26 -0
  49. inpanel/mod/pureftpd.py +26 -0
  50. inpanel/mod/query.py +108 -0
  51. inpanel/mod/server.py +1319 -0
  52. inpanel/mod/service.py +262 -0
  53. inpanel/mod/setting.py +228 -0
  54. inpanel/mod/shell.py +78 -0
  55. inpanel/mod/ssh.py +280 -0
  56. inpanel/mod/system.py +220 -0
  57. inpanel/mod/task.py +1337 -0
  58. inpanel/mod/ufw.py +14 -0
  59. inpanel/mod/user.py +306 -0
  60. inpanel/mod/vsftpd.py +67 -0
  61. inpanel/mod/yum.py +243 -0
  62. inpanel/plugins/__init__.py +10 -0
  63. inpanel/plugins/__pycache__/__init__.cpython-313.pyc +0 -0
  64. inpanel/plugins/acme/static/index.html +10 -0
  65. inpanel/plugins/acme/static/index.js +13 -0
  66. inpanel/plugins/shadowsocks-libev/__pycache__/info.cpython-313.pyc +0 -0
  67. inpanel/plugins/shadowsocks-libev/info.py +73 -0
  68. inpanel/plugins/shadowsocks-libev/static/index.html +70 -0
  69. inpanel/plugins/shadowsocks-libev/static/index.js +18 -0
  70. inpanel/public/css/global.css +138 -0
  71. inpanel/public/favicon.ico +0 -0
  72. inpanel/public/images/alipay.jpg +0 -0
  73. inpanel/public/images/loading.gif +0 -0
  74. inpanel/public/images/weixin.jpg +0 -0
  75. inpanel/public/index.html +94 -0
  76. inpanel/public/js/controllers/controllers.js +566 -0
  77. inpanel/public/js/controllers/database.js +590 -0
  78. inpanel/public/js/controllers/ecs.js +624 -0
  79. inpanel/public/js/controllers/file.js +940 -0
  80. inpanel/public/js/controllers/plugins.js +105 -0
  81. inpanel/public/js/controllers/service.js +1460 -0
  82. inpanel/public/js/controllers/site.js +1241 -0
  83. inpanel/public/js/controllers/utils.js +2319 -0
  84. inpanel/public/js/core.js +221 -0
  85. inpanel/public/js/directives.js +784 -0
  86. inpanel/public/js/filters.js +395 -0
  87. inpanel/public/js/services.js +257 -0
  88. inpanel/public/lib/angular/1.0.2/angular-resource.min.js +10 -0
  89. inpanel/public/lib/angular/1.0.2/angular.min.js +158 -0
  90. inpanel/public/lib/bootstrap/css/bootstrap-theme.css +587 -0
  91. inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +1 -0
  92. inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +6 -0
  93. inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +1 -0
  94. inpanel/public/lib/bootstrap/css/bootstrap.css +6757 -0
  95. inpanel/public/lib/bootstrap/css/bootstrap.css.map +1 -0
  96. inpanel/public/lib/bootstrap/css/bootstrap.min.css +6 -0
  97. inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +1 -0
  98. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  99. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +288 -0
  100. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  101. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  102. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  103. inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  104. inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  105. inpanel/public/lib/bootstrap/js/bootstrap.js +2377 -0
  106. inpanel/public/lib/bootstrap/js/bootstrap.min.js +7 -0
  107. inpanel/public/lib/bootstrap/js/npm.js +13 -0
  108. inpanel/public/lib/codemirror/codemirror-compressed.js +1 -0
  109. inpanel/public/lib/codemirror/codemirror.css +173 -0
  110. inpanel/public/lib/jquery/jquery-1.12.4.min.js +5 -0
  111. inpanel/public/lib/md5/md5.js +379 -0
  112. inpanel/public/lib/md5/md5.min.js +1 -0
  113. inpanel/public/partials/database/index.html +172 -0
  114. inpanel/public/partials/database/mysql/dbedit.html +462 -0
  115. inpanel/public/partials/database/mysql/dbnew.html +348 -0
  116. inpanel/public/partials/database/mysql/useredit.html +310 -0
  117. inpanel/public/partials/database/mysql/usernew.html +97 -0
  118. inpanel/public/partials/directives/message.html +20 -0
  119. inpanel/public/partials/directives/navbar.html +25 -0
  120. inpanel/public/partials/directives/selector.html +57 -0
  121. inpanel/public/partials/directives/srvbase.html +72 -0
  122. inpanel/public/partials/directives/srvext.html +34 -0
  123. inpanel/public/partials/directives/srvfile.html +23 -0
  124. inpanel/public/partials/directives/srvinstall.html +34 -0
  125. inpanel/public/partials/directives/srvlog.html +23 -0
  126. inpanel/public/partials/directives/srvminiop.html +28 -0
  127. inpanel/public/partials/directives/srvuninstall.html +38 -0
  128. inpanel/public/partials/directives/srvupdate.html +30 -0
  129. inpanel/public/partials/ecs/account.html +156 -0
  130. inpanel/public/partials/ecs/ecs.html +198 -0
  131. inpanel/public/partials/ecs/index.html +40 -0
  132. inpanel/public/partials/ecs/setings.html +459 -0
  133. inpanel/public/partials/file/file.html +501 -0
  134. inpanel/public/partials/file/trash.html +95 -0
  135. inpanel/public/partials/ftp.html +36 -0
  136. inpanel/public/partials/log.html +83 -0
  137. inpanel/public/partials/login.html +79 -0
  138. inpanel/public/partials/logout.html +22 -0
  139. inpanel/public/partials/main.html +534 -0
  140. inpanel/public/partials/plugins/index.html +55 -0
  141. inpanel/public/partials/plugins/plugins.html +13 -0
  142. inpanel/public/partials/secure.html +13 -0
  143. inpanel/public/partials/service/apache.html +147 -0
  144. inpanel/public/partials/service/cron.html +71 -0
  145. inpanel/public/partials/service/index.html +293 -0
  146. inpanel/public/partials/service/iptables.html +40 -0
  147. inpanel/public/partials/service/lighttpd.html +63 -0
  148. inpanel/public/partials/service/mariadb.html +113 -0
  149. inpanel/public/partials/service/memcache.html +36 -0
  150. inpanel/public/partials/service/minio.html +44 -0
  151. inpanel/public/partials/service/mongodb.html +44 -0
  152. inpanel/public/partials/service/mysql.html +113 -0
  153. inpanel/public/partials/service/named.html +61 -0
  154. inpanel/public/partials/service/nginx.html +296 -0
  155. inpanel/public/partials/service/ntp.html +40 -0
  156. inpanel/public/partials/service/php.html +250 -0
  157. inpanel/public/partials/service/proftpd.html +59 -0
  158. inpanel/public/partials/service/pureftpd.html +59 -0
  159. inpanel/public/partials/service/redis.html +40 -0
  160. inpanel/public/partials/service/samba.html +58 -0
  161. inpanel/public/partials/service/sendmail.html +40 -0
  162. inpanel/public/partials/service/ssh.html +186 -0
  163. inpanel/public/partials/service/tomcat.html +65 -0
  164. inpanel/public/partials/service/vsftpd.html +195 -0
  165. inpanel/public/partials/setting.html +299 -0
  166. inpanel/public/partials/site/apache/site.html +277 -0
  167. inpanel/public/partials/site/index.html +344 -0
  168. inpanel/public/partials/site/nginx/site.html +558 -0
  169. inpanel/public/partials/sorry.html +19 -0
  170. inpanel/public/partials/storage/autofm.html +103 -0
  171. inpanel/public/partials/storage/backup.html +42 -0
  172. inpanel/public/partials/storage/index.html +360 -0
  173. inpanel/public/partials/storage/migrate.html +93 -0
  174. inpanel/public/partials/storage/movedata.html +98 -0
  175. inpanel/public/partials/storage/remote.html +77 -0
  176. inpanel/public/partials/utils/cron.html +486 -0
  177. inpanel/public/partials/utils/firewall.html +266 -0
  178. inpanel/public/partials/utils/index.html +193 -0
  179. inpanel/public/partials/utils/network.html +118 -0
  180. inpanel/public/partials/utils/process.html +239 -0
  181. inpanel/public/partials/utils/repository.html +373 -0
  182. inpanel/public/partials/utils/shell.html +28 -0
  183. inpanel/public/partials/utils/ssl.html +319 -0
  184. inpanel/public/partials/utils/time.html +109 -0
  185. inpanel/public/partials/utils/user.html +359 -0
  186. inpanel/public/robots.txt +2 -0
  187. inpanel/remote.py +109 -0
  188. inpanel/templates/file/preview.html +34 -0
  189. inpanel/templates/index.html +93 -0
  190. inpanel/utils.py +282 -0
  191. inpanel/web.py +1811 -0
  192. inpanel/yum.py +756 -0
  193. inpanel-1.2.1.dist-info/METADATA +399 -0
  194. inpanel-1.2.1.dist-info/RECORD +198 -0
  195. inpanel-1.2.1.dist-info/WHEEL +5 -0
  196. inpanel-1.2.1.dist-info/entry_points.txt +2 -0
  197. inpanel-1.2.1.dist-info/licenses/LICENSE +30 -0
  198. inpanel-1.2.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,558 @@
1
+ <div navbar ng-init="currentItem='site.nginx'"></div>
2
+ <div ng-show="!loaded">
3
+ <div loading></div>
4
+ </div>
5
+
6
+ <div id="main" ng-show="loaded" style="display:none;">
7
+ <div class="module-header">
8
+ <h3>{{module_header}}</h3>
9
+ </div>
10
+
11
+ <div class="alert alert-danger" ng-show="!gen_by_inpanel" style="display:none;">
12
+ <p>该站点的配置不是使用 InPanel 生成的,继续配置有可能导致部分配置丢失。</p>
13
+ <p>建议使用 InPanel 为该站点新建一个配置,并将原配置迁移过来。</p>
14
+ <p>如要手工编辑原始配置文件内容,请<a href="#/service/nginx?s=configfile">点击这里</a>。</p>
15
+ </div>
16
+
17
+ <div class="tabbable" ng-init="load()">
18
+ <ul class="nav nav-tabs">
19
+ <li ng-class="'active' | iftrue:activeTabName=='basic'"><a href="#basic" ng-click="sec('basic')" data-toggle="tab">基本设置</a></li>
20
+ <li ng-class="'active' | iftrue:activeTabName=='ssl'"><a href="#ssl" ng-click="sec('ssl')" data-toggle="tab">SSL</a></li>
21
+ <li ng-class="'active' | iftrue:activeTabName=='rewrite'"><a href="#rewrite" ng-click="sec('rewrite')" data-toggle="tab">重定向</a></li>
22
+ <li ng-class="'active' | iftrue:activeTabName=='advanced'"><a href="#advanced" ng-click="sec('advanced')" data-toggle="tab">高级设置</a></li>
23
+ </ul>
24
+ <div class="tab-content">
25
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='basic'" id="basic">
26
+ <div class="form-horizontal form-horizontal-small">
27
+ <div class="form-group">
28
+ <label class="col-sm-2 control-label">站点域名</label>
29
+ <div class="col-sm-10">
30
+ <div class="form-inline" ng-repeat="server_name in setting.server_names">
31
+ <input class="form-control" ng-model="server_name.name" type="text" ng-disabled="server_name.default_name" placeholder="请输入域名或IP">
32
+ <button class="btn btn-default" ng-click="deleteservername($index)" ng-show="setting.server_names.length>1" title="删除这个域名"><i class="glyphicon glyphicon-minus"></i></button>
33
+ <button class="btn btn-default" ng-click="addservername()" ng-show="$index==setting.server_names.length-1" title="增加一个域名"><i class="glyphicon glyphicon-plus"></i></button>
34
+ <label class="checkbox-inline">
35
+ <input type="checkbox" ng-model="server_name.default_name" ng-click="server_name.name='_'"> 设置为任意域名可访问
36
+ </label>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ <div class="form-group">
41
+ <label class="col-sm-2 control-label">站点路径</label>
42
+ <div class="col-sm-10">
43
+ <div class="form-inline">
44
+ <button class="btn btn-default" ng-click="addlocation($index)" ng-show="setting.locations.length==0" style="display:none">
45
+ <i class="glyphicon glyphicon-plus"></i> 添加路径配置
46
+ </button>
47
+ <ul class="nav nav-tabs" ng-show="setting.locations.length>0" style="display:none;">
48
+ <li ng-repeat="location in setting.locations" ng-class="'active'|iftrue:$index==curloc" ng-click="setloc($index)">
49
+ <a href="#loc_{{$index}}" data-toggle="tab">{{location.urlpath}}</a>
50
+ </li>
51
+ <li>
52
+ <button class="btn btn-default" ng-click="addlocation()" style="margin-left: 20px; margin-top: 5px;">
53
+ <i class="glyphicon glyphicon-plus"></i> 添加路径
54
+ </button>
55
+ <button class="btn btn-default" ng-click="deletelocation(curloc)" style="margin-left: 10px; margin-top: 5px;">
56
+ <i class="glyphicon glyphicon-minus"></i> 删除路径
57
+ </button>
58
+ </li>
59
+ </ul>
60
+ <div class="tab-content" ng-show="setting.locations.length>0" style="display:none;">
61
+ <div class="tab-pane" ng-repeat="location in setting.locations" ng-class="'active'|iftrue:$index==curloc" id="loc_{{$index}}">
62
+ <div class="form-inline">
63
+ <label class="col-sm-2 control-label">URL路径</label>
64
+ <div class="controls">
65
+ <input class="form-control" ng-model="location.urlpath" ng-change="urlpathchange(location)" type="text" placeholder="URL路径">
66
+ </div>
67
+ </div>
68
+ <div class="form-inline">
69
+ <label class="col-sm-2 control-label">引擎类别</label>
70
+ <div class="controls">
71
+ <select class="form-control" ng-model="location.engine">
72
+ <option value="static">纯静态</option>
73
+ <option value="fastcgi">FastCGI(PHP)</option>
74
+ <option value="redirect">跳转</option>
75
+ <option value="proxy">反向代理</option>
76
+ <option value="error">返回错误</option>
77
+ </select>
78
+ </div>
79
+ </div>
80
+ <div class="form-inline" ng-show="location.engine=='static'">
81
+ <label class="col-sm-2 control-label">指定目录</label>
82
+ <div class="controls">
83
+ <div class="input-group">
84
+ <input ng-model="location.static.root" type="text" class="form-control" placeholder="路径所访问的目录">
85
+ <span class="input-group-btn">
86
+ <button class="btn btn-default" ng-click="selectstaticfolder($index)">
87
+ <i class="glyphicon glyphicon-folder-open"></i>
88
+ </button>
89
+ </span>
90
+ </div>
91
+ <p>
92
+ <label class="checkbox-inline"><input ng-model="location.static.autocreate" type="checkbox">目录不存在时,自动创建目录</label><br>
93
+ <label class="checkbox-inline"><input ng-model="location.static.autoindex" type="checkbox">开启目录自动索引</label>
94
+ </p>
95
+ </div>
96
+ </div>
97
+ <div class="form-inline" ng-show="location.engine=='fastcgi'">
98
+ <label class="col-sm-2 control-label">指定目录</label>
99
+ <div class="controls">
100
+ <div class="input-group">
101
+ <input class="form-control" ng-model="location.fastcgi.root" type="text" placeholder="路径所访问的目录">
102
+ <span class="input-group-btn">
103
+ <button class="btn btn-default" ng-click="selectfastcgifolder($index)">
104
+ <i class="glyphicon glyphicon-folder-open"></i>
105
+ </button>
106
+ </span>
107
+ </div>
108
+ <p><label class="checkbox-inline"><input ng-model="location.fastcgi.autocreate" type="checkbox">目录不存在时,自动创建目录</label></p>
109
+ </div>
110
+ </div>
111
+ <div class="form-inline" ng-show="location.engine=='fastcgi'">
112
+ <label class="col-sm-2 control-label">FastCGI</label>
113
+ <div class="controls">
114
+ <input class="form-control" ng-model="location.fastcgi.fastcgi_pass" type="text" placeholder="FastCGI服务器地址">
115
+ </div>
116
+ </div>
117
+ <div class="form-inline" ng-show="location.engine=='redirect'">
118
+ <label class="col-sm-2 control-label">跳转地址</label>
119
+ <div class="controls">
120
+ <input class="form-control" ng-model="location.redirect.url" type="text" placeholder="要跳转到的URL地址">
121
+ </div>
122
+ </div>
123
+ <div class="form-inline" ng-show="location.engine=='redirect'">
124
+ <label class="col-sm-2 control-label">跳转类型</label>
125
+ <div class="controls">
126
+ <label class="radio-inline">
127
+ <input type="radio" ng-model="location.redirect.type" value="301"> 301永久重定向
128
+ </label>
129
+ <label class="radio-inline">
130
+ <input type="radio" ng-model="location.redirect.type" value="302"> 302临时重定向
131
+ </label>
132
+ </div>
133
+ </div>
134
+ <div class="form-inline" ng-show="location.engine=='redirect'">
135
+ <label class="col-sm-2 control-label">路径处理</label>
136
+ <div class="controls">
137
+ <label class="radio-inline">
138
+ <input type="radio" ng-model="location.redirect.option" value="keep"> 保留请求路径
139
+ </label>
140
+ <label class="radio-inline">
141
+ <input type="radio" ng-model="location.redirect.option" value="ignore"> 忽略请求路径
142
+ </label>
143
+ </div>
144
+ </div>
145
+ <div class="form-inline" ng-show="location.engine=='proxy'">
146
+ <label class="col-sm-2 control-label">后端协议</label>
147
+ <div class="controls">
148
+ <label class="radio-inline">
149
+ <input type="radio" ng-model="location.proxy.protocol" value="http"> http
150
+ </label>
151
+ <label class="radio-inline">
152
+ <input type="radio" ng-model="location.proxy.protocol" value="https"> https
153
+ </label>
154
+ </div>
155
+ </div>
156
+ <div class="form-inline" ng-show="location.engine=='proxy'">
157
+ <label class="col-sm-2 control-label">主机域名</label>
158
+ <div class="controls">
159
+ <input ng-model="location.proxy.host" type="text" class="form-control" placeholder="后端的域名,如:www.baidu.com">
160
+ </div>
161
+ </div>
162
+ <div class="form-inline" ng-show="location.engine=='proxy'">
163
+ <label class="col-sm-2 control-label">真实IP</label>
164
+ <div class="controls">
165
+ <label class="checkbox-inline">
166
+ <input type="checkbox" ng-model="location.proxy.realip"> 传递客户端真实IP(X-Real-IP)
167
+ </label>
168
+ </div>
169
+ </div>
170
+ <div class="form-inline" ng-show="location.engine=='proxy'">
171
+ <label class="col-sm-2 control-label">后端编码</label>
172
+ <div class="controls">
173
+ <select class="form-control" ng-model="location.proxy.charset">
174
+ <option value="">默认</option>
175
+ <option value="utf-8">UTF-8</option>
176
+ <option value="gb2312">GB2312</option>
177
+ <option value="gbk">GBK</option>
178
+ <option value="gb18030">GB18030</option>
179
+ <option value="big5">BIG5</option>
180
+ <option value="euc-jp">EUC-JP</option>
181
+ <option value="euc-kr">EUC-KR</option>
182
+ <option value="iso-8859-2">ISO-8859-2</option>
183
+ <option value="shift_jis">Shift_JIS</option>
184
+ </select>
185
+ </div>
186
+ </div>
187
+ <div ng-show="location.engine=='proxy'" ng-repeat="backend in location.proxy.backends">
188
+ <div class="form-inline">
189
+ <label class="col-sm-2 control-label"><span ng-show="$index==0">代理后端</span></label>
190
+ <div class="controls">
191
+ <input ng-model="backend.server" type="text" class="form-control" placeholder="格式为:IP:端口 或 域名:端口">
192
+ <input ng-model="backend.weight" type="text" class="form-control" placeholder="权重值" ng-show="location.proxy.backends.length>1&&location.proxy.balance=='weight'">
193
+ <button class="btn btn-default" title="删除该后端" ng-click="proxy_deletebackend($parent.$index, $index)" ng-show="location.proxy.backends.length>1"><i class="glyphicon glyphicon-minus"></i></button>
194
+ <button class="btn btn-default" title="增加一个后端" ng-click="proxy_addbackend($parent.$index)" ng-show="$index==location.proxy.backends.length-1"><i class="glyphicon glyphicon-plus"></i></button>
195
+ </div>
196
+ </div>
197
+ <div class="form-inline" ng-show="location.proxy.backends.length>1">
198
+ <div class="controls">
199
+ 失效条件:<input ng-model="backend.fail_timeout" type="text" class="form-control"> 秒内失败
200
+ <input ng-model="backend.max_fails" type="text" class="form-control"> 次
201
+ </div>
202
+ </div>
203
+ </div>
204
+ <div class="form-inline" ng-show="location.engine=='proxy'&&location.proxy.backends.length>1">
205
+ <label class="col-sm-2 control-label">负载均衡</label>
206
+ <div class="controls">
207
+ <label class="radio-inline">
208
+ <input type="radio" ng-model="location.proxy.balance" value="weight"> 按权重分配
209
+ </label>
210
+ <label class="radio-inline">
211
+ <input type="radio" ng-model="location.proxy.balance" value="ip_hash"> 根据IP自动分配
212
+ </label>
213
+ <label class="radio-inline" ng-show="true | ifverget:[nginx_version, '1.3.1']">
214
+ <input type="radio" ng-model="location.proxy.balance" value="least_conn"> 最少连接优先分配
215
+ </label>
216
+ </div>
217
+ </div>
218
+ <div class="form-inline" ng-show="location.engine=='proxy'&&location.proxy.backends.length>1">
219
+ <label class="col-sm-2 control-label">保持连接</label>
220
+ <div class="controls">
221
+ <input ng-model="location.proxy.keepalive" type="text" class="form-control" placeholder="到后端保持的连接数">
222
+ <span class="help-block">这里设置的是保持连接的最大数量,而不是允许连接的数量,最大连接数量不受限制。</span>
223
+ </div>
224
+ </div>
225
+ <div class="form-inline" ng-show="location.engine=='proxy'">
226
+ <label class="col-sm-2 control-label">缓存设置</label>
227
+ <div class="controls">
228
+ <label class="checkbox-inline">
229
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_enable"> 启用反向代理缓存
230
+ </label>
231
+ </div>
232
+ </div>
233
+ <div ng-show="location.engine=='proxy'&&location.proxy.proxy_cache_enable" style="margin-left:70px">
234
+ <div class="form-inline">
235
+ <label class="col-sm-2 control-label">缓存区域</label>
236
+ <div class="controls">
237
+ <select class="form-control" style="width:150px" ng-model="location.proxy.proxy_cache" ng-options="cache for cache in proxy_caches"></select>
238
+ <button class="btn btn-default" title="重新加载" ng-click="loadproxycaches()"><i class="glyphicon glyphicon-refresh"></i></button>
239
+ <span class="help-block">如尚未创建缓存区,请<a href="#/service/nginx?s=proxy" target="_blank">点此设定</a>。</span>
240
+ </div>
241
+ </div>
242
+ <div class="form-inline">
243
+ <label class="col-sm-2 control-label">缓存条件</label>
244
+ <div class="controls">
245
+ 至少请求 <input type="text" class="form-control" ng-model="location.proxy.proxy_cache_min_uses"> 次后才缓存资源
246
+ </div>
247
+ </div>
248
+ <div class="form-inline">
249
+ <label class="col-sm-2 control-label">请求类型</label>
250
+ <div class="controls">
251
+ <label class="checkbox-inline">
252
+ <input type="checkbox" checked disabled> GET
253
+ </label>
254
+ <label class="checkbox-inline">
255
+ <input type="checkbox" checked disabled> HEAD
256
+ </label>
257
+ <label class="checkbox-inline">
258
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_methods_post"> POST
259
+ </label>
260
+ <span class="help-block">缓存以上选中的请求类型。</span>
261
+ </div>
262
+ </div>
263
+ <div class="form-inline">
264
+ <label class="col-sm-2 control-label">资源标识</label>
265
+ <div class="controls">
266
+ <label class="checkbox-inline"><input type="checkbox" ng-model="location.proxy.proxy_cache_key.schema"> 协议</label>
267
+ <label class="checkbox-inline"><input type="checkbox" ng-model="location.proxy.proxy_cache_key.host"> 主机名</label>
268
+ <label class="checkbox-inline"><input type="checkbox" ng-model="location.proxy.proxy_cache_key.proxy_host"> 后端主机名</label>
269
+ <label class="checkbox-inline"><input type="checkbox" ng-model="location.proxy.proxy_cache_key.uri"> 请求路径</label>
270
+ <span class="help-block">缓存资源的唯一性将由以上组合确定。</span>
271
+ </div>
272
+ </div>
273
+ <div class="form-inline">
274
+ <label class="col-sm-2 control-label">缓存过期</label>
275
+ <div class="controls">
276
+ <button class="btn btn-default" ng-click="proxy_addvalid($index)" ng-show="location.proxy.proxy_cache_valid.length==0"><i class="glyphicon glyphicon-plus"></i> 新增缓存过期配置</button>
277
+ <div ng-repeat="valid in location.proxy.proxy_cache_valid">
278
+ 状态码:
279
+ <select class="form-control" style="width:80px;" ng-model="valid.code">
280
+ <option value="any">所有</option>
281
+ <option value="200">200</option>
282
+ <option value="301">301</option>
283
+ <option value="302">302</option>
284
+ <option value="404">404</option>
285
+ <option value="500">500</option>
286
+ <option value="502">502</option>
287
+ <option value="503">503</option>
288
+ <option value="504">504</option>
289
+ </select>,过期时间:
290
+ <input class="form-control" type="text" ng-model="valid.time" style="width: 60px;">
291
+ <select class="form-control" ng-model="valid.time_unit">
292
+ <option value="s">秒</option>
293
+ <option value="m">分钟</option>
294
+ <option value="h">小时</option>
295
+ <option value="d">天</option>
296
+ </select>
297
+ <button class="btn btn-default" title="删除该行" ng-click="proxy_deletevalid($parent.$index, $index)"><i class="glyphicon glyphicon-minus"></i></button>
298
+ <button class="btn btn-default" title="新增一行" ng-click="proxy_addvalid($parent.$index)" ng-show="$index==location.proxy.proxy_cache_valid.length-1"><i class="glyphicon glyphicon-plus"></i></button>
299
+ </div>
300
+ </div>
301
+ </div>
302
+ <div class="form-inline">
303
+ <label class="col-sm-2 control-label">旧缓存</label>
304
+ <div class="controls">
305
+ <span style="margin-top:3px;margin-bottom:0px;display:block">在以下情况下,直接使用旧的缓存:</span>
306
+ <label class="checkbox-inline">
307
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.error"> 连接后端出错
308
+ </label>
309
+ <label class="checkbox-inline">
310
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.timeout"> 连接后端超时
311
+ </label>
312
+ <label class="checkbox-inline">
313
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.invalid_header"> 后端返回错误
314
+ </label>
315
+ <label class="checkbox-inline">
316
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.updating"> 缓存正在更新
317
+ </label><br>
318
+ <label class="checkbox-inline">
319
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.http_500"> 后端 500 错误
320
+ </label>
321
+ <label class="checkbox-inline">
322
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.http_502"> 后端 502 错误
323
+ </label>
324
+ <label class="checkbox-inline">
325
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.http_503"> 后端 503 错误
326
+ </label>
327
+ <label class="checkbox-inline">
328
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.http_504"> 后端 504 错误
329
+ </label>
330
+ <label class="checkbox-inline">
331
+ <input type="checkbox" ng-model="location.proxy.proxy_cache_use_stale.http_404"> 后端 404 错误
332
+ </label>
333
+ </div>
334
+ </div>
335
+ <div class="form-inline" ng-show="true | ifverget:[nginx_version, '1.1.12']">
336
+ <label class="col-sm-2 control-label">并发锁定</label>
337
+ <div class="controls">
338
+ <p><label class="checkbox-inline"><input type="checkbox" ng-model="location.proxy.proxy_cache_lock"> 启用并发锁定</label></p>
339
+ <div class="input-group">
340
+ <input type="text" class="form-control" ng-disabled="!location.proxy.proxy_cache_lock" ng-model="location.proxy.proxy_cache_lock_timeout">
341
+ <span class="input-group-addon">秒</span>
342
+ </div>
343
+ <span class="help-block">并发锁定可防止多个相同请求向后端请求同一资源。</span>
344
+ </div>
345
+ </div>
346
+ </div>
347
+ <div class="form-inline" ng-show="location.engine=='error'">
348
+ <label class="col-sm-2 control-label">错误代码</label>
349
+ <div class="controls">
350
+ <select class="form-control" ng-model="location.error.code">
351
+ <option value="401">401 - 未授权的访问</option>
352
+ <option value="403">403 - 禁止访问</option>
353
+ <option value="404">404 - 页面无法找到</option>
354
+ <option value="500">500 - 服务器内部错误</option>
355
+ <option value="502">502 - 网关错误</option>
356
+ </select>
357
+ </div>
358
+ </div>
359
+ <div class="form-inline" ng-show="location.engine=='static'">
360
+ <label class="checkbox-inline">
361
+ <input ng-model="location.static.rewrite_enable" ng-disabled="processing" type="checkbox">在该路径下启用 Rewrite
362
+ </label>
363
+ </div>
364
+ <div class="form-inline" ng-show="location.engine=='static' && location.static.rewrite_enable" style="display:none">
365
+ <label class="checkbox-inline">
366
+ <input ng-model="location.static.rewrite_detect_file" ng-disabled="processing" type="checkbox">仅当文件不存在时启用 Rewrite
367
+ </label>
368
+ </div>
369
+ <div class="form-inline" ng-show="location.engine=='static' && location.static.rewrite_enable" style="display:none">
370
+ <textarea class="form-control" ng-model="location.static.rewrite_rules" style="width:100%;height:100px;margin-top:5px;"></textarea>
371
+ <p><a href="https://docs.inpanel.org/?sec=nginx_rewrite" target="_blank">常用 Rewrite 规则参考</a></p>
372
+ </div>
373
+ <div class="form-inline" style="margin-top:5px;margin-bottom:0" ng-show="location.engine=='fastcgi'">
374
+ <label class="col-sm-2 control-label">Rewrite</label>
375
+ <div class="controls">
376
+ <label class="checkbox-inline">
377
+ <input ng-model="location.fastcgi.rewrite_enable" ng-disabled="processing" type="checkbox">在该路径下启用 Rewrite
378
+ </label>
379
+ </div>
380
+ </div>
381
+ <div class="form-inline" ng-show="location.fastcgi.rewrite_enable" style="display:none">
382
+ <div class="controls">
383
+ <label class="checkbox-inline">
384
+ <input ng-model="location.fastcgi.rewrite_detect_file" ng-disabled="processing" type="checkbox">
385
+ 仅当文件不存在时启用 Rewrite
386
+ </label><br>
387
+ <textarea class="form-control" ng-model="location.fastcgi.rewrite_rules" style="width:100%;height:100px;margin-top:5px;"></textarea>
388
+ <br><a href="https://docs.inpanel.org/?sec=nginx_rewrite" target="_blank">常用 Rewrite 规则参考</a>
389
+ </div>
390
+ </div>
391
+ </div>
392
+ </div>
393
+ </div>
394
+ </div>
395
+ </div>
396
+ </div>
397
+ </div>
398
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='ssl'" id="ssl">
399
+ <div class="form-horizontal form-horizontal-small">
400
+ <div class="form-group">
401
+ <label class="col-sm-2 control-label">SSL 开关</label>
402
+ <div class="col-sm-10">
403
+ <div class="btn-group">
404
+ <button class="btn btn-default" ng-class="'active' | iftrue: ssl_enabled" ng-click="ssl_status_set(true)" title="统一打开 SSL">打开</button>
405
+ <button class="btn btn-default" ng-class="'active' | iftrue: !ssl_enabled" ng-click="ssl_status_set(false)" title="统一关闭 SSL">关闭</button>
406
+ </div>
407
+ </div>
408
+ </div>
409
+ <div class="form-group">
410
+ <label class="col-sm-2 control-label">SSL 证书</label>
411
+ <div class="col-sm-10">
412
+ <div class="input-group">
413
+ <div class="input-group-btn">
414
+ <button class="btn btn-default" ng-click="selectsslcrt()" title="选择证书文件"><i class="glyphicon glyphicon-folder-open"></i></button>
415
+ </div>
416
+ <input ng-model="setting.ssl_crt" type="text" class="form-control" placeholder="SSL 证书文件路径">
417
+ </div>
418
+ </div>
419
+ </div>
420
+ <div class="form-group">
421
+ <label class="col-sm-2 control-label">SSL 密钥</label>
422
+ <div class="col-sm-10">
423
+ <div class="input-group">
424
+ <div class="input-group-btn">
425
+ <button class="btn btn-default" ng-click="selectsslkey()" title="选择密钥文件"><i class="glyphicon glyphicon-folder-open"></i></button>
426
+ </div>
427
+ <input ng-model="setting.ssl_key" type="text" class="form-control" placeholder="SSL 密钥文件路径">
428
+ </div>
429
+ </div>
430
+ </div>
431
+ </div>
432
+ </div>
433
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='rewrite'" id="rewrite">
434
+ <div class="form-horizontal form-horizontal-small">
435
+ <div class="form-group form-inline">
436
+ <label class="col-sm-2 control-label">Rewrite</label>
437
+ <div class="col-sm-10">
438
+ <div class="form-inline" style="margin-bottom:10px;">
439
+ <label class="checkbox-inline"><input ng-model="setting.rewrite_enable" type="checkbox">启用全局 Rewrite</label>
440
+ </div>
441
+ <div class="form-inline" style="margin-bottom:10px;">
442
+ <select class="form-control" ng-model="rewrite_template" ng-disabled="!setting.rewrite_enable">
443
+ <option value="">常用 Rewrite 规则</option>
444
+ <option value="301_1">301跳转,保留原路径</option>
445
+ <option value="301_2">301跳转,不保留原路径</option>
446
+ <option value="302_1">302跳转,保留原路径</option>
447
+ <option value="302_2">302跳转,不保留原路径</option>
448
+ </select>
449
+ </div>
450
+ <div class="form-inline" style="margin-bottom:10px;">
451
+ <textarea class="form-control" ng-model="setting.rewrite_rules" ng-disabled="!setting.rewrite_enable" style="width:100%;height:100px;"></textarea>
452
+ </div>
453
+ </div>
454
+ </div>
455
+ </div>
456
+ </div>
457
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='advanced'" id="advanced">
458
+ <div class="form-horizontal form-horizontal-small">
459
+ <div class="form-group form-inline">
460
+ <label class="col-sm-2 control-label">下载限制</label>
461
+ <div class="col-sm-10">
462
+ <div class="input-group">
463
+ <input class="form-control" ng-model="setting.limit_rate" type="text" placeholder="不限制">
464
+ <span class="input-group-addon">KB / S</span>
465
+ </div>
466
+ </div>
467
+ </div>
468
+ <div class="form-group form-inline">
469
+ <label class="col-sm-2 control-label">连接限制</label>
470
+ <div class="col-sm-10">
471
+ <div class="input-group">
472
+ <input class="form-control" ng-model="setting.limit_conn" type="text" placeholder="不限制">
473
+ <span class="input-group-addon">个 / IP</span>
474
+ </div>
475
+ </div>
476
+ </div>
477
+ <div class="form-group form-inline">
478
+ <label class="col-sm-2 control-label">默认编码</label>
479
+ <div class="col-sm-10">
480
+ <select class="form-control" ng-model="setting.charset">
481
+ <option value="">默认</option>
482
+ <option value="utf-8">UTF-8</option>
483
+ <option value="gb2312">GB2312</option>
484
+ <option value="gbk">GBK</option>
485
+ <option value="gb18030">GB18030</option>
486
+ <option value="big5">BIG5</option>
487
+ <option value="euc-jp">EUC-JP</option>
488
+ <option value="euc-kr">EUC-KR</option>
489
+ <option value="iso-8859-2">ISO-8859-2</option>
490
+ <option value="shift_jis">Shift_JIS</option>
491
+ </select>
492
+ </div>
493
+ </div>
494
+ <div class="form-group">
495
+ <label class="col-sm-2 control-label">首页文件</label>
496
+ <div class="col-sm-10">
497
+ <input class="form-control" ng-model="setting.index" type="text">
498
+ </div>
499
+ </div>
500
+ <div class="form-group form-inline">
501
+ <label class="col-sm-2 control-label">监听地址</label>
502
+ <div class="col-sm-10">
503
+ <div ng-repeat="listen in setting.listens">
504
+ <div class="input-group">
505
+ <input class="form-control" ng-model="listen.ip" type="text" placeholder="默认监听所有可用IP">
506
+ <div class="input-group-addon" style="border-left: none;border-right:none;">:</div>
507
+ <input class="form-control" ng-model="listen.port" type="text" placeholder="端口">
508
+ <div class="input-group-btn">
509
+ <button class="btn btn-default" ng-click="deletelisten()" ng-disabled="setting.listens.length<2" title="删除监听地址"><i class="glyphicon glyphicon-minus"></i></button>
510
+ <button class="btn btn-default" ng-click="addlisten()" title="增加监听地址"><i class="glyphicon glyphicon-plus"></i></button>
511
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">端口 <span class="caret"></span></button>
512
+ <ul class="dropdown-menu dropdown-menu-right">
513
+ <li><a href="javascript:void(0);" ng-click="listen.port='80'">80</a></li>
514
+ <li><a href="javascript:void(0);" ng-click="listen.port='81'">81</a></li>
515
+ <li><a href="javascript:void(0);" ng-click="listen.port='443'">443</a></li>
516
+ <li><a href="javascript:void(0);" ng-click="listen.port='8080'">8080</a></li>
517
+ <li><a href="javascript:void(0);" ng-click="listen.port='8899'">8899</a></li>
518
+ <li><a href="javascript:void(0);" ng-click="listen.port='9090'">9090</a></li>
519
+ <!-- <li role="separator" class="divider"></li> -->
520
+ </ul>
521
+ </div>
522
+ </div>
523
+ <p class="form-inline">
524
+ <label class="checkbox-inline"><input ng-model="listen.ssl" type="checkbox">启用SSL加密(https)</label>
525
+ <label class="checkbox-inline"><input ng-model="listen.default_server" type="checkbox">作为默认站点</label>
526
+ </p>
527
+ </div>
528
+ </div>
529
+ </div>
530
+ </div>
531
+ </div>
532
+ </div>
533
+ <hr/>
534
+ <p>
535
+ <button class="btn btn-primary" ng-click="submit()">提交</button>
536
+ <button class="btn btn-success" ng-click="submit('active')">生效</button>
537
+ <button class="btn btn-warning" ng-show="action=='edit'" ng-click="restore()">重置</button>
538
+ <a class="btn btn-default" href="#/site?s=nginx">取消</a>
539
+ </p>
540
+ </div>
541
+ </div>
542
+
543
+ <div id="selector" class="modal fade">
544
+ <div class="modal-dialog" role="document">
545
+ <div class="modal-content">
546
+ <div class="modal-header">
547
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
548
+ <h3 class="modal-title">{{selector_title}}</h3>
549
+ </div>
550
+ <div class="modal-body">
551
+ <div selector></div>
552
+ </div>
553
+ <div class="modal-footer">
554
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
555
+ </div>
556
+ </div>
557
+ </div>
558
+ </div>
@@ -0,0 +1,19 @@
1
+ <div class="navbar navbar-default">
2
+ <div class="navbar-header">
3
+ <a class="navbar-brand" href="/#/">InPanel</a>
4
+ </div>
5
+ </div>
6
+
7
+ <div class="panel panel-default" ng-show="!Auth.processing" style="display:none">
8
+ <div class="panel-heading">
9
+ <div class="panel-title">
10
+ <i class="glyphicon glyphicon-ban-circle"></i>
11
+ <span> 不好意思,页面不存在 !</span>
12
+ </div>
13
+ </div>
14
+ <div class="panel-body">
15
+ <p>请检查您是否输入了正确的地址!</p>
16
+ <button class="btn btn-default" onclick="history.back()">返回上一页</button>
17
+ <a class="btn btn-default" href="/#/">返回主界面</a>
18
+ </div>
19
+ </div>