子域名的 Apache2 VHost

子域名的 Apache2 VHost

几个月前,我按照他们的教程在 FreeNAS 上运行的 Ubuntu 20.04.3 LTS VM 上配置了我的 nextcloud,所以请耐心等待,我绝不是一个训练有素的 apache2 专家 ;-)

我的 nextcloud 的当前 VHost 配置如下:

<VirtualHost *:80>
     ServerAdmin [email protected]
     DocumentRoot /var/www/nextcloud/
     ServerName cloud.domain.net
     ServerAlias www.cloud.domain.net

     Alias /nextcloud "/var/www/nextcloud/"

     <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
          <IfModule mod_dav.c>
            Dav off
          </IfModule>
        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine on
RewriteCond %{SERVER_NAME} =cloud.domain.net [OR]
RewriteCond %{SERVER_NAME} =www.cloud.domain.net
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

我最近设置了我的 Home Assistant,并希望通过 HASS App 授予远程访问权限。我想重定向通过以下方式进入的流量:

https://homeassistant.domain.net

我对 homeassistant.conf 的方法是:

<VirtualHost *>
    ServerName homeassistant.domain.net

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://192.168.0.9:8123/
    ProxyPassReverse / http://192.168.0.9:8123/
    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>

不幸的是,这不起作用......

有人能指出正确的配置吗,以便我的 Home Assistant Trafic 也是 SSL 加密的?

答案1

您需要确保您的VirtualHost语句完全相同。目前,其中一个语句为VirtualHost *,另一个语句为VirtualHost *:80。这是错误的。由于通常最好使用端口号,因此您应该将位添加:80到另一VirtualHost行。这应该使其无需加密即可工作。

为了添加 HTTPS,您还有更多事情要做。以下说明解释了如何为您的homeassistant.domain.net域执行操作,但如果您想在那里加密流量,则必须重复对您的 nextcloud 域的说明。

首先,您需要一个证书。由于您说要“授予远程访问权限”,因此我假设您的服务器可以从公共互联网访问;这意味着您可以使用letsencrypt

  1. 安装certbot,letsencrypt 的应用程序来创建和安装证书。

  2. 修改您的VirtualHost节,使其不代理“/.well-known”目录,并通过添加以下行为其提供 DocumentRoot

     DocumentRoot /var/www/homeassistant
     ProxyPass /.well-known !
    
  3. /var/www/homeassistant如果目录尚不存在,则创建该目录。

  4. 运行 certbot 来创建您的证书:

     certbot register
     certbot certonly --webroot -w /var/www/homeassistant -d homeassistant.domain.net
    

    其中第一个命令将使用 letsencrypt 注册你;第二个命令将请求一个证书并将其安装到 中/etc/letsencrypt

    注意:certbot 还有一种模式可以自动启用 SSL 并为您安装证书,但我从未使用过它,所以不知道它到底是做什么的。您可能想尝试一下。为此,请使用 --apache 而不是 --webroot,然后阅读输出certbot --help。本文的其余部分假设您没有这样做,而是使用--webroot模式。

  5. 确保certbot renew定期运行,以便您的证书在到期之前自动更新(例如,通过使用cron)。

您现在在 /etc/letsencrypt 下有证书。为了启用 SSL 并使用它们,您需要执行以下步骤:

  1. 确保mod_ssl已加载;如果您使用 Debian(或其衍生产品之一,例如 Ubuntu),则可以通过 来完成a2enmod ssl;其他系统通常有一个可选的配置文件或一些您需要包含的文件。

  2. 将每个VirtualHost语句更改VirtualHost *:443为 HTTPS 端口。

  3. 将 SSL 所需的选项添加到您的VirtualHost节中:

     SSLEngine on
     SSLCertificateFile /etc/letsencrypt/live/homeassistant.domain.net/fullchain.pem
     SSLCertificateKeyFile /etc/letsencrypt/live/homeassistant.domain.net/privkey.pem
    
  4. (可选)添加重定向节,以便普通的 HTTP 请求 80 重定向到 HTTPS:

     <VirtualHost *:80>
         ServerName homeassistant.domain.net
         DocumentRoot /var/www/homeassistant
         <Directory /var/www/homeassistant>
             Require all granted
             Redirect permanent / https://homeassistant.domain.net/
         </Directory>
     </VirtualHost>
    

    这需要mod_alias,它通常是启用的(但如果没有,您可能必须启用它;在 Debian 和衍生产品上,您可以使用a2enmod alias)。

  5. (可选)使用 Strict-Transport-Security 和一些其他选项来强化您的 SSL 配置:

     Header set Strict-Transport-Security max-age=15768000
     Header set X-Frame-Options SAMEORIGIN
     Header set X-Content-Type-Options nosniff
    

    这需要mod_headersa2enmod headers)。

相关内容