>[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
- 序
- 贊助
- 導言
- 安裝
- 通過操作系統
- Windows + Mongodb/Redis
- Ubuntu/Debian + Redis/Mongodb
- CentOS + Redis
- CentOS + Mongodb
- FreeBSD/OpenBSD + Redis
- Arch Linux + Redis
- OSX + Redis
- 通過云服務
- 通過主機面板安裝
- AppNode
- CPanel
- 寶塔
- 使用
- FAQ
- 高級
- 運行 NodeBB
- 配置 Config.json
- 配置 Nginx
- 配置 MongoDB
- 更新 NodeBB
- 設置 Widgets
- 安裝 Yarn
- 更新 MongoDB
- 數據庫備份與恢復
- 重置管理員密碼
- 讓 NodeBB 支持搜索
- 優化
- 優化配置,提升NodeBB處理能力
- Google字體庫 -> 360公共前端庫
- Google字體庫 -> 中科大鏡像
- 海外VPS提升NodeBB訪問速度
- 通過 NodeBB API 自動發帖
- 開發
- 準備
- 常用方法 & 變量
- 插件制作
- 使用工具包編寫一個插件
- 主題制作
- 使用工具包編寫一個主題
- 部件制作
- 國際化
- 鉤子(hook)使用說明