Tengo el siguiente código ejecutándose en producción.
La configuración de Nginx es la siguiente:
# first we declare our upstream server, which is our Gunicorn application upstream hello_server { # docker will automatically resolve this to the correct address # because we use the same name as the service: "djangoapp" server webapp:8888; } # now we declare our main server server { listen 8558; server_name localhost; location / { # everything is passed to Gunicorn proxy_pass http://hello_server; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; } } El servidor Nginx tiene redirección de puertos: 8555:8558
Y el comando gunicorn en ejecución es
gunicorn --bind :8888 basic_django.wsgi:applicationAhora en mi navegador abro esta url:
http://127.0.0.1:8555/login_register_password/user_login_via_otp_form_email
Ahora mi código en una de mis vistas es
prev_url = request.META['HTTP_REFERER'] # EG: prev_url = http://127.0.0.1:8555/login_register_password/user_login_via_otp_form_email # we want to get the url from namespace . We use reverse. But this give relative url not the full url with domain login_form_email_url_reverse = reverse("login_register_password_namespace:user_login_via_otp_form_email") # EG: login_form_email_url_reverse = "/login_register_password/user_login_via_otp_form_email" # to get the full url we have to use do the below login_form_email_url_reverse_full = request.build_absolute_uri(login_form_email_url_reverse) # EG: login_form_email_url_reverse_full = "http://127.0.0.1/login_register_password/user_login_via_otp_form_email" Espero que prev_url y login_form_email_url_reverse_full sean iguales pero difieren
el dominio prev_url es http://127.0.0.1:8555 mientras que el dominio login_form_email_url_reverse_full es http://127.0.0.1
por qué está pasando esto.
Esto no sucede en el servidor de desarrollo. usando runserver
"HTTP_HOST": "127.0.0.1:8555", "HTTP_REFERER": "http://127.0.0.1:8555/login_register_password/user_login_via_otp_form_email", Donde como con el servidor nginx: HTTP_HOST cambia, es decir, ahora sin número de puerto
"HTTP_HOST": "127.0.0.1", "HTTP_REFERER": "http://127.0.0.1:8555/login_register_password/user_login_via_otp_form_email",Resolví el problema cambiando
proxy_set_header Host $host;Para
proxy_set_header Host $http_host; en el server {} de local.conf de nginx
Obtuve la respuesta de https://serverfault.com/a/916736/565479