Il mio server proxy funziona su ip A ed è così che le persone accedono al mio servizio web. La configurazione di nginx reindirizzerà a una macchina virtuale su ip B.
Per il server proxy su IP A, questo è disponibile nei miei siti
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;
}
}
È proxy_redirect
stato preso da come posso ottenere nginx per inoltrare le richieste HTTP POST tramite riscrittura?
Tutto ciò che colpisce l'IP pubblico colpirà 443 a causa della riscrittura. Internamente, stiamo inoltrando a 80 sulla macchina virtuale.
Ma quando eseguo uno script Python come quello qui sotto per testare la nostra configurazione
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
Sto ottenendo un 405 Method Not Allowed
. In nginx abbiamo scoperto che quando ha colpito il server interno, il nginx interno stava ottenendo una GET
richiesta, anche se nell'intestazione originale abbiamo fatto un POST
(questo era mostrato nello script Python).
Quindi sembra che riscrivere abbia un problema. Qualche idea su come risolvere questo problema? Quando ho commentato la riscrittura, colpisce sicuramente 80, ed è andato a buon fine. Dal momento che riscrivere è stato in grado di parlare con il nostro server interno, quindi riscrivere se stesso non ha alcun problema. È solo la riscrittura rilasciata POST
a GET
.
Grazie!
(Questo verrà anche chiesto sul forum Nginx perché si tratta di un blocco critico ...)
PUT
,POST
,DELETE
,GET
. Nella mia configurazione precedente non avevo questo proxy extra nella parte anteriore che serviva la folla. Ho avuto la stessa configurazione sullo stesso server interno (il nostro server di prova). Funziona benissimo.