Перезапись URL в контейнере Dogin nginx неправильно использует внутренний порт - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть приложение Django, которое работает в среде Docker;один контейнер для gunicorn и один для nginx.Сервер nginx моего приложения прослушивает порт 9081, который является внутренним по отношению к системе (он не подвергается воздействию внешнего мира).Другой контейнер nginx (который направляет трафик) находится на порте 80 и при необходимости отправляет трафик на мой сайт (на основе имени хоста, полученного запросом).

Вот настройка nginx моего приложения, сведенная к основам:

upstream project {
    server gun_project:8001;  # gunicorn container
}

server {
    listen 9081;
    server_name mytool.myhost.com;

    set_real_ip_from 172.17.0.0/16;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;

    location / {
        proxy_pass http://project;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Вот настройка маршрутизатора nginx, снова урезанная:

upstream project {
    server ngx_project:9081;  # nginx container
}

server {
    listen 80;
    server_name mytool.myhost.com;
    return 302 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name mytool.myhost.com;

    # SSL Info
    ssl_certificate /etc/nginx/ssl/mycert.cer;
    ssl_certificate_key /etc/nginx/ssl/mycert.key;

    location / {
        proxy_pass http://project;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Я хочу перенаправить URL-адрес на этом сайте из одного местоположения в другое (URL-адрес навсегда изменился).Я делаю это с помощью перезаписи в блоке location конфигурации nginx моего приложения (первый блок nginx выше):

    location / {
        rewrite "^/oldpath/$" /newpath/ permanent;

        proxy_pass http://project;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

Когда я делаю это, я пытаюсь загрузить старый URL (mytool.myhost.com/oldpath/) в веб-браузере я перенаправлен на mytool.myhost.com:9081/newpath/, который не работает, потому что он не существует (этот порт не доступен извне).

Есть что-то базовое, что я пропускаю?Я не хочу, чтобы этот внутренний порт был частью перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...