在虚拟主机上的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标头)来进行区分。