玛瑙,用铁锈写的简单的双子座服务器

2021-03-11 03:40:45

Argate是Gemini网络协议的服务器,用Rust编程语言构建。玛瑙具有很少的功能,并且只能为静态文件提供服务。它使用异步I / O,即使在低端硬件上运行并服务许多并发请求时也应该非常有效。

由于默认使用端口1965年以来,您应该能够在同一设备上运行其他服务器(如apache或nginx)。

注意:玛瑙目前只是在不稳定的频道中,并在下次版本被标记后将达到发行频道

如果您安装了防锈工具链,请运行货物安装玛瑙以从箱子安装玛瑙。

下载源代码并运行Cargo Build - 允许在源存储库中释放,然后在目标/释放/庆祝中找到二进制文件。

如果系统有一个,则可以使用工具目录中的安装脚本以获取其余步骤。如果没有,请考虑贡献一个,以使其更容易获得更低的技术娴熟的用户!

生成自签名的TLS证书和私钥。例如,如果安装了OpenSSL 1.1,则可以使用以下命令使用以下命令。 (用双子座服务器的地址替换主机名example.com。)

openssl req-x509-newkey rsa:4096-keyout key.rsa -out cert.pem \ -days 3650-nodes -subj" /cn=example.com"

运行服务器。您可以使用以下参数指定要在请求URL中侦听的内容目录,证书和密钥文件,IP地址和端口,以期望的主机名,以及包含在MIME类型中的默认语言代码对于Text / Gemini文件:(再次将Hostname example.com与Gemini服务器的地址替换为。)

玛瑙 - Content Path / to / content / \ --key key.rsa \ --cert cert.pem \ - -addr [::]:1965 \ --addr 0.0.0.0:1965 \ --hostname example.com \ - US

所有命令行参数都是可选的。运行Agate --help以查看省略参数时使用的默认值。

当客户端请求URL Gemini://example.com/foo/bar时,Agate将在路径/到/内容/ foo / bar中响应该文件。如果所请求路径的任何段以点开始,ARATE将用状态代码52响应,无论文件是否存在。可以使用-serve-cleftray禁用此行为或.meta配置文件中的特定文件的条目(请参阅Meta-Prepsets)。如果该路径上有一个目录,Agate将查找该目录中名为index.gmi的文件。

默认情况下玛瑙支持TLSv1.2和TLSv1.3。您可以使用Flag -Only-TLS13(或其短版本-3)禁用对TLSv1.2的支持。建议不要因为它可能与某些客户端破坏兼容性而。 Gemini规范需要与TLSv1.2&#34的兼容性;现在"因为并非所有平台都有良好支持TLSV1.3(规范的§4.1)。

您可以通过将名为.Directory列表 - 确定的文件启用一个名为目录的基本目录列表。这对子目录没有效果。目录列表将隐藏名称以点(例如,.directory列表 - 确定文件本身或.meta配置文件)启动的文件和目录。

您可以在任何内容目录中放置一个名为.meta的文件。此文件存储有关在服务这些文件时使用的相邻文件的一些元数据。 .meta文件必须是UTF-8编码。您还可以使用-c标志(或长版 - Central-conf)启用中央配置文件。在这种情况下,玛糖将始终查找内容根目录中的.meta配置文件,并将忽略其他目录中的.meta文件。

在同一条线上的#后面的一切都是评论,并将被忽略。

所有其他线路必须具有表单<路径>:<元数据>,即从文件路径开始,后跟冒号,然后是元数据。

< path>是一个区分敏感的文件路径,磁盘上可能也可能不存在。如果导致目录,它被忽略。如果未使用中央配置文件模式,则使用当前目录中不是文件的路径是未定义的行为(例如,... /index.gmi将是未定义的行为)。您可以在现有路径中使用UNIX样式模式。例如,内容/ *将匹配内容内的任何文件,而内容/ **将另外匹配内容子目录中的任何文件。默认情况下,*和**默认情况下,*和** Globs将默认情况下不匹配由于它们的特殊含义。可以使用--serve-secric禁用此行为,或者通过明确地匹配以ef的点开始匹配文件内容/.*或content /**/.*。有关您可以使用的模式的更多信息,请参阅Glob :: pattern.rules的文档可以覆盖其他规则,因此如果文件与多个规则匹配,则最后一个适用。

清空玛瑙不会发送默认语言参数,即使在命令行上指定了它。

从分号开始,后跟MIME参数AGATE将指定的字符串将指定的字符串附加到MIME类型中,如果找到该文件。

从Gemini状态代码开始(即一个数字1-6,后跟另一个数字),并且空格玛瑙将发送元数据是否存在文件。该文件将不会被发送或访问。

一个MIME类型,可以包括参数Agate将使用此MIME类型而不是它将猜测,如果找到该文件。即使在命令行上指定了默认语言参数,也不会使用。

如果一行违反格式或看起来像案例3,但也不正确,可能会忽略。您应该检查您的日志。请知道,当访问各个目录中的文件时,首先读取此配置文件。所以启动后没有日志消息并不意味着.meta文件是可以的。

#这条线将被忽略。** / *。de.gmi:; lang = denl / ** / *。gmi:lang = nlindex.gmi:; lang = en-Uklicense:text / plain; charset = utf- 8gone.gmi:52这个文件不再在这里,抱歉。

如果这是内容根目录中的.meta文件,并且使用-c标志,这将导致以下响应标头:

nl目录中的任何非隐藏文件,结尾于.gmi(包括非隐藏子目录) - > 20文字/双子座; Lang = NL

(* 1)在理论上,语法是典型的INI样文件,也允许与[部分](默认部分设置为解析器中的MIME),因为所有其他部分都被忽略,这不会忽略差异。这也意味着您可以在理论上也可以使用=而不是:。对于更多信息,您可以访问ConfigParser的文档。

玛瑙使用env_logger箱子,并允许您通过设置默认rust_log环境变量来设置日志记录。有关更多信息,请参阅env_logger的文档。

玛瑙对虚拟主机具有基本支持。如果指定多个--HOSTNames,ARADE将在内容根目录中查看具有相应主机名的目录。例如,如果其中一个主机名是example.com,则内容根目录被设置为默认值./content,和Gemini://example.com/file.gmi请求,然后玛瑙会寻找./content/example.com/file.gmi。仅在指定多个--hostnames时才启用此行为.Agate不支持不同主机名的不同证书,您必须为所有域(多域证书)使用单一证书。

如果要为多个域提供相同的内容,则可以通过未指定--hostname来禁用主机名检查。在这种情况下,玛瑙将忽略一个请求和#39; S hostname除了检查有一个。

"错误:"如果发生错误,则零件将仅记录。这只应该用于信息目的,因为状态代码应该提供发生错误的信息。如果在未建立连接中的错误(例如,由于TLS错误),将使用状态代码00。

除了所选的日志级别,日志中可能发生一些线路。例如初始"聆听..."关于列出特定目录的线或信息。