我有以下情况:
我的互联网提供商给我提供了一个静态 IP 地址。多年来,我一直在运行 owncloud 的 raspberry PI 上的一个小型 raspbian 服务器上使用这个地址。
现在我购买了一个功能更强大的 zotac 盒子(四核处理器、8 GB RAM、256 GB SSD),并且我试图让 owncloud 服务器和 rocket.chat 服务器(类似于 Slack)在 https 上运行,当然它也应该在 https 上运行。
Zotac 盒子运行 Ubuntu Server 18.04 LTS,位于 Airport Extreme 路由器后面。我的主域上有 2 个不同的子域指向我的 IP 地址。
80
我已经为端口、443
和都配置了路由,8443
使其全部指向我的 zotac 盒子的本地 IP 地址192.168.1.33
。示例:
owncloud 服务器(Apache 2 带有 PHP 7.2 和 MySQL 5.7)可以在 上运行https://cloud.mydomain.example
,现在我想让 rocket.chat 可以在 上运行https://chat.mydomain.example:8443
,或者更好的是,简单地在 上运行https://chat.mydomain.com
。
Rocket.chat 可快速安装,在 上的 caddy 网络服务器上运行localhost:3000
。我尝试按照 上描述的 https 设置进行操作https://rocket.chat/docs/installation/manual-installation/ubuntu/snaps/autossl/但无法让它工作。我还尝试设置运行 owncloud 服务器的 Apache 作为反向代理,如中所述https://stackoverflow.com/questions/8541182/apache-redirect-to-another-port,但没能让它发挥作用。
然后我尝试使用以下 rocketchat.conf 文件为端口 8443 设置虚拟主机:
<VirtualHost *:8443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/private/ssl/apache-selfsigned.key
ServerAdmin [email protected]
ServerName localhost
ProxyPreserveHost On
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass / https://localhost:3000/
ProxyPassReverse / https://localhost:3000/
</VirtualHost>
我也不明白为什么我不能简单地让我的 caddy 监听端口 8443(并且仍然使用 https),而 Apache 监听端口 80 和 443。
哪种设置最适合我的情况?需要采取哪些步骤?
答案1
我觉得Rocket.Chat 官方文档足够清楚:
在 Apache SSL 反向代理后面运行以 root 身份运行:
apt-get update apt-get install apache2 a2enmod proxy_http a2enmod proxy a2enmod ssl a2enmod proxy_wstunnel a2enmod rewrite
将您的私钥添加到
/etc/ssl/private/chat.domain.com.key
锁定权限:
chmod 400 /etc/ssl/private/chat.domain.com.key
将您的证书添加到
/etc/ssl/certs/chat.domain.com.crt
将您的中间体添加到
/etc/ssl/certs/intermediate.ca.pem
编辑
/etc/apache2/sites-enabled/rocketchat.conf
并确保使用您的实际主机名代替下面的示例主机名“your_hostname.com”。<VirtualHost *:443> ServerAdmin [email protected] ServerName chat.domain.com ErrorLog /var/log/chat.domain.com_error.log TransferLog /var/log/chat.domain.com_access.log LogLevel info SSLEngine On SSLCertificateFile /etc/ssl/certs/chat.domain.com.crt SSLCertificateKeyFile /etc/ssl/private/chat.domain.com.key SSLCertificateChainFile /etc/ssl/certs/intermediate.ca.pem <Location /> Order allow,deny Allow from all </Location> RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://localhost:3000/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://localhost:3000/$1 [P,L] ProxyPassReverse / http://localhost:3000/ </VirtualHost>
重新启动Apache:
service apache2 restart
当它说
请务必使用您的实际主机名代替示例主机名“your_hostname.com”
这可能意味着
请务必使用您的实际外部 https 地址(例如
https://www.example.com
)代替http://localhost:3000