如何使用 AppNode 面板完成“NodeBB”反代?

自从上篇文章 “使用 AppNode 面板 10 分钟完成搭建 NodeBB 论坛” 之后有网友咨询我搭建成功之后默认只能使用IP+端口访问,那么如何绑定域名访问呢?答案当然是反向代理了。那么如何在 AppNode 面板中反向代理 NodeBB 呢?请看下文

NodeBB 官方文档一直是有关于反向代理设置方法的说明的,但都是针对 Web 服务器源文件的配置,并没有针对面板方面的配置方法,而且 NodeBB 属于开源程序,技术咨询和支持基本上都只存在于 NodeBB 国外的官方论坛里,英文只认识26个字母的我只能望而却步,其使用的Node.js、Redis、Socket.IO又和我们平时接触的PHP、MySql有很大的区别,所以造成了入门门槛较高的问题。

NodeBB 官方文档是直接给出了Nginx反向代理配置的源文件,如下:

server {
    listen 80;

    server_name forum.example.org;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:4567;
        proxy_redirect off;

        # Socket.IO Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

AppNode 面板也刚好开始了支持对 WebSocket 的反向代理,于是在面板里开始尝试反代 NodeBB。
当然使用 AppNode 面板直接配置反向代理是很简单的,毕竟 AppNode 面板已经做的很简单了,但是你会发现反代好的 NodeBB 并不能进入后台,只限于静态资源的访问,即使开启了 WebSocket 也会出现一些下面这样的错误:
会话过期.jpg

Session.jpg

检查 NodeBB 日志会发现有如下错误提示:
token.jpg

在绞尽脑汁也找不到解决办法的情况下只得求助于 AppNode官方交流群虚竹@AppNode并最终找出原因并解决了这个问题,在此衷心的感谢 AppNode 团队的工作人员和虚竹@AppNode能在百忙之中抽出时间来解决每一位用户遇到的困难和问题。

此文将解决思路总结给各位网友,希望如果你也遇到以上类似问题可以对你有所帮助。

首先确保你搭建的 NodeBB 通过IP+端口能够访问、登录、发帖,如果不行请参照 “使用 AppNode 面板 10 分钟完成搭建 NodeBB 论坛” 重新搭建。
然后你需要在 AppNode 面板里的网站管理运行环境管理创建运行环境,创建运行环境时的网站类型选择反向代理如下图:
运行环境.jpg

运行环境创建完成之后就可以在网站管理中创建网站了,在创建网站第一步的第三项反向代理中填写你的NodeBB服务器IP和端口并勾选支持对 WebSocket 的反向代理,如下图:
反向代理.jpg

创建并完成网站部署之后你应该可以访问到 NodeBB 论坛首页了,但是现在你并不能登录,NodeBB 会提示你会话过期
这是由于 AppNode 面板的网站管理 1.2.4版缺少了 NodeBB 反代的几个关键参数,虚竹@AppNode告诉我下一版将会更新这个问题。

在新版没有出来之后我们必须手动配置反向代理配置文件和NodeBB的配置文件:

修改反向代理配置文件

反向代理配置文件的位置如下:

/data/运行环境代号/sites/forum.example.org/conf/nginx.conf

添加最后五行使AppNode能够支持NodeBB反向代理,修改后配置文件如下:

    location / {
        add_header        Strict-Transport-Security 'max-age=31536000; includeSubDomains';
        proxy_pass        http://你的NodeBB服务器IP:4567;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
        # 以下手动添加使AppNode能够支持NodeBB反向代理
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_redirect off;
    }
}

修改后网站会处于等待部署状态,这时候不要点击部署,因为自动部署后 AppNode 会删除我们手动添加的几行配置。
要使我们修改的配置生效可以去网站管理组件管理中手动重启Nginx

修改NodeBB的配置文件

NodeBB的配置文件的位置如下:

/home/nodebb/config.json

在配置文件中添加"cookieDomain": "forum.example.org",
修改后配置文件如下

{
    "url": "https://forum.example.org",
    "port": ["4567","4568","4569"],
    "secret": "75cx9ffb-81d0-52se-160e-9ke9m577452s",
    "database": "redis",
    "cookieDomain": "forum.example.org",
    "redis": {
        "host": "127.0.0.1",
        "port": "6379",
        "password": "",
        "database": "0"
    }
}

保存并重启 NodeBB(cd /home/nodebb && ./nodebb restart)使修改后的配置生效。

恭喜,全部修改到此结束,现在你已经可以使用域名来访问你的 NodeBB 论坛了。

Last modification:September 7th, 2018 at 03:39 pm
如果觉得我的文章对你有用,请随意赞赏

2 comments

  1. cess

    很实用啊,谢谢分享

    1. 拾玖
      @cess

      你的主页涉嫌广告,已被清理。

Leave a Comment