所以基本上我在服务器上创建子域时遇到了问题。我在Ubuntu 12.04服务器上运行apache2,并使用No-IP.com.设置了动态IP
我的mydomain.com正在工作,但我想创建test.mydomain.com,指向我的/var/www/目录中的一个子文件夹(我的网站的所有内容都位于此目录中)。
我修改了apachevhosts示例页面上的代码,并将其放在httpd.conf文件中:
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost localhost:80
<VirtualHost localhost:80>
DocumentRoot /var/www/
ServerName mydomain.com
# Other directives here
</VirtualHost>
<VirtualHost localhost:80>
DocumentRoot /var/www/test
ServerName test.mydomain.com
# Other directives here
</VirtualHost>
当我尝试重新启动服务时:
sudo /etc/init.d/apache2 restart
* Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
非常感谢您的帮助。如果我忘了提供任何必要的信息,请告诉我。
更新我尝试使用*:80,但仍然出现错误,这就是我切换到localhost的原因。
sudo /etc/init.d/apache2 restart
* Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Nov 21 15:03:51 2013] [warn] NameVirtualHost *:80 has no VirtualHosts
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Nov 21 15:03:51 2013] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
UPDATE我弄清楚发生了什么。我在ports.conf文件中有一个匹配的配置条目。一旦我去掉它,一切都很好。
如果将localhost替换为*,那么您的apache conf似乎是正确的。这意味着您应该使用NameVirtualHost *:80
和<VirtualHost *:80>
但是,您必须告诉DNS服务器将子域转发到您的动态IP。由于您有一个来自付费DNS服务的.com域,您必须登录到您的DNS提供商,并在您的IP中设置a记录或CNAME记录(添加与您在主.com域中相同的设置)。如果您使用ddclient或类似的客户端自动更新域,您也可以将其配置为更新子域。
在任何情况下,使用命令nslookup yourdomain.com
和nslookup subdomain.domain.com
查看子域是否成功更新。请注意,DNS中的更新可能需要数小时才能真正生效。
编辑:
抱歉刚刚注意到:(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
。这意味着其他人已经在使用端口80,因此apache服务器无法绑定到该地址。使用sudo netstat -anltp | grep :80
查看哪个程序已绑定端口80。此外,请检查conf文件以确保不再有NameVirtualHost *:80
指令。
最后,apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
不是一个错误,它只是一个警告,所以你不应该担心这个
可能存在使用端口的服务:80在命令行上试试netstat -tulpn |grep :80
,看看哪个服务正在占用这个端口。在我的例子中,它是nginx。我停止了服务,然后启动了我想使用的服务(apache2)。