Моя проблема очень похожа на эту: прокси-сервер 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 Он перезаписывает заголовок хоста ответа, чтобы предотвратить возникшую проблему. Установка значения по умолчанию должна помочь.