Apache 和 mod_proxy - 有什么问题?

Apache 和 mod_proxy - 有什么问题?

我的服务器上只能有一个外部 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 冲突,因为它们在不同的端口上运行。

相关内容