NodeBB 默认运行在端口 4567 上,这样我们需要通过 URL:Port 才能访问 NodeBB(例如: http://example.org:4567

很显然,这不方便。但 80443 通常被 Web 服务占用,这意味着 NodeBB 通常无法占用这些端口。当然,即使可以占用,我们也不推荐直接使用 NodeBB 占用它们。

为了允许用户直接通过特定域名直接访问,本节将教导大家如何配置 Nginx 以达到目的。


要求


修改配置

/path/to/nginx 意味着需要你替换成 Nginx 的安装路径。(如:/usr/local/nginx,C:\ProgramData\Chocolatey\lib\nginx\tools\nginx-1.12.1\)


编辑文件 /path/to/nginx/conf/nginx.conf,在 http 块加入内容。如:

如果您查看过 NodeBB 官方文档,你会发现它的 配置文件位置 已经过时。



下面是基本的 nginx 配置,NodeBB 运行在 4567 端口:

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";
    }
}


下面的 nginx 配置,NodeBB 运行在 ["4567","4568"] 端口:

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://io_nodes;
        proxy_redirect off;

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

upstream io_nodes {
    ip_hash;
    server 127.0.0.1:4567;
    server 127.0.0.1:4568;
}


下面是使用SSL的例子:

### redirects http requests to https
server {
    listen 80;
    server_name forum.example.org;

    return 302 https://$server_name$request_uri;
}

### the https server
server {
    # listen on ssl, deliver with speedy if possible
    listen 443 ssl spdy;

    server_name forum.example.org;

    # change these paths!
    ssl_certificate /path/to/cert/bundle.crt;
    ssl_certificate_key /path/to/cert/forum.example.org.key;

    # enables all versions of TLS, but not SSLv2 or 3 which are weak and now deprecated.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # disables all weak ciphers
    ssl_ciphers 'AES128+EECDH:AES128+EDH';

    ssl_prefer_server_ciphers on;

    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";
    }
}


注意:


配置 Nginx 以使用自定义的错误页面

本例将演示如何在您的论坛未运行时将 Nginx 配置为使用自定义的502错误页面。


创建您的自定义错误页面

创建 502.html并将其放在 /path/to/nginx/html 目录中(这是Nginx默认文档根目录的位置)然后添加内容到您的 502.html文件。以下是可以复制和粘贴的示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Insert your page title here</title>
    </head>
    <body>
        <p>Insert your content here.</p>
    </body>
</html>


配置 Nginx 以使用您的自定义错误页面

编辑您的 Nginx 配置 文件(上面我们所修改的/path/to/nginx/conf/nginx.conf),找到你刚才添加的Server 块,然后在里面加入下面的内容:

server {
    #在这里开始添加内容
    error_page 502 /502.html;

    location = /502.html {
        root /path/to/nginx/html;
        internal;
    }
}

使用error_page指令,以便在发生502错误时提供您创建的自定义页面。位置块确保根与我们的文件系统位置匹配,并且文件只能通过内部Nginx重定向访问。


重新启动 Nginx: sudo service nginx restart,使配置生效。这样,下次用户访问您的论坛时,他们会看到您的自定义页面。


本节翻译改编自 NodeBB 官方文档。