使用 LUCI 应用商店(最简单,推荐新手)

这是最简单、最“OpenWrt”的方式,你不需要 SSH 登录路由器,直接在网页界面里就能完成安装和配置。

openwrt 挂网站
(图片来源网络,侵删)

安装必要的软件包

  1. 登录你的 OpenWrt 路由器管理界面(通常是 168.1.1)。

  2. 进入 系统 -> 软件包

  3. 过滤器 中搜索并安装以下软件包:

    • luci-app-uhttpd: 这是 uHTTPd 服务器的 Web 界面应用,uHTTPd 是 OpenWrt 自带的轻量级 Web 服务器。
    • uhttpd: Web 服务器本身。
    • luci-app-nginx: 如果你希望功能更强大,可以安装 Nginx,Nginx 比 uHTTPd 功能更丰富,性能也更好,尤其是在处理 PHP 等动态内容时。
    • nginx: Nginx 服务器本身。

    选择建议

    openwrt 挂网站
    (图片来源网络,侵删)
    • 只放静态网页(HTML, CSS, JS, 图片):安装 luci-app-uhttpduhttpd 即可。
    • 需要运行 PHP、WordPress、Typecho 等动态网站:强烈建议安装 luci-app-nginxnginx
  4. 点击 立即保存,等待软件包下载和安装完成。

配置 Web 服务器

安装完成后,进入 系统 -> 共享存储

  • 勾选 启用,然后点击 挂载,这会在你的路由器上创建一个 /mnt/sda1 这样的目录(如果你的 U 盘或硬盘是 /dev/sda1),所有网站文件都放在这里,这样即使路由器重启,文件也不会丢失。

配置你选择的 Web 服务器。

情况 A:使用 uHTTPd

openwrt 挂网站
(图片来源网络,侵删)
  1. 进入 网络 -> 服务 -> uHTTPD 服务器
  2. 常规设置
    • 端口:默认是 80 (HTTP),如果你要配置 HTTPS,可以再开一个 443 端口。
    • 根目录:这里填写你的共享存储路径,/mnt/sda1/www,你需要先在 U 盘里创建这个 www 文件夹。
    • 目录列表:根据需要选择是否允许列出目录内容。
    • 索引文件:默认是 index.html, index.htm
  3. 高级设置
    • 错误页面 404:可以自定义一个 404 错误页面。
  4. 虚拟主机:如果你有多个域名,可以在这里配置不同的域名指向不同的网站目录。
  5. 点击 保存 & 应用

情况 B:使用 Nginx

  1. 进入 系统 -> 软件包,找到 luci-app-nginx,点击 配置
  2. 这里你可以配置 Nginx 的全局设置、虚拟主机等,界面比 uHTTPd 复杂一些,但更强大。
  3. 关键配置:你需要手动编辑 Nginx 的配置文件,最直接的方法是 SSH 登录路由器。
    • 配置文件通常位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/ 目录下。
    • conf.d 目录下创建一个新的 .conf 文件来配置你的网站。

上传网站文件

  1. 将你的网站文件(index.html)复制到 U 盘的 www 目录下。
  2. 如何上传?
    • 方法一(推荐): 在你的电脑上,通过 SMB (Windows) 或 AFP (Mac) 挂载路由器的 U 盘,直接拖拽文件。
    • 方法二: 使用 WinSCP 或 FileZilla 等 SFTP/FTP 客户端连接路由器(需要先安装 vsftpdluci-app-vsftpd 软件包)。
    • 方法三: SSH 登录路由器,使用 scprz (需要安装 lrzsz) 命令传输文件。

访问你的网站

在局域网内的任何一台电脑或手机上,打开浏览器,输入路由器的 IP 地址(http://192.168.1.1),你应该就能看到你的网站了。


使用 Docker(最灵活,推荐进阶)

如果你的路由器性能足够好(CPU 和内存都比较充裕),并且你想运行完整的、标准化的网站环境(如 WordPress, Nextcloud 等),使用 Docker 是最佳选择。

安 Docker

  1. 系统要求: 需要 ARMv7 或 aarch64 架构,并且有足够的内存(建议至少 256MB,推荐 512MB 或更多)。
  2. 进入 系统 -> 软件包
  3. 安装 luci-app-dockerdocker 包。
  4. 安装后,在 系统 -> Docker 中可以看到管理界面。

创建网站数据目录

同样,在 系统 -> 共享存储 中启用你的硬盘/ U 盘,然后在里面为你的网站创建数据目录。 /mnt/sda1/docker/wordpress

运行 Docker 容器

你可以通过两种方式运行容器:

A. 使用 LUCI Docker 界面

  1. 进入 系统 -> Docker -> 容器
  2. 点击 添加
  3. 镜像: 输入你想要运行的镜像,nginx:alpinewordpress:latest
  4. : 这是关键,将本地的网站目录(如 /mnt/sda1/www)挂载到容器内的目录(如 /usr/share/nginx/html)。
  5. 端口: 将容器的端口(如 80)映射到路由器的端口(如 8080,避免和路由器管理界面冲突)。
  6. 环境变量: 如果是 WordPress 等应用,需要在这里设置数据库密码等。
  7. 点击 保存,然后启动容器。

B. 使用 Docker Compose(更推荐)

对于复杂的应用,Docker Compose 是管理多容器应用的利器。

  1. 在你的共享存储目录(如 /mnt/sda1/docker)下创建一个 docker-compose.yml 文件。
  2. SSH 登录路由器,使用 vinano 编辑器创建文件:
    cd /mnt/sda1/docker
    nano docker-compose.yml
  3. 粘贴一个 Nginx 的示例配置:
    version: '3'
    services:
      my-website:
        image: nginx:alpine
        container_name: my-website
        restart: always
        ports:
          - "8080:80"  # 将主机的8080端口映射到容器的80端口
        volumes:
          - ./www:/usr/share/nginx/html  # 将主机的./www目录挂载到容器
  4. 保存文件后,在目录下运行命令来启动:
    docker-compose up -d
  5. 访问 http://你的路由器IP:8080 即可看到 Nginx 的欢迎页面。

安全与网络配置(非常重要)

网站搭好了,但只能在局域网访问,要让外网也能访问,需要进行端口映射和 DDNS 配置。

端口转发

  1. 登录 OpenWrt 管理界面,进入 网络 -> 端口转发
  2. 点击 添加
  3. 名称: 给你的规则起个名字,如 "Web Server"。
  4. 外部 IP 地址: 留空,表示转发到所有进入 WAN 口的请求。
  5. 外部端口: 80 (HTTP) 和 443 (HTTPS),如果你的运营商屏蔽了 80 端口,可以尝试用其他端口,如 8080
  6. 内部 IP 地址: 你的路由器的 LAN IP 地址,即 168.1.1
  7. 内部端口: 和你 Web 服务器配置的端口一致,如果你用 uHTTPd 且端口是 80,这里就填 80
  8. 协议: TCP
  9. zones: wan
  10. 点击 保存

动态域名解析

由于你的家庭公网 IP 地址是会变的,你需要一个固定的域名来指向它。

  1. 网络 -> DDNS 中配置。
  2. 点击 添加
  3. 服务提供商: 选择你的 DDNS 服务商,如 "DynDNS.org", "No-IP.com", 或者国内的服务商如 "花生壳"。
  4. 域名: 你注册的域名。
  5. 用户名/密码: 你的 DDNS 账号和密码。
  6. 接口: WAN
  7. 强制更新间隔: 设置一个合理的值,如 10 分钟。
  8. 点击 保存 & 应用

你就可以通过你的 DDNS 域名从外网访问你的网站了。

使用 HTTPS(强烈推荐)

让网站使用 HTTPS 是必须的,这可以加密你的数据,防止被窃听。

  1. 获取 SSL 证书:
    • 推荐使用 Let's Encrypt: 免费且自动,你可以使用 acme 包(luci-app-acme)在 OpenWrt 上自动申请和续签证书。
    • 手动获取: 在其他电脑上使用 certbot 等工具申请,然后将证书文件通过 SCP 传到路由器上。
  2. 配置 Web 服务器:
    • uHTTPd: 在 网络 -> 服务 -> uHTTPD 服务器 中,配置 证书文件私钥文件 的路径,并启用 HTTPS 端口。
    • Nginx: 在 Nginx 的配置文件中,添加一个 server 块,监听 443 端口,并配置 ssl_certificatessl_certificate_key
  3. 强制跳转 HTTP 到 HTTPS: 在 Nginx 配置中,可以设置一个监听 80 端口的 server,将所有请求 301 重定向到 https://

方案 优点 缺点 适用人群
LUCI 软件包 安装配置简单,图形化界面,资源占用低 功能相对固定,灵活性不如 Docker OpenWrt 新手,只需要部署简单静态网站或小型博客
Docker 功能强大,应用生态丰富,标准化部署,可运行复杂应用 对路由器性能要求高,需要一定的 Linux 和 Docker 基础 进阶用户,需要部署 WordPress, Nextcloud 等复杂应用

对于绝大多数用户,从方案一开始是最稳妥的选择,当你需要更复杂的功能时,再考虑升级到方案二,祝你搭建顺利!