Port proxy pour l’application nginx / gunicorn Django Rest Framework

J’utilise gunicorn et nginx pour acheminer les requêtes entrantes vers mon API Django Rest Framework.

gunicorn s’exécute sur le port 8001, nginx s’exécute sur le port 8000. nginx est configuré pour transmettre les demandes à gunicorn, conformément au fichier de configuration suivant:

server { listen 8000; server_name ec2-ww.xx.yy.zz.compute-1.amazonaws.com; # public address of my server, redacted for stack overflow access_log /vol/logs/ftv.access.log; location ^~ /static/ { alias /vol/server/ftv/static/; autoindex on; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) { #access_log off; expires 30d; } location / { proxy_pass_header Server; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_connect_timeout 10; proxy_read_timeout 10; proxy_set_header Host $host:8000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://ec2-ww.xx.yy.zz.compute-1.amazonaws.com:8001/; } } 

Le problème que j’ai est que HyperlinkedModelSerializer de DRF renvoie les URLs qui pointent vers le port 8001, au lieu du port 8000. Ceci est (je suppose) parce que Django Rest Framework, ignorant gunicorn ou nginx, voit simplement la requête arriver sur le port 8001, et forme donc ses hyperliens d’URL basés sur ce port.

Je dois manquer une option de configuration dans mon fichier de configuration nginx, ou dans settings.py (ou les deux) mais, étonnamment (pour moi), cette question n’a pas été posée / n’a pas reçu de réponse auparavant. Toute aide des experts de DRF ou de nginx serait très appréciée!

En changeant

 proxy_set_header Host $host:8000; 

à

 proxy_set_header Host $http_host; 

dans le fichier de configuration nginx semble avoir résolu le problème –