django: nginx: HTTP_HOST не показывает номер порта - PullRequest
0 голосов
/ 07 мая 2020

У меня работает следующий код

Конфигурация Nginx выглядит следующим образом:

# 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;
    }
}

Nginx сервер имеет переадресацию портов: 8555:8558

И запущенная команда gunicorn:

gunicorn --bind :8888 basic_django.wsgi:application

Теперь в моем браузере я открываю этот URL:

http://127.0.0.1:8555/login_register_password/user_login_via_otp_form_email

Теперь мой код в одном из моих представлений

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"

Я использую prev_url и login_form_email_url_reverse_full как одинаковые, но разные

prev_url домен - http://127.0.0.1:8555, тогда как login_form_email_url_reverse_full домен - http://127.0.0.1

почему это происходит.

Этого не происходит на сервере разработки. используя 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",

Где, как с nginx сервер: HTTP_HOST изменяется, т.е. теперь без номера порта

"HTTP_HOST": "127.0.0.1",
"HTTP_REFERER": "http://127.0.0.1:8555/login_register_password/user_login_via_otp_form_email",

1 Ответ

0 голосов
/ 07 мая 2020

Я решил проблему, изменив

    proxy_set_header Host $host;

на

    proxy_set_header Host $http_host;

в server {} из local.conf из nginx

Получил ответ из https://serverfault.com/a/916736/565479

...