如何在本地网络中通过一台计算机为多个域提供服务

如何在本地网络中通过一台计算机为多个域提供服务

我在本地网络中为我的 django 项目提供服务时遇到了问题。每个项目都需要在 hosts 文件中有一个唯一的域名。在我的本地网络中,其他计算机无法看到这些项目。

我的电脑在网络中的IP是192.168.2.2 我的电脑上的hosts文件如下:

127.0.0.101      myProject1.local
127.0.0.102      myProject2.local
127.0.0.103      myProject3.local

我想我必须这样做,但是这样做不行。

192.168.2.101      myProject1.local
192.168.2.102      myProject2.local
192.168.2.103      myProject3.local

答案1

最后,我找到了解决方案。您必须在本地网络中设置 DNS 服务器,如果您有任何服务器版操作系统计算机,则可以轻松配置其 DNS 服务器并将其指向您的项目的 IP。但是当网络中没有服务器计算机时(例如:家庭网络),问题将是找到一个 DNS 服务器来承担责任。

我将在 Windows 7 或其他任何东西上配置 Apache,以使用 WSGI 处理 Django 项目......

我的本地 IP 是192.168.2.2并且在路由器设置中将其与我的 MAC 地址绑定。
注意:请确保你的IP地址不可改变,否则会导致你的DNS服务器和本地网络不稳定。

配置 Apache 来服务多个域:

第一步是配置 Apache 来运行项目:
下面将在 myProject1 上提供服务www.myproject1.local和 myProject2www.myproject2.local

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.myProject1.local
    ServerAlias myProject1.local *.myProject1.local 
    ServerAdmin [email protected]
    DocumentRoot "C:/path/to/myProject1/"
</VirtualHost>

<VirtualHost *:80>
    ServerName www.myProject2.local
    ServerAlias myProject2.local *.myProject2.local 
    ServerAdmin [email protected]
    DocumentRoot "C:/another/path/to/myProject2/"
</VirtualHost>

...

欲了解更多信息,请访问:[Apache 基于名称的虚拟主机支持]

  1. 使用 WSGI 启动 Django 项目:

如果你想为 PHP 项目提供服务,那么它就可以工作,但要配置 WSGI,你必须进行一些更改,如下所示。我将 project1 视为 django 项目

<VirtualHost *:80>
    ServerName www.myProject1.local
    ServerAlias myProject1.local *.myProject1.local 
    ServerAdmin [email protected]
    #WSGIDaemonProcess myProject1 processes=2 threads=15 display-name=%{GROUP}
    #WSGIProcessGroup  myProject1
    WSGIScriptAlias / "C:/path/to/myProject1/myproject1.wsgi"
</VirtualHost>

...

确保加载:[mod_wsgi.so]

注释行WSGIDaemon进程WSGI进程组有多种选项可以实现更好的 WSGI 服务,更多信息请访问:[mod_wsgi Wiki Pages]

  1. 安装 DNS 服务器

现在您必须配置您的 DNS 服务器。就我而言,我的计算机上没有安装 DNS 服务器,因此第一步是找到合适的 DNS 服务器来完成这项工作。
我使用 [MaraDNS],并按如下方式配置它:

mararc 文件

ipv4_bind_addresses             = "192.168.2.2"
timestamp_type                  = 2
random_seed_file                = "secret.txt"
hide_disclaimer                 = "YES"
csv2                            = {}
csv2["myproject1.local."]       = "db.default.txt"
csv2["myproject2.local."]       = "db.default.txt"
upstream_servers                = {}
upstream_servers["."]           = "yyy.yyy.yyy.yyy, zzz.zzz.zzz.zzz"

数据库默认.txt像下面的文件

%           192.168.2.2 ~
www.%       192.168.2.2 ~

有关 maraDNS 的更多信息,请访问MaraDNS 网站

  1. 启动 DNS 服务器:

通过以下方式启动 maraDNS 服务器

maradns -f mararc
  1. 路由器设置:

您可以通过将主 DNS 服务器设置为指向 192.168.2.2 来访问您的域,以便为本地网络中的每台计算机提供服务。但您也可以将路由器 DHCP 服务器设置为使用您的 IP 作为默认 DNS 服务器。它只需要访问路由器 Web 管理。
因此,在那里输入您的 IP 作为 DNS 服务器,任务就完成了。

  1. 享受技巧:

现在,您可以在本地网络中以虚假域名的形式提供您的项目,而无需使用:端口号或 IP 地址。只需输入我的项目1.本地在您的任何本地网络计算机或 WiFi 设备的地址栏中输入并获得正确的结果。
:)

答案2

您尝试做的是在同一主机上设置多个 IP 地址,而不是域名。您尝试做的事情有几个问题:首先,您似乎hosts只在运行服务器应用程序的机器上设置文件,这意味着网络中的其他机器都不会知道它们。

另一个问题是,要在同一主机上设置多个 IP 地址,您必须在网络配置中执行此操作,并且如何执行取决于您使用的操作系统。

第三点是,您不需要为每台主机设置一个 IP 地址。一个 IP 地址可以有多个主机名。这可以在名称服务器中设置,或者如果您没有为本地网络设置名称服务器,则可以在文件中使用别名hosts

192.168.0.101   hostname1 hostname2 hostname3

然后在 Apache(或你使用的任何 Web 服务器)中使用基于名称的虚拟主机

最后要注意的是,您当前的设置使用 127.xxx 范围内的 ip 地址,这些地址始终被视为主机本地地址,因此尝试通过该地址范围连接另一台计算机将永远不会成功。

相关内容