我有一个Apache HTTP服务器,该服务器具有tomcat服务器的反向代理。但是,我只希望在客户端使用子域www时发生反向代理。这是因为我想使用其他子域来指向其他应用程序,例如电子邮件。
例如www.example.com将显示apache tomcat webapp。
我想,这样做的方法是配置DNS,以便我使用的每个子域都指向我的服务器。现在,除了www之外,还有server.example.com和posfixadmin.example.com。但是,问题是我所有的子域最终都指向了tomcat。
因此,当我尝试访问postfixadmin.example.com/setup.php通过其Web设置来设置postfixadmin时,最终将我带到了tomcat Webapp的404。
这是我的虚拟主机配置:
<VirtualHost www.example.com:80>
ServerName http://www.example.com
ProxyPass / http://localhost:8080
ProxyPassReverse / http://localhost:8080
</Virtualhost>
<VirtualHost server.example.com:8080>
ServerName server.example.com
DocumentRoot /var/www/html/
RewriteEngine on
RewriteCond %{SERVER_NAME} =server.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} {END,NE,R=permanent}
</VirtualHost>
<VirtualHost postfixadmin.example.com:80>
ServerName postfixadmin.example.com
DocumentRoot /var/www/postfixadmin/public
ErrorLog /var/log/httpd/postfixadmin_error.log
CustomLog /var/log/httpd/postfixadmin_access.log combined
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/postfixadmin/public>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
关于DNS:我为每个子域(包括www;它们全部都指向example.com域(在我的情况下使用@)。
我相信不需要在http
指令中指定ServerName
协议,并且通常,该域不需要出现在<VirtualHost>
...''`标签内。
我应该提一下,我相对不熟悉Tomcat,但是假设它正在本地主机上的8080侦听,在这种情况下,这应该会有所帮助。
[我不确定100%就是说,这就是在困扰您,但是请尝试修剪ServerName
并这样做,包括更改VirtualHost
打开标记:
<VirtualHost *:80>
ServerName www.example.com
ProxyPass / http://localhost:8080
ProxyPassReverse / http://localhost:8080
</Virtualhost>
您的第二个<VirtualHost>
可能需要进行类似的更改,尽管似乎您也正在将其定向为满足来自Web /网络的请求端口8080上传入的-我不这样做相信你的意图。
我认为您想要的是:
<VirtualHost *:80>
ServerName server.example.com
DocumentRoot /var/www/html/
RewriteEngine on
RewriteCond %{SERVER_NAME} =server.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} {END,NE,R=permanent}
</VirtualHost>