Apache UseCanonicalName在isnt上将ServerName传递给CGI

在虚拟主机上的Apache 2.4中,我有:

UseCanonicalName On ServerName somename ServerAlias www.someothername.com 

根据文件:

使用UseCanonicalName在Apache上将使用ServerName指令中指定的主机名和端口来构造服务器的规范名称。 此名称用于所有自引用URL,以及CGI中的SERVER_NAME和SERVER_PORT的值。

所以在我的Tomcat / CFML应用程序中,当我访问URL www.someothername.com我期望在CGI范围内看到:

 server_name: somename 

但是我得到:

 server_name: www.someothername.com 

就像这个指令完全被忽略了一样。

 # Proxy CFML files to Tomcat RewriteCond %{REQUEST_FILENAME} /[^/:]+\.cfml*($|/) RewriteRule (.*) ajp://%{HTTP_HOST}:8009$1 [P,L] 

我也试过:

 RewriteRule (.*) ajp://%{SERVER_NAME}:8009$1 [P,L] 

并使用mod_proxy而不是AJP:

 RewriteRule (.*) http://%{SERVER_NAME}:8888$1 [P,L] 

最后2个在somename上引起DNS查询,但是仍然返回CGI.SERVER_NAME字段中的www.someothername.com

我应该指出,我这样做的唯一原因是因为我正在使用mod_cfml进行大量虚拟主机以自动创buildtomcat上下文,我希望上下文和应用程序使用从vhostconfiguration派生的简短名称。 我想我可以只设置一个头(甚至重写主机:头),但使用ServerName似乎是最优雅的解决scheme。

更新:有一些我注意到在客户端头可能是相关的。 有2个我以前没见过的标题:

 x-forwarded-host: www.someothername.com x-forwarded-server: somename 

我需要知道什么设置这些标题和原因。 我假设它是Tomcat或mod_cfml。 我可以依靠x-forwarded-server值始终是ServerName?

你不是在调用CGI,而是在代理,所以试图设置SERVER_NAME是无用的或者非常接近它。

通常情况下,对于大容量虚拟主机,您应该在您的应用程序中使用您收到的实际域名(HTTP_HOST, Host: HTTP标头)来进行区分。