Mein Proxy-Server läuft auf IP A und so greifen die Leute auf meinen Webdienst zu. Die Nginx-Konfiguration wird auf eine virtuelle Maschine auf IP B umgeleitet.
Für den Proxyserver auf IP A habe ich diesen in meinen Sites zur Verfügung gestellt
server {
listen 443;
ssl on;
ssl_certificate nginx.pem;
ssl_certificate_key nginx.key;
client_max_body_size 200M;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location / {
proxy_pass http://10.10.0.59:80;
proxy_redirect http://10.10.0.59:80/ /;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
rewrite ^(.*) https://$http_host$1 permanent;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location / {
proxy_pass http://10.10.0.59:80;
proxy_redirect http://10.10.0.59:80/ /;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Das proxy_redirect
wurde aus genommen wie bekomme ich Nginx HTTP POST - Anfragen über Rewrite weiterleiten?
Alles, was die öffentliche IP trifft, wird wegen des Umschreibens 443 treffen. Intern leiten wir auf der virtuellen Maschine auf 80 weiter.
Aber wenn ich ein Python-Skript wie das folgende ausführe, um unsere Konfiguration zu testen
import requests
data = {'username': '....', 'password': '.....'}
url = 'http://IP_A/api/service/signup'
res = requests.post(url, data=data, verify=False)
print res
print res.json
print res.status_code
print res.headers
Ich bekomme eine 405 Method Not Allowed
. In nginx stellten wir fest, dass der interne Nginx beim Aufrufen des internen Servers eine GET
Anfrage erhielt, obwohl wir im ursprünglichen Header eine Anfrage gestellt hatten POST
(dies wurde im Python-Skript angezeigt).
Es scheint also, als hätte das Umschreiben ein Problem. Irgendeine Idee, wie man das behebt? Als ich die Umschreibung auskommentierte, traf sie mit Sicherheit 80 und ging durch. Da rewrite mit unserem internen Server kommunizieren konnte, ist rewrite selbst kein Problem. Es ist nur die Umschreibung, POST
auf die verwiesen wird GET
.
Vielen Dank!
(Dies wird auch im Nginx-Forum gefragt, da dies ein kritischer Blocker ist ...)
PUT
,POST
,DELETE
,GET
. In meinem vorherigen Setup hatte ich keinen zusätzlichen Proxy an der Front, der der Menge diente. Ich hatte dieselbe Konfiguration auf demselben internen Server (unserem Testserver). Das funktioniert gut.