如何使用 Apache 在本地主机上运行多个网站

如何使用 Apache 在本地主机上运行多个网站

请帮助新手。我最近在 Ubuntu 22.04 上安装了 LAMP。Apache 版本:Apache/2.4.52

我想做的是在我的本地主机上启用多个网站。我读过并关注过关于这个主题的一些帖子,但我无法让它工作。

到目前为止,我已经创建了两个网站“prj1”和“prj2”:

  1. 创建了两个文件夹
sudo mkdir /var/www/prj1
sudo mkdir /var/www/prj2
  1. 在文件夹中创建两个索引文件:
sudo gedit /var/www/prj1/index.html
sudo gedit /var/www/prj2/index.html

它们很简单,第一个陈述:

网络项目 1. 位置:

/var/www/prj1

第二:

网络项目 2. 位置:

/var/www/prj2
  1. 设置权限:
sudo chown -R www-data:www-data /var/www
sudo chown -R 775 /var/www
sudo chown -R www-data:www-data /var/www/prj1
sudo chown -R www-data:www-data /var/www/prj2
  1. 为每个项目创建 .conf 文件:sudo gedit /etc/apache2/sites-available/prj1.conf
<VirtualHost *:80>
     ServerAdmin admin@prj1
     ServerName prj1
     
     DocumentRoot /var/www/prj1/
     <Directory />
        Options FollowSymLinks
        AllowOverride None
     </Directory>     
     <Directory /var/www/prj1/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/prj1.webdock.io_error.log
     CustomLog ${APACHE_LOG_DIR}/prj1.webdock.io_access.log combined
</VirtualHost>

sudo gedit /etc/apache2/sites-available/prj2.conf

<VirtualHost *:80>
     ServerAdmin admin@prj2
     ServerName prj2
     
     DocumentRoot /var/www/prj2/
     <Directory />
        Options FollowSymLinks
        AllowOverride None
     </Directory>     
     <Directory /var/www/prj2/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/prj2.webdock.io_error.log
     CustomLog ${APACHE_LOG_DIR}/prj2.webdock.io_access.log combined
</VirtualHost>
  1. 已启用的站点:
a2ensite prj1
a2ensite prj2
  1. 编辑 apache2.conf: sudo gedit /etc/apache2/apache2.conf

我添加了以下内容:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

DocumentRoot "/var/www/prj1"
<Directory "/var/www/prj1">
            Options FollowSymLinks
            AllowOverride All
            Require all granted
</Directory>

DocumentRoot "/var/www/prj2"
<Directory "/var/www/prj2">
            Options FollowSymLinks
            AllowOverride All
            Require all granted
</Directory>
  1. 在 /etc/hosts 中添加两行:sudo gedit /etc/hosts
127.0.0.1 localhost prj1
127.0.0.1 localhost prj2
  1. 重新启动Apache:
systemctl restart apache2

现在我在浏览器中使用以下 URI:

http://prj1.localhost/

这按预期工作,它显示:

网络项目 1. 位置:

/var/www/prj1

但是如果我使用http://prj2.localhost/它仍然显示第一个网站

网络项目 1. 位置:

/var/www/prj1

我做错了什么?

谢谢你,亚历克斯

答案1

我找到了问题所在。在 prj2.conf 中,prj2 的端口是 81,而不是 80。老实说,我不知道这是怎么发生的,我甚至不能说这是一个拼写错误,因为整个文本都是复制/粘贴的。无论如何,在我将其更改为 80 后,两个网站现在都可以正常工作了。

在文件 /etc/host 中,这些行应该是

127.0.0.1 项目1

127.0.0.1 项目2

URL 应为http://prj1http://prj2。唯一的问题是浏览器告诉该站点的连接“不安全”(我不知道为什么)。

我感谢该文章的所有贡献者。

问候,亚历克斯

答案2

第 7 步应该是:

127.0.0.1 prj1.localhost
127.0.0.1 prj2.localhost

答案3

根据文档,/etc/hosts文件需要具有每个 IP 地址一行.所以你应该把全部127.0.0.1在一行中引用的主机名,例如:

127.0.0.1 localhost prj1 prj2

另外,我不确定为什么您在文件和 Apache 配置中的指令中都使用纯主机名prj1和,但在 URL 中使用和。我宁愿尝试和。prj2hostsServerNameprj1.localhostprj2.localhosthttp://prj1/http://prj2/

相关内容