我的服务器上只能有一个外部 IP,因此为了运行邮件服务器以及其他 Apache 实例进行网络托管,我认为我被迫使用 mod_proxy。
我以前尝试过使用 mod_proxy,但我记得只能让它在我的内部网络中工作,但我需要它在我的网络之外工作。
邮件服务器位于与其他站点位于同一台服务器上的 VM 上,但我将其设置为桥接网络,因此 VM 具有不同的内部 IP。
一些额外的说明:
- 主服务器内网IP为192.168.1.59
- 邮件服务器内部IP为192.168.1.171
- 我的主站点必须保留我创建的 HTTPS 证书/重写。如果可能的话,最好在邮件服务器上使用相同的密钥。
- 一切都在 Debian 7.7 上运行(包括 VM)。两个实例都已完全更新,等等。
/etc/apache2/ports.conf:
########## Global Properties ############################ # Ensure that Apache listens on port 80/443 Listen 80 Listen 443 # Listen for virtual host requests on all IP addresses NameVirtualHost *:80 NameVirtualHost *:443 <Proxy *> Order Allow,Deny Allow from all </Proxy> ProxyRequests Off ########################################################## ############## SSL Properties ########################## <VirtualHost *:443> DocumentRoot /var/www/site1.net SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key </VirtualHost> <IfModule mod_gnutls.c> Listen 443 </IfModule> ########################################################## ################### Websites ########################### <VirtualHost *:80> DocumentRoot /var/www/site1.net/ ServerName site1.net RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R,L] </VirtualHost> <VirtualHost *:80> ServerName http://www.mail.site1.net ProxyPreserveHost On ProxyPass / http://192.168.1.171:80/mail/ ProxyPassReverse / http://192.168.1.171:80/mail RewriteRule ^/(.*)$ http:///192.168.1.171:80/mail/$1 [P,L] </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/site2.com/ ServerName www.site2.com </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/site2.com/ ServerName site2.com </VirtualHost>
这并不是我唯一尝试过的事情,但过了这么久,我忘记自己尝试过什么了。只是希望其他人有更多的经验。谢谢大家的帮助!
答案1
您的设置假设 Webmail 前端必须与后端邮件服务器托管在同一台主机上。但这不是自然的做法,因为 (1) 它要求您运行两个 Web 服务器而不是一个,并且 (2) 它会从外部创建到内部邮件服务器的直接连接,而内部邮件服务器应该在 LAN 内受到保护。
为什么不将 Webmail 前端托管在公共 Web 服务器 (192.168.1.59) 上,并将其配置为从 192.168.1.171 上的后端 IMAP 服务器提取邮件?这样就不需要 HTTP 代理了。您可以通过添加以下地址从 www.site1.net/mail 提供 Webmail
Alias /mail /path/to/webmail/app
到 site1.net 虚拟主机,或者从 www.mail.site1.net 使用
<VirtualHost *:80>
ServerName http://www.mail.site1.net
DocumentRoot /path/to/webmail/app
</VirtualHost>
管他呢。
例如,如果您的网络邮件应用程序是 Roundcube,那么您需要$rcmail_config['default_host'] = '192.168.1.171'
设置它连接到您的 IMAP 服务器。
现在,面向公众的 SSL 证书变得更加容易,因为您只需将它们托管在 Web 服务器上即可。如果您仍想通过 LAN 加密 Web 和邮件服务器之间的 IMAP 连接,您可以这样做,但它将使用不同的内部证书。
外部到 SMTP 的连接可以通过 iptables 从 192.168.1.59 转发到 192.168.1.171。这不会与 Apache 冲突,因为它们在不同的端口上运行。