为uWSGI本地订阅的域名动态路由到localhost请求。
项目描述
# uWSGI-local-DNS-resolver
uWSGI-local-DNS-resolver (以下简称 __uWSGI-DNS__) 是一个DNS服务器,将所有指向 uWSGI 订阅域名的请求解析到 `localhost`。
# 为什么?
我们的主要目的是让用户通过 uWSGI HTTP 订阅服务器无缝连接到他们的本地开发实例。
## 项目状态
uWSGI-DNS 仍在开发中。因此,它的API可能会发生变化。
## 特性
- Python 2 & Python 3 兼容性。
- UNIX/Linux 系统兼容性。
- 新的 uWSGI 订阅自动刷新域名。
- 故障节点检测和处理。
## 安装
在 uWSGI-DNS 登录 PyPi 之前,您可以按照以下步骤安装它
```bash
$ git clone https://github.com/20tab/uwsgi-local-dns-resolver.git
$ cd uwsgi-local-dns-resolver
$ python setup.py install # 可能需要 sudo
```
如果您愿意,可以使用以下命令测试服务器
```bash
$ sudo uwsgidns # 我们需要 sudo 来绑定保留端口 53
```
一旦启动,您应该在 `localhost:53` 上有一个 DNS 服务器正在运行。
注意:在虚拟环境中安装 uWSGI-DNS 是可能的,但在将其集成到 uWSGI 配置文件时需要特别注意。
## 配置
```bash
$ uwsgidns -h
用法: uwsgidns [-h] [-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}] [-p]
[-u 上游 DNS 服务器 URI] [-s uWSGI-HTTP 统计 URI]
解析到 localhost 的 uWSGI HTTP 订阅域名的 DNS 服务器。
可选参数
-h, --help 显示此帮助信息并退出
-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}, --logging {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}
设置日志级别
-p, --proxy 将其他请求代理到上游 DNS 服务器
(--upstream)
-u 上游 DNS 服务器 URI, --upstream 上游 DNS 服务器 URI
上游 DNS 服务器 URI(带 --proxy),
默认为 8.8.8.8:53
-s uwsgi-HTTP 统计 URI, --stats uwsgi-HTTP 统计 URI
uWSGI HTTP 订阅统计服务器的 URI(远程:端口)
统计服务器
```
### 非本地请求
uWSGI-DNS 可以作为 DNS 代理(`-p`),将每个非本地请求转发到 `-u` 标志指定的上游服务器;
否则,它将简单地丢弃此类请求,让操作系统回退 DNS 服务器处理它们。
### uWSGI 统计
设置 `-s` 将使 uWSGI-DNS 定期轮询 uWSGI 订阅服务器。
这样,uWSGI-DNS 将会注意到失败的/消失的 HTTP 节点,并将它们从本地域名中删除。
## uWSGI (Emperor) 集成
与 uWSGI Emperor 的集成简单直接。
我们假设您使用 uWSGI HTTP 订阅服务器。
要集成 uWSGI-DNS,您可以按照以下方式编辑您的 emperor/订阅服务器的配置文件:
```ini
; uWSGI 订阅服务器 - ini 配置文件
http = :80
http-subscription-server = 127.0.0.1:5005
http-stats-server = 127.0.0.1:5004
; resubscribe 让 uWSGI-DNS 了解新的 HTTP 节点
http-resubscribe = 127.0.0.1:9696
; 使用 HTTP 订阅服务器启动 uWSGI-DNS
; 您可以在这里调整命令行参数和路径
attach-daemon = uwsgidns
```
每次启动订阅系统时,uWSGI-DNS 服务器都会与之一起启动。
请注意,在下文中,我们提供了一些更具体的操作系统示例。
## 操作系统集成
TODO: 其他操作系统的集成。
操作系统集成很大程度上取决于每个平台。
我们这里只提供了一些示例,根据您的需求进行修改。
### OS X 集成
您可以使用 LaunchD 在启动时自动启动 uWSGI Emperor 实例。
为此,在 `/Library/LaunchDaemons/` 目录中创建 `it.unbit.uwsgi.emperor.plist` 文件,并确保它有如下内容。
相同的示例也可以在这个存储库中找到。
```plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>RunAtLoad</key>
<true/>
<key>Disabled</key>
<false/>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>it.unbit.uwsgi.emperor</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/uwsgi</string>
<string>--master</string>
<string>--die-on-term</string>
<!-- 如果您使用的是单块 uWSGI 构建,您可能需要或不需要一些插件 -->
<string>--plugin</string>
<string>syslog</string>
<string>--logger</string>
<string>syslog:</string>
<string>--emperor</string>
<string>/Users/*/*/vassals/*.ini</string>
<string>/Users/*/vassals/*.ini</string>
<string>/Users/*/*/vassals/*.ini</string>
<string>--emperor-tyrant</string>
<string>--http</string>
<string>:80</string>
<string>--http-subscription-server</string>
<string>127.0.0.1:5005</string>
<string>--http-resubscribe</string>
<string>127.0.0.1:9696</string>
<string>--http-stats-server</string>
<string>127.0.0.1:5004</string>
<string>--emperor-stats-server</string>
<string>127.0.0.1:5000</string>
<string>--attach-daemon</string>
</array>
<字符串>/usr/local/bin/uwsgidns -p</字符串>
</数组>
</dict>
</plist>
```
将诸侯配置文件放入您的家目录中,然后使用以下命令启动uWSGI皇帝:
```bash
$ sudo launchctl load /Library/LaunchDaemons/it.unbit.uwsgi.emperor.plist
```
您现在可以编辑您的连接参数,并将[自定义DNS服务器](https://support.apple.com/kb/PH14159)指向`127.0.0.1`。
DNS解析器将尝试解决本地请求,然后将其他请求代理到上游。
默认上游是`8.8.8.8:53`,您可以使用`-u UPSTREAM_ADDRESS:PORT`标志自定义它。
_Bonus_:在编辑您的网络设置之前,您可以创建一个新的[网络位置](https://support.apple.com/en-us/HT202480),专门用于开发,并编辑其DNS设置。
## 测试
TODO:添加测试。
uWSGI-local-DNS-resolver (以下简称 __uWSGI-DNS__) 是一个DNS服务器,将所有指向 uWSGI 订阅域名的请求解析到 `localhost`。
# 为什么?
我们的主要目的是让用户通过 uWSGI HTTP 订阅服务器无缝连接到他们的本地开发实例。
## 项目状态
uWSGI-DNS 仍在开发中。因此,它的API可能会发生变化。
## 特性
- Python 2 & Python 3 兼容性。
- UNIX/Linux 系统兼容性。
- 新的 uWSGI 订阅自动刷新域名。
- 故障节点检测和处理。
## 安装
在 uWSGI-DNS 登录 PyPi 之前,您可以按照以下步骤安装它
```bash
$ git clone https://github.com/20tab/uwsgi-local-dns-resolver.git
$ cd uwsgi-local-dns-resolver
$ python setup.py install # 可能需要 sudo
```
如果您愿意,可以使用以下命令测试服务器
```bash
$ sudo uwsgidns # 我们需要 sudo 来绑定保留端口 53
```
一旦启动,您应该在 `localhost:53` 上有一个 DNS 服务器正在运行。
注意:在虚拟环境中安装 uWSGI-DNS 是可能的,但在将其集成到 uWSGI 配置文件时需要特别注意。
## 配置
```bash
$ uwsgidns -h
用法: uwsgidns [-h] [-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}] [-p]
[-u 上游 DNS 服务器 URI] [-s uWSGI-HTTP 统计 URI]
解析到 localhost 的 uWSGI HTTP 订阅域名的 DNS 服务器。
可选参数
-h, --help 显示此帮助信息并退出
-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}, --logging {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}
设置日志级别
-p, --proxy 将其他请求代理到上游 DNS 服务器
(--upstream)
-u 上游 DNS 服务器 URI, --upstream 上游 DNS 服务器 URI
上游 DNS 服务器 URI(带 --proxy),
默认为 8.8.8.8:53
-s uwsgi-HTTP 统计 URI, --stats uwsgi-HTTP 统计 URI
uWSGI HTTP 订阅统计服务器的 URI(远程:端口)
统计服务器
```
### 非本地请求
uWSGI-DNS 可以作为 DNS 代理(`-p`),将每个非本地请求转发到 `-u` 标志指定的上游服务器;
否则,它将简单地丢弃此类请求,让操作系统回退 DNS 服务器处理它们。
### uWSGI 统计
设置 `-s` 将使 uWSGI-DNS 定期轮询 uWSGI 订阅服务器。
这样,uWSGI-DNS 将会注意到失败的/消失的 HTTP 节点,并将它们从本地域名中删除。
## uWSGI (Emperor) 集成
与 uWSGI Emperor 的集成简单直接。
我们假设您使用 uWSGI HTTP 订阅服务器。
要集成 uWSGI-DNS,您可以按照以下方式编辑您的 emperor/订阅服务器的配置文件:
```ini
; uWSGI 订阅服务器 - ini 配置文件
http = :80
http-subscription-server = 127.0.0.1:5005
http-stats-server = 127.0.0.1:5004
; resubscribe 让 uWSGI-DNS 了解新的 HTTP 节点
http-resubscribe = 127.0.0.1:9696
; 使用 HTTP 订阅服务器启动 uWSGI-DNS
; 您可以在这里调整命令行参数和路径
attach-daemon = uwsgidns
```
每次启动订阅系统时,uWSGI-DNS 服务器都会与之一起启动。
请注意,在下文中,我们提供了一些更具体的操作系统示例。
## 操作系统集成
TODO: 其他操作系统的集成。
操作系统集成很大程度上取决于每个平台。
我们这里只提供了一些示例,根据您的需求进行修改。
### OS X 集成
您可以使用 LaunchD 在启动时自动启动 uWSGI Emperor 实例。
为此,在 `/Library/LaunchDaemons/` 目录中创建 `it.unbit.uwsgi.emperor.plist` 文件,并确保它有如下内容。
相同的示例也可以在这个存储库中找到。
```plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>RunAtLoad</key>
<true/>
<key>Disabled</key>
<false/>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>it.unbit.uwsgi.emperor</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/uwsgi</string>
<string>--master</string>
<string>--die-on-term</string>
<!-- 如果您使用的是单块 uWSGI 构建,您可能需要或不需要一些插件 -->
<string>--plugin</string>
<string>syslog</string>
<string>--logger</string>
<string>syslog:</string>
<string>--emperor</string>
<string>/Users/*/*/vassals/*.ini</string>
<string>/Users/*/vassals/*.ini</string>
<string>/Users/*/*/vassals/*.ini</string>
<string>--emperor-tyrant</string>
<string>--http</string>
<string>:80</string>
<string>--http-subscription-server</string>
<string>127.0.0.1:5005</string>
<string>--http-resubscribe</string>
<string>127.0.0.1:9696</string>
<string>--http-stats-server</string>
<string>127.0.0.1:5004</string>
<string>--emperor-stats-server</string>
<string>127.0.0.1:5000</string>
<string>--attach-daemon</string>
</array>
<字符串>/usr/local/bin/uwsgidns -p</字符串>
</数组>
</dict>
</plist>
```
将诸侯配置文件放入您的家目录中,然后使用以下命令启动uWSGI皇帝:
```bash
$ sudo launchctl load /Library/LaunchDaemons/it.unbit.uwsgi.emperor.plist
```
您现在可以编辑您的连接参数,并将[自定义DNS服务器](https://support.apple.com/kb/PH14159)指向`127.0.0.1`。
DNS解析器将尝试解决本地请求,然后将其他请求代理到上游。
默认上游是`8.8.8.8:53`,您可以使用`-u UPSTREAM_ADDRESS:PORT`标志自定义它。
_Bonus_:在编辑您的网络设置之前,您可以创建一个新的[网络位置](https://support.apple.com/en-us/HT202480),专门用于开发,并编辑其DNS设置。
## 测试
TODO:添加测试。
项目详情
关闭
uwsgidns-1.0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 316c7cd703abc5037455af857fdfdeda8e3b5cb337e5ecdc037a4b715b026939 |
|
MD5 | bdbac66f662d46f86cd33dd9f648249b |
|
BLAKE2b-256 | 95592ff40627dc8a7eb193113890ee1d7bfdaaafb1ddee190ade43421979a61b |