具有虚拟主机的 Userdir(Apache2)

具有虚拟主机的 Userdir(Apache2)

使用 Ubuntu 16.04 和 Apache 2.4.7 我想创建两种不同类型的用户目录。

  1. 数据/home/user/public_html/仅可通过 www.sample.com/~user/ 进行访问。(www2.sample.com/~user/ 不起作用。)
  2. 数据/home/user/public_html2/仅可通过 www2.sample.com/~user/ 进行访问。(www.sample.com/~user/ 不起作用。)

我使用 /etc/apache2/sites-availabile/000-default.conf 完成了两个虚拟主机的设置,然后尝试修改 mods-available/userdir.conf。很容易使 public_html 或 public_html2 可访问,但无法使用不同的主机名使两者可访问。你能教我怎么做吗?

我无法按原样编写代码,但是 000-default.conf 和 userdir.conf 是这样的:

000-默认.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/www
    ServerName www.sample.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</irtualHost>
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/www2
    ServerName www2.sample.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</irtualHost>

userdir.conf(此代码的前半部分是原始的userdir.conf。我只是将其复制并粘贴在原始代码下方,并将public_html更改为public_html2。)

<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root
    <Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>
</IfModule>
<IfModule mod_userdir.c>
    UserDir public_html2
    UserDir disabled root
    <Directory /home/*/public_html2>
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>
</IfModule>

答案1

我不确定我是否 100% 理解了您的问题,但我假设您要求拥有 2 个不同的域,每个域都使用不同的 UserDir。

编辑:您走在正确的轨道上。您唯一缺少的是,您需要将两个 UserDir 配置分别放入其各自的 VirtualHost 配置中,如下所示。

为此,您需要创建两个虚拟主机,并且每个虚拟主机都有自己的 UserDir 配置。

第一个虚拟主机将包含以下内容:

# /etc/apache2/sites-available/com.sample.www.conf
<VirtualHost *:80>
    ServerName www.sample.com

    <IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root
        <Directory /home/*/public_html>
            AllowOverride FileInfo AuthConfig Limit Indexes
            Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
            <Limit GET POST OPTIONS>
                Require all granted
            </Limit>
            <LimitExcept GET POST OPTIONS>
                Require all denied
            </LimitExcept>
        </Directory>
    </IfModule>
</VirtualHost>

第二个虚拟主机将包含以下内容:

# /etc/apache2/sites-available/com.sample.www2.conf
<VirtualHost *:80>
    ServerName www2.sample.com
    UserDir public_html2

    <IfModule mod_userdir.c>
        UserDir disabled root
        <Directory /home/*/public_html2>
            AllowOverride FileInfo AuthConfig Limit Indexes
            Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
            <Limit GET POST OPTIONS>
                Require all granted
            </Limit>
            <LimitExcept GET POST OPTIONS>
                Require all denied
            </LimitExcept>
        </Directory>
     </IfModule>
</VirtualHost>

完成后,您需要启用 2 个虚拟主机配置文件并重新启动 Apache。

$ sude a2dissite 000-default.conf
$ sudo a2ensite com.sample.www.conf
$ sudo a2ensite com.sample.www2.conf
$ sudo apache2ctl restart

现在,当你打开时www.sample.com/~dan/它将使用/home/dan/public_html/ ,当你打开时www2.sample.com/~dan/它将使用/home/dan/public_html2/

答案2

如果您尝试在一个主机名上进行多站点,则可以使用 userdir 模块。您可以使用浏览器通过 /~username 访问用户主目录。在您的代码底部 * 地址为用户主目录下的 public_html 文件夹。因此无需在 userdir.conf 中添加第二个或更多目录标签。详细信息:https://httpd.apache.org/docs/current/en/mod/mod_userdir.html

...
<Directory /home/*/public_html>
      AllowOverride FileInfo AuthConfig Limit Indexes
      Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
      <Limit GET POST OPTIONS>
         Require all granted
      </Limit>
      <LimitExcept GET POST OPTIONS>
         Require all denied
      </LimitExcept>
</Directory>
...

相关内容