Skip to content

Commit

Permalink
Merge pull request #1 from lhw2002426/master
Browse files Browse the repository at this point in the history
add nginx app doc
  • Loading branch information
coolyjg authored Jan 2, 2024
2 parents 0beda4f + 80208aa commit a993263
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 0 deletions.
Binary file added src/chap02/apps/img/nginx-res.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
102 changes: 102 additions & 0 deletions src/chap02/apps/nginx.md
Original file line number Diff line number Diff line change
@@ -1 +1,103 @@
# Nginx

RuxOS 支持在 Qemu 上运行 [Nginx](https://www.nginx.com/)构建服务器。

## 创建文件系统镜像

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

`/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服务器的网页。如果您不想使用自己的网页,可以运行如下的命令来添加html的文件:

```shell
git clone https://github.com/syswonder/syswonder-web.git
mkdir -p apps/c/nginx/html
cp -r syswonder-web/docs/* apps/c/nginx/html
rm -f -r syswonder-web
```

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

## 运行 Nginx

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

```shell
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,紧跟着的数字表示启动的核数。

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

```shell
make clean_c A=apps/c/nginx
```

## 如何连接、测试

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

![res](img/nginx-res.png)

## 使用 Musl libc

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

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

## 使用 9pfs

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

运行下面的命令:

```shell
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 上的用于共享的目录,默认情况下这是网页文件的位置。

## 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`的命令来将其复制到文件系统镜像中

0 comments on commit a993263

Please sign in to comment.