警告:计算机的 443 端口似乎无法通过主机名访问

我正在执行 ./discourse-setup 来配置 Discourse,但出现了图片中的错误。
我该如何修复这个错误?我使用的是 Ubuntu 18.04

我的 DNS 记录:

我的 sudo ufw status verbose 输出:

您输入的 hostname 中包含不可打印字符:

image

请重试,并确保输入内容干净。如果您使用的是复制/粘贴,请确保来源内容无误。

1 个赞

没有变化。

看起来该 IP 上已经运行了 WordPress。

是的,WordPress 已安装。我可以在同一台服务器上同时使用两者吗?

这是可能的,但并不容易。而且你不能使用 discourse-setup。我建议你先在一台未运行其他服务的服务器上进行尝试。

在同一台机器上运行其他网站与 Discourse

1 个赞

我按照这些步骤操作了,但没有得到任何结果。同时,我使用的是 Webmin。

大家还有其他想法吗?

如果您之前链接的主题中的说明对您不起作用,那么最简单的办法是在独立的服务器上运行 Discourse。

要让它与 Webmin 配合使用将会非常困难。

我知道这会有难度,但我并不认为自己是个新手。我已经尝试了你提供的链接中的说明。还有其他需要阅读的链接吗?

关于该问题有几个#howto 主题。

1 个赞

@Murto

顺便提一下,作为后端 Rails 应用,如果你将 Rails 配置为使用 Unix 域套接字而非 TCP/IP 端口,并在反向代理后部署 Discourse 应用,那么 Discourse 的设置会容易得多。

这样一来,TCP/IP 端口仅通过反向代理暴露,而 Discourse 应用(及其容器)则通过 Unix 域套接字暴露;你可以运行任意数量的 Discourse 容器实例,而无需担心 TCP/IP 端口冲突。在我看来,这是运行 Discourse 非常简洁的方式。

如果你遇到困难或想调整方向,本站上有大量操作指南和教程可供参考。Discourse 发行版中包含一个“socket”模板,可用于设置“Discourse 配置部分”;之后你只需设置反向代理(关于如何操作的教程数不胜数),然后“一切搞定”!

希望这能帮到你。

4 个赞

我仍然无法解决这个问题。有人能详细解释一下吗?:roll_eyes:

试试这个:

netstat -lnptu | grep :443

然后:

kill -9 PID(将 PID 替换为上述命令输出的进程号)

1 个赞

建议您在面向互联网的服务器上部署一个反向代理,并根据主机名将请求重定向到 WordPress 或 Discourse。

例如,在主机上运行一个使用 80 和 443 端口的 Nginx 服务,并将其配置为将 blog.yourdomain 的请求代理到 WordPress 服务(可以是主机上的内部端口,如果是 Apache + WordPress 架构,可以重定向到 Apache 端口,例如 8080,或者使用 FastCGI)。

然后在同一台服务器上运行 Discourse,确保将 app.yml 中的端口替换为主机上未使用的端口(如 8081),或者如 @neounix 所述使用 Unix 套接字。接着,将 forum.yourdomain 的请求代理到该端口或套接字。要运行 Discourse,需要在 Discourse 目录(通常是 /var/discourse)中执行 ./launcher rebuild app

在这种情况下,您不需要运行 discourse-setup 来创建 2GB 的交换文件(主要用于可能需要更多内存的升级,如果您的服务器内存充足,可能并不需要)以及生成 app.yml 文件。相反,您应该自行完成这些配置。如果您不确定 app.yml 文件中应填写的内容,我建议在另一台服务器上先运行推荐的安装流程,即使只是为了更熟悉 Discourse 并查看生成的 app.yml 文件,然后将其用于您的共享服务器(记得更改端口,如果使用套接字方式则移除端口配置)。

如果您无法继续操作,建议参考相关的 howto 主题帖子。

2 个赞

你能解释一下反向代理的操作流程吗?我已经了解了该做什么,但不知道具体如何实施。

我手头没有现成的示例,因为我在前端没有使用代理,不过我记得之前好像实现过。无论如何,这并没有什么秘密,操作方式与其他反向代理类似。以下是使用端口(而非套接字)时应做之事的概述:

  1. 确保有一个 WordPress 服务正在非 80 和 443 的端口上运行(例如:8443),并且运行正常。你可以先尝试将其暴露到互联网上,以验证是否正常工作。

  2. 对 Discourse 进行同样的操作,映射到不同的端口。

将:

expose:
  - "80:80"   # http
  - "443:443" # https

改为(例如):

expose:
  - "8081:80"   # http
  - "8444:443" # https

在你的 app.yml 文件中(如果没有,我建议先在独立机器上按照官方指南运行 Discourse,看看它是如何工作的,然后查看 /var/discourse/containers/ 下生成的 app.yml 文件)。以下是 app.yml 文件的示例:discourse_docker/samples/standalone.yml at master · discourse/discourse_docker · GitHub

  1. 安装 Nginx,并在其配置文件中添加代理指令。它们应类似于以下示例片段:
upstream blog {
    server localhost:8080;
}

server {
    server_name blog.barinaklar.com;
    server_tokens off;
    listen 80;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://blog.barinaklar.com$request_uri;
    }
}

server {
    server_name blog.barinaklar.com;
    server_tokens off;
    listen 443 ssl;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass           http://blog;
        proxy_redirect       off;
        proxy_set_header     Host $host;
        proxy_set_header     X-Real-IP $remote_addr;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header     X-Forwarded-Host $server_name;
        proxy_set_header     X-Forwarded-Proto $scheme;
    }
}

upstream forum {
    server localhost:8081;
}

server {
    server_name forum.barinaklar.com;
    server_tokens off;
    listen 80;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://forum.barinaklar.com$request_uri;
    }
}

server {
    server_name forum.barinaklar.com;
    server_tokens off;
    listen 443 ssl;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass           http://forum;
        proxy_redirect       off;
        proxy_set_header     Host $host;
        proxy_set_header     X-Real-IP $remote_addr;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header     X-Forwarded-Host $server_name;
        proxy_set_header     X-Forwarded-Proto $scheme;
    }
}

这假设 WordPress 运行在端口 8080,Discourse 运行在端口 8081。请务必设置防火墙以阻止访问这些端口(云提供商通常默认阻止所有端口,仅开放 22 端口,因此可能不需要额外操作)。

在这种情况下,你需要负责生成 SSL/TLS 证书(你可以使用 Certbot 通过 cron 作业定期运行来生成,因此我已在 Nginx 配置中包含了路径 /.well-known/acme-challenge/)。


如前所述,这只是一个概述,可能有些细节被我遗漏了。你需要特别注意基础 URL,因为端口发生了变化(检查它是否会将用户重定向到 https://yourdomain:8081 而不是 https://yourdomain,并在必要时进行调整以确保正常工作)。

如果 WordPress 在容器内运行在端口 80 或 443,则可能不需要上述操作。Discourse 的情况也应该类似。可能出现的问题是 https 相关的问题,它可能会因为代理中使用的是 http 端口而重定向到 http,因此你需要检查是否发生这种情况,并在必要时进行修复。

3 个赞

感谢您的帮助。我将进行申请并通知相关交易事宜。