【问题标题】:Apache 2 Sites-Available ConfigurationApache 2 站点可用配置
【发布时间】:2010-12-28 17:20:06
【问题描述】:

我正在尝试在一个 Apache 服务器上编写大约 5 个网站,所有这些网站都在一个 IP 地址上。

例如:

  • /var/www/site1
  • /var/www/site2
  • /var/www/site3
  • /var/www/site4
  • /var/www/site5

但是,例如,如果我在站点 2 上创建一个链接,只是使用。 /index.php,您可能希望它在 /var/www/site2/index.php 中查找...但它实际上解析为 /var/www/index.php。

无论如何设置 Apache 以了解单独的站点文件夹需要表现和解析到单独的文件夹?

这是我目前可用的网站文件。我相信一个相当默认的设置:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
            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 /var/log/apache2/error.log

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

    CustomLog /var/log/apache2/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>

我们将不胜感激。

谢谢你。

安德鲁·巴洛

【问题讨论】:

  • 您是否通过我的建议实现了您想要的,或者您仍然缺少什么?
  • 不,它完美地完成了这项工作。谢谢!!!

标签: apache virtual hosts


【解决方案1】:

您需要在 &lt;VirtualHost&gt; 中添加一个 ServerName 指令。它将根据浏览器请求告诉服务器当前正在使用哪个虚拟主机(如果您的客户端访问http://site1.example.comhttp://site2.example.com,它们将连接到相同的 IP,因此连接到服务器,但请求包含原始请求 url) . 您必须复制您的&lt;VirtualHost&gt; 块才能为每个托管站点提供一个。每个块的不同之处主要在于它们的 ServerName 和 DocumentRoot。 您可以使用“apache2ctl -S”查看 apache 是如何理解您的虚拟主机设置的。

您可以使用包含此类内容的单个文件:

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

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

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

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

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

当然,也许可以确定所有这些名称的 dns 最终都在您的 IP 上。它不必是子域,只要它们位于您的服务器 ip 上并且您有相应的 ServerName 即可。如果您需要为单个站点提供额外的名称,可以在 ServerName 下方添加“ServerAlias secondname.myserver.com thirdname.myserver.com”

【讨论】:

  • 我想我明白了,但是你能给我写一个简单的例子来放入我的文件吗???
  • 谢谢你。绝对的救生员!
【解决方案2】:

@Zeograd 的答案可能是大多数解决方案的正确答案,但是我遇到了类似的问题,我需要做的就是使用 a2enmod 命令启用重写模块。

这是我在 Ubuntu 中通过命令行运行的:

sudo a2enmod rewrite
sudo service apache2 restart

如果sudo service apache2 restart不行,可以试试:

sudo /etc/init.d/apache2 restart

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2016-07-11
    • 2013-11-10
    • 2012-10-15
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多