🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[danger] **弃用提醒:** > *由于看云对于免费用户的限制愈发严苛,本文档已经迁移至语雀。本文档将不做维护。* > **语雀地址**:[https://www.yuque.com/a632079/nodebb](https://www.yuque.com/a632079/nodebb) ***** # 优化 NodeBB 当要维护许多并发连接或高请求速率时,可以遵循某些程序来简化NodeBB。 本文试图概述那些发现 NodeBB 不能在当前配置中以全速运行时能使用的各种策略。 ## 利用集群 默认情况下,NodeBB将在一个进程上运行,某些调用可能比其他进程更长,从而导致相同资源的延迟或队列等待。要解决这个问题,可以通过添加多个端口到`config.json`中来指示NodeBB在多个进程上运行。 ``` { "port": ["4567", "4568", "4569"] //这将启动3个进程,分别监听这3个端口 } ``` 请记住,使用 `node loader.js` 或 `./nodebb start` 来启动程序,这样才会产生 3 个进程。 >[danger] 若使用 `node app.js` 将只会启动一个监听端口组第一个成员的进程! 需要像Nginx这样的代理服务器,以便在所有服务器之间进行负载均衡请求。 请将将下面的块添加到您的配置中(请根据实际修改): ``` upstream io_nodes { ip_hash; server 127.0.0.1:4567; server 127.0.0.1:4568; server 127.0.0.1:4569; } ``` ...并将 `proxy_pass` 值改为:`proxy_pass http://io_nodes;` ## 使用代理服务器来提供静态资源 Nginx在提供静态资源(例如javascript,css,图像等)方面非常好。 通过 Nginx 接管为最终用户提供服务的任务。这样,NodeBB进程将仅仅处理API调用,这将大大降低NodeBB的工作量(并增加了吞吐量)。 您只需要修改您的在 Nginx 配置文件,并在其中加入下方的 `location` 块 : ``` location @nodebb { proxy_pass http://127.0.0.1:4567; } location ~ ^/assets/(.*) { root /path/to/nodebb/; try_files /build/public/$1 /public/$1 @nodebb; } location /plugins/ { root /path/to/nodebb/build/public/; try_files $uri @nodebb; } location / { proxy_pass http://io_nodes; } ``` >[warning] 此配置仅适用于NodeBB v1.4.3 及 以上版本。 此外,你可以指示Nginx为这些资源提供压缩服务: ``` gzip on; gzip_min_length 1000; gzip_proxied off; gzip_types text/plain application/xml text/javascript application/javascript application/x-javascript text/css application/json; ``` ## 应用上述所有配置的 Nginx 配置示例 ``` upstream io_nodes { ip_hash; server 127.0.0.1:4567; server 127.0.0.1:4568; server 127.0.0.1:4569; } server { listen 80; server_name community.nodebb.org; 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_redirect off; # Socket.io Support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; gzip on; gzip_min_length 1000; gzip_proxied off; gzip_types text/plain application/xml text/javascript application/javascript application/x-javascript text/css application/json; location @nodebb { proxy_pass http://io_nodes; } location ~ ^/assets/(.*) { root /path/to/nodebb/; try_files /build/public/$1 /public/$1 @nodebb; } location /plugins/ { root /path/to/nodebb/build/public/; try_files $uri @nodebb; } location / { proxy_pass http://io_nodes; } } ``` >[warning] 此配置仅适用于NodeBB v1.4.3 及 以上版本。 ## 配置 Redis 当您设置NodeBB使用集群时,最好配置Redis。这样,每个NodeBB进程都可以通过 Redis pub- sub 与其他进程通信。在服务器上安装Redis,并在 `config.json`中添加一个Redis块,重启后 NodeBB 将自动调用 Redis。下面就是一个使用 mongodb 作为数据库储存 和 Redis pubsub 的配置示例。 >[success] 当这样配置的时候,Redis 也将被用作会话 (sessions) 存储。 ``` { "url": "http://example.org", "secret": "your-secret-goes-here", "database": "mongo", "port": [4568,4569], "mongo": { "host": "127.0.0.1", "port": "27017", "database": "0" }, "redis": { "host":"127.0.0.1", "port":"6379", "database": "0" } } ``` >[info] 编写: NodeBB Development Team 维护: a632079 审核: PA Team 最后更新: 2017.08.17