72

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

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

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

谢谢 :)

4

6 回答 6

110

如果您有权访问 SRV 记录,则可以使用它们来获得所需的内容:)

例如

一个记录

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 将使用端口 25565 将您登录到服务器 1

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

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

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

于 2013-10-05T10:20:33.310 回答
77

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

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

因为通常您希望充分利用您购买的服务器空间。然后您可以尝试以下操作:

第一步: 安装代理服务器。我将在这里使用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;
#   }
#}

第三步: 启动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;
    }
}
于 2019-09-26T18:25:04.740 回答
6

如果您在服务器上只有一个 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)

于 2011-10-30T10:25:33.710 回答
3

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

于 2011-10-29T23:39:17.860 回答
1

如果您希望将 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,并将主机更改为 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 名玩家使用。

于 2021-02-15T11:26:52.900 回答
0

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

于 2018-07-25T13:16:42.083 回答