创建其他虚拟主机Ubuntu Server 16.04.3

我目前有一个网站在我的LAMP服务器上运行完美(Ubuntu Server 16.04.3)。
我现在想在服务器上添加另一个。 所以我首先转到/ etc / apache2 / sites-available文件,并将000-default.conf文件复制到同一目录,同时将名称更改为mydomainname.com.conf。
然后我将此文件编辑为以下内容:

 ServerName mydomain.com ServerAlias www.mydomain.com ServerAdmin admin.mydomain.com DocumentRoot /var/www/mydomain.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined  

接下来我输入了命令a2ensite mydomain.com.conf
比我重新启动apache。
然后我mkdir /var/www/mydomain.com/public.html(也更改了权限)
在此之后我编辑了/ etc / hosts文件并添加了:

 127.0.0.1 mydomain.com. myinternalIP mydomain.com myStaticIp mydomain.com 

然后我在这里添加了新站点的内部IP以及新站点的公共IP。
然后我去了/ etc / network / interfaces文件:

 The loopback network interface auto lo iface lo inet loopback - The primary network interface(this is for the virtual host already on the server) auto eno1 iface eno1 inet static address 192.168.11.199 netmask 255.255.255.0 network 192.168.11.0 broadcast 192.168.11.255 gateway 192.168.11.59 dns-nameservers 8.8.8.8 dns-search currentsite.com -Second IP interface(This is for the new virtual host)
iface eno1:1 inet static address 192.168.11.200 netmask 255.255.255.0

我执行Ifconfig时的输出:

 eno1: Link encap: Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.11.199 Bcast:192.168.11.255 Mask:255.255.255.0 inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 TX packets:6085 errors:0 dropped:0 overruns:0 carrier:364 collisions:381 txqueuelen:1000 RX bytes:563896 (563.8 KB) TX bytes:5541282 (5.5 MB) Interrupt:20 Memory:f7c00000-f7c20000 eno1:1 Link encap: Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.11.200 Bcast:192.168.11.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:20 Memory:f7c00000-f7c20000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:9856 errors:0 dropped:0 overruns:0 frame:0 TX packets:9856 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:731051 (731.0 KB) TX bytes:731051 (731.0 KB) 

ifconfig的输出重新启动服务器后 – 我看不到我插入/ etc / network / interfaces文件中的eno1:1

 eno1: Link encap: Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.11.199 Bcast:192.168.11.255 Mask:255.255.255.0 inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:77 errors:0 dropped:0 overruns:0 TX packets:76 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:8760 (8.7 KB) TX bytes:10725 (10.7 KB) Interrupt:20 Memory:f7c00000-f7c20000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:190 errors:0 dropped:0 overruns:0 frame:0 TX packets:190 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:14760 (14.7 KB) TX bytes:14760 (14.7 KB) 

然后我做ifup -v eno1:1然后当我执行ifconfig时eno1:1重新启动。 我现在也可以在本地搜索192.168.11.200但是它会重定向到服务器上的其他网站。

服务网络启动输出

 failed to start network.service: Unit network.service not found. 

输出服务网络状态

 network.service Loaded:not-found (Reason: No such file or directory) Active: inactive (dead) 

Outpu for ip route

 default via 192.168.11.59 dev eno1 onlink 192.168.11.0/24 dev eno1 proto kernel scope link src 192.168.11.199 

之后,我在防火墙(使用Mikrotik防火墙)中为端口80添加了一个新条目,以允许域的HTTP流量。 我还重启防火墙是安全的。

然后我去了我的域名提供商并创建了一条A记录,指向我的静态IP到新域,并创建了指向我的静态IP到新域的WWW记录。 这方面的一切都很好。
我google了一下,但似乎无法做到这一点。 我浏览了很多post,仍然无法从浏览器中看到我的新域名。
当我在服务器上放置第一个网站并且一切正常时,我已经这样做了。
如果在某处得到解答,请指导我。

1.您不需要第二个IP地址来为服务器上的多个虚拟主机提供服务。 正如我所理解的那样,你只有一个静态IP。 因此,如果您没有任何其他特殊要求,我建议您恢复与网络接口相关的更改。

2.不必对/etc/hosts执行任何操作。 此文件用作本地 DNS,如果您想在本地访问您的域名(FQDN)(从机器本身,当您没有Internet访问或DNS设置时),下一个新行就足够了:

 127.0.0.1 example.com www.example.com second-example.com www.second-example.com 
  • 请注意,问题内容是127.0.0.1 example.com. – 可能点到最后是复制/粘贴拼写错误。

3. 虚拟主机如何工作?

在客户端,当您在浏览器中键入任何FQDN(例如http://example.com )时, 它会检查[1] /etc/hosts是否有此FQDN的记录。 如果没有提供此类记录, 它会询问您的DNS(在/etc/network/interfaces/etc/resolv.conf ,或由DHCP提供)以获取所请求的FQDN的IP地址。 并且DNS返回所请求域名的A记录 。 然后浏览器将HTTP请求发送到提供的IP地址。 请求的标头包含IP,完全限定的域名等 。

  • [1]不完全是浏览器,但我不想扩展答案。

在服务器端,当请求到达某个端口上的服务器IP地址时,此请求将由侦听此端口的服务处理。 默认的HTTP / HTTPS端口是80 / 443Apache监听它/它们 – 这在/etc/apache2/ports.conf定义。

当Apace处理请求时,它会读取请求标头并将请求重定向到与请求标头中的域名对应的虚拟主机。

4.不要以这种方式使用VirtualHost标记: 。 这是一个错字 。 相反,默认情况下使用它: 。 实际上,星号*表示所有可用的网络接口(服务器处理的IP地址)。

5.根据以上内容,您的Apache配置应如下所示:

  ServerName example.com ServerAlias www.example.com ServerAdmin admin@example.com DocumentRoot "/var/www/example.com/public_html" ErrorLog ${APACHE_LOG_DIR}/example.com.error.log CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined   ServerName second-example.com ServerAlias www.second-example.com ServerAdmin admin@second-example.com DocumentRoot "/var/www/second-example.com/public_html" ErrorLog ${APACHE_LOG_DIR}/second-example.com.error.log CustomLog ${APACHE_LOG_DIR}/second-example.com.access.log combined  
  • 通常,不同虚拟主机的定义放在单独的.conf文件中,很容易成为a2ensite / a2dissite

  • 分隔日志文件不是必须的(在示例中显示)。 这只是另一个想法。

  • 在问题是ServerAdmin admin.example.com编写的,您必须提供带有此指令的电子邮件。