【问题标题】:Can I configure a subdomain to point to a specific port on my server我可以将子域配置为指向服务器上的特定端口吗
【发布时间】:2011-12-18 01:08:25
【问题描述】:

我有一台旧电脑,我把它改装成了我的世界服务器。我有 2 台 minecraft 服务器同时运行,一台在 25565 端口(默认),一台在 25566 端口。

我购买了域名 something.com 并将其指向我的服务器。现在,在游戏中输入something.com 进入第一台服务器,输入something.com:25566 进入另一台服务器。

有没有办法将 one.something.com 设置为指向第一台服务器,将 two.something.com 设置为指向第二台服务器?我拥有(centos)服务器,拥有 root 访问权限,以及其他一切。如果这有所不同,则该域由 no-ip 控制。我知道 DNS 与端口号没有关系,但如果我可以安装一个程序来完成这项工作?

谢谢:)

【问题讨论】:

    标签: dns port portforwarding


    【解决方案1】:

    我……不这么认为。您可以将子域(例如blah.something.com)重定向到something.com:25566,但我认为您实际上不能将子域设置为这样的不同端口。我可能是错的,但使用简单的 .htaccess 或其他东西来检查 %{HTTP_HOST} 并根据子域重定向可能会更容易。

    【讨论】:

      【解决方案2】:

      如果您在服务器上只有一个 IP,则没有机会这样做。 DNS 是一个简单的名称到数字 (IP) 解析器。如果服务器上有两个 IP,则可以将每个子域指向每个 IP 地址,并在每个 IP 的默认端口上运行两个服务器。
      one.example.com -> 127.0.0.1(服务器:127.0.0.1:25565)
      two.example.com -> 127.0.0.2(服务器:127.0.0.2:25565)

      【讨论】:

      • 可以做 OP 要求的。请查看@Deb 的回复。
      【解决方案3】:

      如果您可以访问 SRV 记录,则可以使用它们来获取您想要的内容:)

      E.G

      A 记录

      Name: mc1.domain.com
      Value: <yourIP>
      
      Name: mc2.domain.com
      Value: <yourIP>
      

      SRV 记录

      Name: _minecraft._tcp.mc1.domain.com
      Priority: 5
      Weight: 5
      Port: 25565
      Value: mc1.domain.com
      
      Name: _minecraft._tcp.mc2.domain.com
      Priority: 5
      Weight: 5
      Port: 25566
      Value: mc2.domain.com
      

      然后在我的世界中你可以使用

      mc1.domain.com 将使用端口将您登录到服务器 1 25565

      mc2.domain.com,它将使用端口将您登录到服务器 2 25566

      然后在您的路由器上,您可以让它将 25565 和 25566 指向同时打开两个服务器的机器,瞧!

      来源:这适用于我在同一台机器上运行 2 个 minecraft 服务器,端口为 50500 和 50501

      【讨论】:

      • 我不相信这适用于浏览器。因此,例如,您不能使用它将子域定向到浏览器中的特定端口。见stackoverflow.com/questions/9063378/…
      • 使用godaddy的时候怎么样?
      • 您能否详细说明如何构建像_minecraft._tcp.mc1.domain.com 这样的SRV 记录?我是这样理解的:_something._protocol.subdomain.domain.tld。该示例中的_something 有什么作用?它只是一个友好的名称,还是有某种相关性使它起作用?
      • 非常感谢您的回答。尝试用谷歌搜索如何将端口重定向到子域会得到 1000 个端口转发答案和 500 个如何端口触发的感觉。这正是我想要的。
      • 这是一篇专门针对 namecheap 的好文章(与 minecraft 相关,但实际上可以是任何应用程序):namecheap.com/support/knowledgebase/article.aspx/9765/2208/…
      【解决方案4】:

      只有 1 个 IP,您可以忘记 DNS,但您可以使用 MineProxy,因为客户端的握手数据包包含他连接到的主机,而 MineProxy 将准备好该主机并将连接代理到已注册的服务器那个主机

      【讨论】:

        【解决方案5】:

        如果你想在一个服务器的不同端口上托管多个网站那么,MRVDOG 提到的方法将不起作用。因为浏览器不会解析 SRV 记录并且总是会点击:80 端口。 例如,如果您的要求是:

        site1.domain.com maps to domain.com:8080
        site2.domain.com maps to domain.com:8081
        

        因为您经常希望充分利用已购买的服务器空间。 然后您可以尝试以下方法:

        第 1 步: 安装代理服务器。我将在这里使用 Nginx

        apt-get install nginx
        

        第 2 步: 编辑/etc/nginx/nginx.conf 文件以添加端口映射。为此,请添加以下行:

        server {
            listen 80;
            server_name site1.domain.com;
        
            location / {
                proxy_pass http://localhost:8080;
            }   
        }
        
        server {
            listen 80;
            server_name site2.domain.com;
        
            location / {
                proxy_pass http://localhost:8081;
            }   
        }
        

        这很神奇。所以文件最终将如下所示:

        user www-data;
        worker_processes auto;
        pid /run/nginx.pid;
        include /etc/nginx/modules-enabled/*.conf;
        
        events {
            worker_connections 768;
            # multi_accept on;
        }
        
        http {
        
            ##
            # Basic Settings
            ##
        
            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;
            keepalive_timeout 65;
            types_hash_max_size 2048;
            # server_tokens off;
        
            # server_names_hash_bucket_size 64;
            # server_name_in_redirect off;
        
            include /etc/nginx/mime.types;
            default_type application/octet-stream;
        
            ##
            # SSL Settings
            ##
        
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;
        
            ##
            # Logging Settings
            ##
        
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
        
            ##
            # Gzip Settings
            ##
        
            gzip on;
        
            # gzip_vary on;
            # gzip_proxied any;
            # gzip_comp_level 6;
            # gzip_buffers 16 8k;
            # gzip_http_version 1.1;
            # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
        
            ##
            # Virtual Host Configs
            ##
        server {
            listen 80;
            server_name site1.domain.com;
        
            location / {
                proxy_pass http://localhost:8080;
            }   
        }
        
        server {
            listen 80;
            server_name site2.domain.com;
        
            location / {
                proxy_pass http://localhost:8081;
            }   
        }
        
            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;
        }
        
        
        #mail {
        #   # See sample authentication script at:
        #   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
        # 
        #   # auth_http localhost/auth.php;
        #   # pop3_capabilities "TOP" "USER";
        #   # imap_capabilities "IMAP4rev1" "UIDPLUS";
        # 
        #   server {
        #       listen     localhost:110;
        #       protocol   pop3;
        #       proxy      on;
        #   }
        # 
        #   server {
        #       listen     localhost:143;
        #       protocol   imap;
        #       proxy      on;
        #   }
        #}
        

        第 3 步: 启动nginx:

        /etc/init.d/nginx start.

        每当你对配置进行任何更改时,都需要重启 nginx:

        /etc/init.d/nginx restart

        最后: 不要忘记在您的 DNS 配置中添加 A 记录。所有子域都应指向域。像这样:

        把你的静态 ip 代替 111.11.111.111

        更多细节:

        托管静态网站: 如果您有任何静态网站(如 Angular 应用程序),您想在 nginx 本身中进行部署。将您的 index.html 与其他资源一起放在某个文件夹中,例如 /srv/mySite 并在 nginx.conf 中添加以下服务器块:

        server {
            listen 80;
            server_name staticSite.domain.com;
            root /srv/mySite;
            location / {
               try_files $uri $uri/ /index.html;
            }
        }
        

        【讨论】:

        • 这对我很有用! FWIW,我的开发环境需要这种反向代理安排。因此,我没有摆弄我的 A 记录,而是简单地将记录添加到我的本地 /etc/hosts 文件中;这比更改我的域名服务器中的 DNS 记录更容易,风险也更小。
        【解决方案6】:

        如果您希望使用 2 个子域连接到其他端口,您可以使用 Minecraft 的代理服务器(即 BungeeCord、Waterfall、Travertine...),并将子域绑定到 config.yml 服务器中的指定。 为此,您必须在 BungeeCord 的配置中设置您的服务器:

        servers:
          pvp:
            motd: 'A Minecraft Server PVP'
            address: localhost:25566
            restricted: false
          skyblock:
            motd: 'A Minecraft Server SkyBlock'
            address: localhost:25567
            restricted: false
        

        记住!端口必须不同于默认的 Minecraft 端口(这意味着 25565),因为我们将使用此端口连接我们的代理。 sub1.domain.com 和 sub2.domain.com 我们必须绑定到您拥有这些服务器的服务器。现在,我们必须在您的 Bungee 服务器中绑定子域:

        listeners:
            forced_hosts:
              sub1.domain.com: pvp
              sub2.domain.com: skyblock
              domain.com: pvp // You can bind other domains to same servers.
        

        记得把force_default_server改成true,把host改成0.0.0.0:25565 带有一些服务器的 BungeeCord config.yml 示例:https://pastebin.com/tA9ktZ6f 现在您可以连接到 sub1.domain.com 上的 pvp 服务器并连接到 sub2.domain.com 上的 skyblock。不用担心,BungeeCord 只需要 0.5GB 的 RAM 供 500 名玩家使用。

        【讨论】:

          猜你喜欢
          • 2015-12-18
          • 1970-01-01
          • 2019-05-24
          • 1970-01-01
          • 1970-01-01
          • 2017-06-18
          • 1970-01-01
          • 2019-05-04
          • 1970-01-01
          相关资源
          最近更新 更多