Apache UseCanonicalName On isnt passando ServerName para CGI

2

No Apache 2.4 em um virtualhost eu tenho:

UseCanonicalName On
ServerName somename
ServerAlias www.someothername.com

De acordo com os documentos:

With UseCanonicalName On Apache will use the hostname and port specified in the ServerName directive to construct the canonical name for the server. This name is used in all self-referential URLs, and for the values of SERVER_NAME and SERVER_PORT in CGIs.

Então, no meu aplicativo Tomcat / CFML, quando visito o URL www.someothername.com , eu esperaria ver no escopo do CGI:

server_name: somename

mas em vez disso eu obtenho:

server_name: www.someothername.com

É como se a diretriz fosse totalmente ignorada.

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

Eu também tentei:

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

e usando mod_proxy em vez de AJP:

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

Os últimos 2 causam uma pesquisa de DNS em somename , mas ainda retorna www.someothername.com no campo CGI.SERVER_NAME

Devo salientar que a única razão pela qual estou fazendo isso é porque estou realizando hospedagem virtual em massa com mod_cfml para criar automaticamente contextos tomcat e gostaria que o contexto e o aplicativo usassem um nome abreviado derivado de a configuração do vhost. Eu acho que poderia apenas definir um cabeçalho (mesmo reescrever o cabeçalho Host:), mas usando ServerName parecia a solução mais elegante.

ATUALIZAÇÃO: Há algo que notei nos cabeçalhos dos clientes que provavelmente é relevante. Existem 2 cabeçalhos que não vi antes:

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

Eu preciso saber o que define esses cabeçalhos e por quê. Eu estou supondo que seja Tomcat ou mod_cfml. Posso confiar no valor x-forwarded-server para sempre ser ServerName?

    
por SpliFF 03.02.2014 / 04:16

1 resposta

0

Você não está chamando um CGI, você está fazendo proxy, então tentar definir SERVER_NAME é inútil ou muito próximo a ele.

Normalmente, com hospedagem virtual em massa, você deve usar o nome de domínio real recebido, que é HTTP_HOST, o cabeçalho Host: HTTP, em seu aplicativo para fazer a distinção.

    
por 03.02.2014 / 05:21