Apache UseCanonicalName On übergibt den Servernamen nicht an CGI

2

Auf Apache 2.4 in einem virtualhost habe ich:

UseCanonicalName On
ServerName somename
ServerAlias www.someothername.com

Nach den Dokumenten:

With UseCanonicalName On Apache verwendet den in der ServerName-Direktive angegebenen Hostnamen und Port, um den kanonischen Namen für den Server zu erstellen. Dieser Name wird in allen selbstreferenzierenden URLs und für die Werte von SERVER_NAME und SERVER_PORT in CGIs verwendet.

Wenn ich in meiner Tomcat / CFML-Anwendung die URL besuche, www.someothername.comwürde ich erwarten, dass sie im CGI-Bereich angezeigt wird:

server_name: somename

aber stattdessen bekomme ich:

server_name: www.someothername.com

Es ist, als würde die Richtlinie völlig ignoriert.

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

Ich habe auch versucht:

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

und mit mod_proxy anstelle von AJP:

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

Die letzten 2 führen zu einer DNS-Suche, werden somenamejedoch weiterhin www.someothername.comim Feld CGI.SERVER_NAME zurückgegeben

Ich möchte darauf hinweisen, dass der einzige Grund, warum ich dies tue, darin besteht, dass ich Massen-Virtual-Hosting mit mache, mod_cfmlum automatisch Tomcat-Kontexte zu erstellen, und ich möchte, dass der Kontext und die Anwendung einen von der vhost-Konfiguration abgeleiteten Kurznamen verwenden. Ich schätze, ich könnte einfach einen Header setzen (sogar den Host: -Header umschreiben), aber die Verwendung von ServerName schien die eleganteste Lösung zu sein.

UPDATE: In den Client-Headern ist mir etwas aufgefallen, das wahrscheinlich relevant ist. Es gibt 2 Überschriften, die ich noch nicht gesehen habe:

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

Ich muss wissen, wie und warum diese Header gesetzt wurden. Ich gehe davon aus, dass es entweder Tomcat oder mod_cfml war. Kann ich mich darauf verlassen, dass der x-forwarded-serverWert immer ServerName ist?

SpliFF
quelle

Antworten:

0

Sie rufen kein CGI auf, sondern sind Proxy-Benutzer. Daher ist der Versuch, SERVER_NAME festzulegen, entweder nutzlos oder sehr nahe daran.

In der Regel sollten Sie beim virtuellen Massenhosting den tatsächlichen Domänennamen verwenden, den Sie erhalten haben, dh HTTP_HOST, den Host:HTTP-Header, um die Unterscheidung zu treffen.

Michael Hampton
quelle
Das macht Sinn, außer dass CFML-Engines CGI emulieren und einen CGI-Bereich bereitstellen, der die Felder enthält, die Sie erwarten würden. Für Punkt 2 möchte ich keine separaten "Kontexte" basierend auf dem vom Client verwendeten FQDN. Was ich möchte, sind viele FQDN-Aliase, die alle auf denselben "Kurznamen" -Kontext verweisen. Ich möchte die 'Host'-Header-Informationen beibehalten, benötige aber auch den "wahren" Servernamen.
SpliFF
Hmm. Sie müssen es also woanders bekommen, denke ich. Vielleicht der mysteriöse Header, den Sie erwähnt haben? Es sollte nur einen Moment dauern, um zu testen, ob sich das so verhält, wie Sie es erwarten.
Michael Hampton
Vielen Dank, aber ich denke, Sie sind zu schnell, um anzunehmen, dass der ursprüngliche Wert für Servername nicht durchgereicht wird, da dies "nicht CGI" ist. Ich denke, das ist überhaupt nicht das Problem. Ich denke, es wird irgendwann in der httpd -> mod_proxy -> mod_cfml -> tomcat -> railo-Verarbeitungskette überschrieben und ich kann das wahrscheinlich verhindern, wenn ich wüsste, wo.
SpliFF