几个月前,我按照他们的教程在 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:
安装
certbot
,letsencrypt 的应用程序来创建和安装证书。修改您的
VirtualHost
节,使其不代理“/.well-known”目录,并通过添加以下行为其提供 DocumentRootDocumentRoot /var/www/homeassistant ProxyPass /.well-known !
/var/www/homeassistant
如果目录尚不存在,则创建该目录。运行 certbot 来创建您的证书:
certbot register certbot certonly --webroot -w /var/www/homeassistant -d homeassistant.domain.net
其中第一个命令将使用 letsencrypt 注册你;第二个命令将请求一个证书并将其安装到 中
/etc/letsencrypt
。注意:certbot 还有一种模式可以自动启用 SSL 并为您安装证书,但我从未使用过它,所以不知道它到底是做什么的。您可能想尝试一下。为此,请使用 --apache 而不是 --webroot,然后阅读输出
certbot --help
。本文的其余部分假设您没有这样做,而是使用--webroot
模式。确保
certbot renew
定期运行,以便您的证书在到期之前自动更新(例如,通过使用cron
)。
您现在在 /etc/letsencrypt 下有证书。为了启用 SSL 并使用它们,您需要执行以下步骤:
确保
mod_ssl
已加载;如果您使用 Debian(或其衍生产品之一,例如 Ubuntu),则可以通过 来完成a2enmod ssl
;其他系统通常有一个可选的配置文件或一些您需要包含的文件。将每个
VirtualHost
语句更改VirtualHost *:443
为 HTTPS 端口。将 SSL 所需的选项添加到您的
VirtualHost
节中:SSLEngine on SSLCertificateFile /etc/letsencrypt/live/homeassistant.domain.net/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/homeassistant.domain.net/privkey.pem
(可选)添加重定向节,以便普通的 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
)。(可选)使用 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_headers
(a2enmod headers
)。