Назад | Перейти на главную страницу

Nginx - при туннелировании URL-адрес перенаправляется без номера порта

Моя проблема очень похожа на эту: прокси-сервер nginx перенаправляет игнорирующий порт

Я использую nginx 1.0.14.

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

Вот соответствующая часть.

server {
    listen 80;
    server_name localhost 127.0.0.1;
    server_name_in_redirect off;

# location other services go here

location ~ /forum/(.*)$ {
    #rewrite ^(.*):(.*)/forum(.*)$ /$2 last;
    #rewrite ^(.*)$ http://localhost:8000/$1;
    #rewrite ^/forum(.*)$ $1 break;

    # the forum service runs as local, listens to 8000 port...
    proxy_pass http://localhost:8000;
    proxy_redirect default;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Так что будет, если я использую ssh-tunnel?

ssh -L 1111:192.168.1.165:80 username@server-address -N

затем откройте браузер, http://localhost:1111, и когда я вхожу в систему или делаю что-либо, требующее перенаправления, я получаю http: // localhost / forum / главная страница вместо того http: // localhost: 1111 / froum / главная страница

Эти ссылки неверны, nginx будет жаловаться (со стороны сервера), что их не существует.

Внутренний сервисный форум работает по адресу http://localhost:8000

Я пробовал такие вещи, как

proxy_set_header $host:$server_port;  # or
proxy_set_header $proxy_host:$proxy_port;  # or
proxy_set_header $host:$proxy_port;  # or
rewrite ^(.*):(.*)/forum(.*)$ /$2 last;
#rewrite ^/forum(.*)$ $1 break;
proxy_redirect http://localhost/ http://$host:$proxy_port;

Второй proxy_set_header показывает небольшой прогресс. После нажатия submit, Я получаю пустую страницу с исходным URL (http: // локальный: 1111 / сообщение а потом я снова вижу тот же URL).

Есть идеи, как решить мою проблему? Спасибо.

Итак, я придумал простое решение ... в качестве собственного ответа ...

proxy_set_header Host $host;

$host следует заменить на $http_host, хотя я не совсем понимаю, в чем смысл.

Вам нужно включить proxy_redirect Он перезаписывает заголовок хоста ответа, чтобы предотвратить возникшую проблему. Установка значения по умолчанию должна помочь.