为什么 nginx 无法与 LightSail 上的子域名 A 记录一起使用?

为什么 nginx 无法与 LightSail 上的子域名 A 记录一起使用?

我在 LightSail 上有一台 Ubuntu 机器,它使用 nginx 提供静态文件。

我想要一个子域名,因此我添加了一个指向名为 的机器 IP 的 A 记录client.mydomain.com

我的 nginx 站点配置文件定义为

server {
        listen 5000;
        server_name client.mydomain.com;

        location / {
                root /home/ubuntu/client-data;
        }
}

虽然我可以通过 http://[ip]/file.txt 访问客户端数据中的文件http://client.mydomain.com/file.txt返回 301 Permanent Moved 错误。

为什么?是不是因为我已经有一个在 80 和 8080 端口上运行的 nginx 站点。为什么子域名不使用 5000 中的正确站点?

答案1

默认情况下,当使用 HTTP 或 HTTPS 时,您的客户端(Internet 浏览器/实用程序)将使用默认端口 80/443 连接到您的服务器。

否则,如果你使用,就像你的情况一样,即http://client.mydomain.com:5000/file.txt,您将按预期请求该文件,因为您在此处在端口 5000 上配置了此服务器,并且如果文件存在,则会提供该文件。

如果您已经在端口 80 上定义了如下所示的默认 server_name 示例,示例:

server {
        #listen <PORT>
        listen 80;
        #server_name _invalid_name_for_default_server_
        server_name _default_;
        #location defines WHAT can/should be found WHERE
        location / {
                root /home/ubuntu/client-data;
        }
}

当使用域名访问您的服务器时,它通常会连接到端口 80,然后使用 server_name 查找配置的服务器块以验证它是否存在,否则,如果已配置,它将提供默认页面。

您的区块解释道:

server {
        #listen <PORT>
        listen 5000;
        #server_name domain_to.listen
        server_name client.mydomain.com;
        #location defines what can be found WHERE
        location / {
                root /home/ubuntu/client-data;
        }
}

假设您想使用 client1.mydomain.com/myfile.txt 进行请求:

将“listen”设置为端口 80。如果您随后连接到服务器,它将解析 server_name 指令。例如:

server {
        listen 80;
        server_name client1.mydomain.com;

        location / {
                 root /home/ubuntu/client-data;
        }
}

此外,如果出于某种原因您也想收听两个端口:

server {
        listen 80;
        listen 5000;
        server_name client1.mydomain.com;

        location / {
                 root /home/ubuntu/client-data;
        }
}

另请阅读:https://nginx.org/en/docs/http/server_names.html

我们希望能够帮助您,如果您想提高客户的最大数量,那么听是错误的:-)

相关内容