У меня есть приложение 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/
, который не работает, потому что он не существует (этот порт не доступен извне).
Есть что-то базовое, что я пропускаю?Я не хочу, чтобы этот внутренний порт был частью перенаправления.