Apache/Nginx: proxy-POST-Anfragen an remote-server, handle OPTIONEN Anfragen lokal
Ich versuche, Apache zu konfigurieren, die als proxy für ein remote-server, um einen cross-domain-AJAX mit CORS. Um dies zu erreichen, brauche ich Apache, um zu reagieren 2-HTTP-Verben wie so:
-
OPTIONEN:
Antworten zu diesem CORS 'pre-flight' - Anfrage mit einigen einfachen HTTP-Header. Ich hatte im Hinterkopf, dass dies ein einfaches CGI-Skript (options.pl). -
POST:
Proxy-alle POST-requests an den remote-server, sondern fügen Sie die Access-Control-Allow-Origin " * " - header zu ermöglichen, der cross-domain-Anfrage geschehen.
Kann ich erreichen beide Anforderungen sind unabhängig, aber ich kann nicht konfigurieren, Apache, beides zu tun. Das problem ist, dass, wenn Sie die ProxyPass und ProxyPassReverse konfiguriert ist, wird das OPTIONEN-Anforderungen nicht mehr treffen, die dem CGI-Skript, werden Sie umgeleitet, um den remote-server.
Meine aktuelle config ist unten. Ich möchte lösen diese mit einer reinen web-server-Lösung wie z.B. Apache/Nginx (statt laufen einige Anwendung code), wenn möglich.
<VirtualHost *:80>
ScriptAlias /cgi-bin//usr/lib/cgi-bin/
DocumentRoot /var/www
<Location "/">
# Disallow all verbs except OPTIONS and POST
order deny,allow
deny from all
# OPTIONS should be handled by a local CGI script
<Limit OPTIONS>
allow from all
Script OPTIONS /cgi-bin/options.pl
</Limit>
# POST requests are proxied to a remote server
<Limit POST>
allow from all
ProxyPass http://somewhere-else/
ProxyPassReverse http://somewhere-else/
Header add Access-Control-Allow-Origin "*"
</Limit>
</Location>
</VirtualHost>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier, wie ich gelöst habe es mit Nginx. Beachten Sie, dass ich die Header Mehr Modul die erforderlichen mich zu kompilieren von Nginx Quelle.
Können Sie meine nginx_cross_origin_module jetzt. Es unterstützt die volle CORS-feature: https://github.com/yaoweibin/nginx_cross_origin_module
Beispiel: