如何为本地开发设置虚拟主机

如何为本地开发设置虚拟主机

安装了 Ubuntu 11.04,安装了 apache2 和所有相关软件包。我尝试了大多数博客,并将 google 和其他论坛作为我最好的朋友,但我无法解决这个问题。

我需要在本地系统上设置一个名为虚拟主机以用于开发。

我创建了目录“vivek”/var/www并复制了默认的index.html并编辑了一些元素。

我添加的文件vivek.com如下/etc/apache2/sites-available

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.vivek.com
DocumentRoot /var/www/vivek

# Other directives here
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/vivek/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

</VirtualHost>



<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

即我添加了以下几行

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.vivek.com
DocumentRoot /var/www/vivek

# Other directives here
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/vivek/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

</VirtualHost>

到“sites-available”文件夹中已经存在的默认文件(在编辑默认文件之前对其进行备份)

在 /etc/hosts 中的 hosts 文件中添加了此项

127.0.0.1 localhost
127.0.1.1 vivek-PC
127.0.0.1 www.vivek.com

执行以下操作,没有错误:

root@vivek-PC:~# a2ensite vivek.com
Enabling site vivek.com.
Run '/etc/init.d/apache2 reload' to activate new configuration!
root@vivek-PC:~# /etc/init.d/apache2 reload
* Reloading web server config apache2

当我输入时www.vivek.com,它给了我默认的index.html,/var/www但没有在文件夹/var/www/vivek中编辑的index.html。

后来,我编辑了 index.html,/var/www但仍然得到相同的 index.html(编辑前的默认)。所有 index.html 都已编辑,但 Apache 似乎有一些隐藏的 index.html,当我请求www.vivek.com

讽刺的是,我重启后,Apache 运行正常,但我的网站却www.vivek.com无法显示(即使 index.html 被隐藏了,天知道它藏在哪里!!)现在我的浏览器显示“无法连接”

请帮忙。我尝试设置这个已经有一个星期了,但没有成功。

答案1

后来,我从 /var/www 编辑了 index.html,但仍然得到相同的 index.html(编辑前的默认设置)。所有 index.html 都已编辑,但 Apache 似乎有一些隐藏的 index.html,当我请求 www.vivek.com 时,它会不断出现

读到这里,我猜你正在查看一个缓存文件。不要按下或点击“刷新”按钮,而是按+F5跳过刷新时的缓存。CtrlF5

或者,使用命令行程序curl(默认情况下未安装)。示例用法:

$ curl -i http://localhost/
HTTP/1.1 200 OK
Date: Sat, 02 Jul 2011 00:42:01 GMT
Server: Apache/2.2.17 (Ubuntu)
Last-Modified: Fri, 01 Jul 2011 04:12:49 GMT
ETag: "4507-b1-4a6fa3b114149"
Accept-Ranges: bytes
Content-Length: 177
Vary: Accept-Encoding
Content-Type: text/html

<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>

一个注意事项:我在干净的 Apache 安装上执行以下操作:

  • 将您的第一个配置文件添加到/etc/apache2/sites-available/vivek.com
  • (离开/etc/apache2/sites-available/default 未受影响
  • 跑步sudo a2ensite vivek.com
  • 跑步sudo /etc/init.d/apache reload

我收到和你一样的消息。但是,服务器无法启动。使用 停止服务器sudo /etc/init.d/apache2 stop并使用 重新启动它时sudo /etc/init.d/apache2 start,它根本拒绝启动。查看错误日志/var/log/apache2/error.log发现了一些错误:

[Sat Jul 02 00:48:09 2011] [notice] Graceful restart requested, doing restart
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Sat Jul 02 00:48:09 2011] [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

因此端口 80 似乎正在使用中。但如果 Apache 尚未启动,我可以通过运行 来确认没有任何程序在端口 80 上监听sudo netstat -tpln。我检查了配置并得出结论,Listen 80应该从配置文件中删除该行/etc/apache2/sites-available/vivek.com。之后,我可以重新启动服务器并使用curl,我确认服务器正在正确响应请求。

,你的第二个 vhost 块是多余的,因为它被覆盖了/etc/apache2/sites-available/default。下一个配置文件是/etc/apache2/sites-available/vivek.com

<VirtualHost *:80>
    ServerName www.vivek.com
    DocumentRoot /var/www/vivek

    # Other directives here
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/vivek/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

答案2

有一个脚本可以让你轻松完成这个任务 -https://github.com/RoverWire/virtualhost

这最终会执行与给出的答案所解释的相同的操作,但只用一个命令即可完成,例如 -

sudo virtualhost create mysite.local my_site

它还允许您删除您创建的主机

sudo virtualhost delete mysite.local my_site

请注意,“my_dir”假定它在 /var/www 之后启动

因此,如果您的站点文件夹位于 /var/www/my_site

您应该运行此命令(传递不带 /var/www 的目录路径)-

sudo virtualhost create mysite.local my_site

您还可以修改脚本文件并删除默认路径“/var/www”,以便您可以将绝对路径传递给站点目录

相关内容