我目前有一个网站在我的 LAMP 服务器(Ubuntu Server 16.04.3)上完美运行。
我现在想在服务器上添加另一个网站。所以我首先转到 /etc/apache2/sites-available 文件并将 000-default.conf 文件复制到同一目录,同时将名称更改为 mydomainname.com.conf。
然后我将此文件编辑为以下内容:
<VirtualHost mydomain.com:80>
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
</VirtualHost>
接下来我输入命令 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)<br>
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)
IP 路由的输出
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 流量。我还重新启动了防火墙以确保安全。
然后我去了我的域名提供商并创建了一个将我的静态 IP 指向新域名的 A 记录,还创建了一个将我的静态 IP 指向新域名的 WWW 记录。这边一切都很好。
我已经在 Google 上搜索过了,但似乎做不到。我浏览了很多帖子,但仍然无法从浏览器中看到我的新域名。
我在服务器上建立第一个网站时就是这样做的,一切都正常。
如果这个问题在某个地方得到解答,请指导我。
答案1
1.您不需要第二个 IP 地址来为服务器上的多个虚拟主机提供服务。正如我所理解的,您只有一个静态 IP。因此,如果您没有其他特殊要求,我建议您恢复与网络接口相关的更改。
2.无需对它进行任何操作/etc/hosts
。此文件用作当地的DNS 以及您是否想访问您的域名 (FQDN)本地(从机器本身,当您无法访问互联网或设置 DNS 时)输入以下内容就足够了:
127.0.0.1 localhost example.com www.example.com second-example.com www.second-example.com
- 其中
127.0.0.1
是通常绑定到的环回接口的地址本地主机域名。
您可以hosts
在其他 LAN 连接的 PC 上编辑该文件,以便通过域名而不是 IP 地址访问您的 LAN 服务器。为此,您需要在hosts
其他 LAN 连接的 PC 的文件中输入服务器的 LAN IP:
192.168.0.111 example.com www.example.com second-example.com www.second-example.com
- 替换
192.168.0.111
为实际服务器的 LAN IP 地址。
3. 虚拟主机如何工作?
在客户端,当您在浏览器(例如http://example.com
)它检查[1]中是否有此 FQDN 的记录/etc/hosts
。如果没有这样的记录,它向您的 DNS(在/etc/network/interfaces
或 中提供/etc/resolv.conf
,或由 DHCP 提供)询问所请求的 FQDN 的 IP 地址。DNS 返回A
记录请求的域名。然后浏览器向提供的 IP 地址发送 HTTP 请求。请求的标头包含 IP、完全限定域名、ETC。
- [1] 不完全是浏览器,但我不想扩展答案。
在服务器端,当请求到达服务器 IP 地址上的某个端口时,该请求将由监听此端口的服务处理。默认HTTP
/HTTPS
端口为80
/443
和阿帕奇 听它/他们——这是在中定义的/etc/apache2/ports.conf
。
当 Apace 处理请求时,它会读取请求头并将请求重定向到与请求头中的域名相对应的虚拟主机。
4.不要以这种方式使用 VirtualHost 标签:<VirtualHost mydomain.com:80>
。这是一个拼写错误。相反,按默认方式使用它:<VirtualHost *:80>
。实际上,星号*
表示所有可用的网络接口(服务器处理的 IP 地址)。
5.根据上述内容,您的 Apache 配置应如下所示:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
DocumentRoot "/var/www/example.com/public_html"
ErrorLog ${APACHE_LOG_DIR}/example.com.error.log
CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName second-example.com
ServerAlias www.second-example.com
ServerAdmin [email protected]
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
</VirtualHost>
通常,不同虚拟主机的定义放在单独的
.conf
文件中,以a2ensite
方便使用a2dissite
。不强制要求将日志文件分开(如示例中所示)。这只是另一种想法。
在问题写成时
ServerAdmin admin.example.com
,您必须提供带有此指令的电子邮件。
6.如果一切正常,您可以进一步在 Let's encript(Certbot)的帮助下设置免费的 HTTPS(SSL/TLS)证书: