Nginx

RuxOS 支持在 Qemu 上运行 Nginx 构建服务器。

拉取 Nginx 目录

执行:

git clone https://github.com/syswonder/rux-nginx.git ./apps/c/nginx

该命令将拉取Nginx的编译配置文件等文件放到 apps/c/nginx 目录下。

运行样例

如果您只是想要测试nginx的可运行性,而不关心nginx本身运行的内容,可以通过下面的命令直接运行样例

bash ./apps/c/nginx/example_run.sh

创建文件系统镜像

运行时,需要保证文件系统中存在以下文件:

/nginx/logs/error.log

/nginx/conf/nginx.conf

/nginx/conf/mime.types

其中,error.log 是日志文件(但是实际上没有用到),nginx.conf 是 Nginx 配置文件,告诉 Nginx 如何运行以及一些运行的参数。mime.type 是类型转化文件,告诉Nginx如何看待不同类型的文件。

如果 RuxOS 根目录下没有 disk.img,在运行时会自动创建一个符合条件的 img。

如果您想要重新生成镜像,可以运行 apps/c/nginx 目录下的 create_nginx_img.sh

创建网页文件

在默认设置下运行时,apps/c/nginx 目录下需要有一个名为 html 的文件夹,用来装载 Nginx 服务器的网页。

网页文件也可以设置在其他路径上,详见下面关于 nginx.conf 以及 9p 的内容

运行 Nginx

在上面的步骤完成后,在RuxOS的根目录下运行下面的命令,可以在5555端口上启动Nginx服务器。

make A=apps/c/nginx/ LOG=info NET=y BLK=y ARCH=aarch64 SMP=4 run

参数解释:

  • A: 该参数指向 Nginx 应用所在的目录。
  • LOG: LOG 表示输出的日志等级,更低的日志等级意味着更详细的输出。可选包含:error, warn, info, debug, trace
  • NET: 该参数用于使能 qemu 的 virtio-net。
  • BLK: 该参数用于使能 qemu 的 virtio-blk。
  • ARCH: ARCH 表示将 RuxOS 运行在何种架构上,可选架构参数包括: x86_64, aarch64, riscv64.
  • SMP: SMP 用于使能 RuxOS 的多核 feature,紧跟着的数字表示启动的核数。

注意,如果在第一次运行之后修改了源码或者运行参数,请运行下面的命令清理应用文件

make clean_c A=apps/c/nginx

如何连接、测试

当访问服务器的5555端口时,便可以访问网页

res

使用 Musl libc

默认情况下,RuxOS 的Nginx使用自定义的 C 应用程序 ruxlibc。

通过添加 MUSL=y 到运行的命令中,就能借助 RuxOS 集成好的标准 musl libc来编译、链接。

使用 9pfs

默认情况下,RuxOS 通过命令行中的 ARGS 参数来向应用传递参数,这种方法可能会带来不便。现在 RuxOS 已经成功集成了 9pfs,用于 host 和 qemu 进行文件目录的共享,即可以通过应用自己的配置文件来传递参数。

运行下面的命令:

make A=apps/c/nginx/ LOG=info NET=y BLK=y FEATURES=virtio-9p V9P=y V9P_PATH=./apps/c/nginx/html/ ARCH=aarch64 SMP=4 run

参数解释:

  • V9P: 使用 V9P=y 来使能 qemu 的 virtio-9p 后端。
  • FEATURES=virtio-9p:告诉 RuxOS 启用 9p 功能
  • V9P_PATH: V9P_PATH 指向 host 上的用于共享的目录,默认情况下这是网页文件的位置。

使用HTTPS

默认情况下,nginx用作http网络服务器,如果您想要使用https,请使用rux-nginx的with_ssl分支

rm -rf ./apps/c/nginx
git clone https://github.com/syswonder/rux-nginx.git -b with_ssl ./apps/c/nginx

其他运行步骤不变

nginx.conf

您可以修改apps/c/nginx目录下的 nginx.conf 文件来对 Nginx 的配置进行修改,包括修改 Nginx 服务器功能、修改服务器参数、修改 Nginx 运行选项等。

注意:

  • 除 http 服务器之外的功能尚未验证

  • 如果修改服务器参数(比如端口),请对 qemu 的相应设置(比如端口映射)做相应更改

  • 修改完 nginx.conf 后请将其复制到文件系统镜像中,您可以通过在 apps/c/nginx 目录下运行 ./create_nginx_img.sh 来完成

  • 使用 9pfs 时的 nginx.conf 会有所不同,其内容在 apps/c/nginx 目录下的 nginx_9p.conf 中,可以通过 ./create_nginx_img.sh 9p 的命令来将其复制到文件系统镜像中