如何使用 NGINX 和 DDNS 配置子域名

如何使用 NGINX 和 DDNS 配置子域名

我在 No-IP 上注册了一个 ddns 子域:example.ddns.net 我将 No-IP 配置为映射到我的路由器的 IP,该 IP 将端口转发到我的 NGINX Web 服务器。我想拥有一个单独的 Web 服务器,我托管该服务器,web1.example.ddns.net该服务器指向/var/www/web1。我不知道如何告诉 NGINX 在/var/www/web1从 调用时指向web1.example.ddns.net。有人可以详细解释如何配置我的服务器吗?

下面是我的配置,example.ddns.net此配置位于,/etc/nginx/sites-available/有一个链接/etc/nginx/sites-enabled

server {
        listen 80 default_server;
        listen [::]:80 default_server;
       
        root /var/www/example.ddns.net;

        server_name example.ddns.net;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

}

下面是我的配置,web1.example.ddns.net此配置位于,/etc/nginx/sites-available/有一个链接/etc/nginx/sites-enabled

server {
        listen 80;
        listen [::]:80;
       
        root /var/www/web1.example.ddns.net;

        server_name web1.example.ddns.net;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

}

这些是我唯一更改过的文件。以下 NGINX 服务器托管在 Ubuntu Server 上,我通过 ssh 访问服务器,并通过另一台计算机访问网页。有人能给出一些如何解决这个问题的说明吗?

答案1


以下答案相当基础。所以如果我重复了您已经知道的内容,请原谅我。=)


我已经在 No-IP 上注册了一个 DDNS 子域名:example.ddns.net。 [...] 我想要一个由我托管的单独 Web 服务器,web1.example.ddns.net它指向/var/www/web1

需要注意的是,如果您还没有这样做,您需要web1.example.ddns.net使用 No-IP 进行设置并将其指向您的服务器。否则,服务器配置将无关紧要,因为没有人能够通过该地址联系服务器。

/var/www/web1我不知道的是如何告诉 NGINX在从 调用时指向web1.example.ddns.net

您真正需要的只是基本的服务器块。摘自 NGINX 默认示例:

例如 example.ddns.net

server {
        listen       80;
        server_name  example.ddns.net;
        
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /var/www/example.ddns.net;
            index  index.html index.htm;
        }

        # error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

例如 web1.example.ddns.net

server {
        listen       80;
        server_name  web1.example.ddns.net;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /var/www/web1;
            index  index.html index.htm;
        }

        # error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

基本说明

  • 对于 Ubuntu,您应该将这些服务器块放在适当的sites-available目录下(例如/etc/nginx/sites-available/),例如example.ddns.netweb1.example.ddns.net

  • 创建相关的符号链接sites-enabled/etc/nginx/sites-enabled/例如):

    sudo ln -s /etc/nginx/sites-available/example.ddns.net /etc/nginx/sites-enabled/
    sudo ln -s /etc/nginx/sites-available/web1.example.ddns.net /etc/nginx/sites-enabled/
    

    或者使用你的操作系统推荐的任何方法。

  • 按照评论中的建议运行nginx -t(例如sudo nginx -t),以确保 NGINX 没有遇到任何语法错误或其他问题。

  • 使用 ex. 重新启动 NGINX sudo systemctl restart nginx

笔记

  • 上述块放弃 IPv6(这对于测试来说可能不是必要的)。

  • 这两个例子都没有使用default_server

  • 每个相应的root条目都放在一个location块中(即网站根目录/)。

  • 上面的第二个服务器块使用/var/www/web1作为rootfor /(而不是web1.example.ddns.net),因为这是您最初在问题中指定的。无论如何,要清楚的是,root需要匹配您物理文件系统上的任何目录结构。也就是说,它不必镜像您的server_name,除非您实际创建了名为 ex.example.ddns.net和的目录(或类似目录) web1.example.ddns.net

  • 第一台服务器块仍然使用/var/www/example.ddns.net,因此请确保这是您存储文件的正确路径example.ddns.net

  • 广义上讲,在对服务器进行更改后,清除浏览器缓存通常是一个明智的步骤,这样浏览器就不会将旧数据返还给您。

相关内容