Nginx перенаправляет на порт 8080 при доступе к URL без косой черты [закрыто]

19

при доступе: http://example.com/somefolder -> http://example.com:8080/somefolder

Я попробовал это:

 http {
    port_in_redirect off;

Есть идеи?

Крис Мюнх
источник
Можете ли вы предоставить свою конфигурацию? Вы используете другой сервис за nginx?
Шейн Мэдден
Я полагаю, что мы прокси на Apache. Какие файлы конфигурации вы хотите?
Крис Мюнх
3
Файл конфигурации nginx, который определяет serverблок, содержащий proxy_passдирективу. То, что вам, вероятно, понадобится, будет proxy_redirectдирективой - подтверждение вашей конфигурации должно подтвердить.
Шейн Мэдден
Обратите внимание, что некоторые браузеры кэшируют перенаправления, поэтому при переходе port_in_redirectс onна offвам может потребоваться перезапустить его.
всплытие
@emersion port_in_redirectвообще не работает
TomSawyer

Ответы:

21

Я просто столкнулся с той же проблемой и на port_in_redirect off;самом деле работал на меня, просто убедитесь, что вы используете его внутри server {}блока.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}
neojp
источник
Или даже использовать port_in_redirectвнутри location.
августа
отлично работал на хостинге nginx на 8080 за балансировщиком нагрузки. спасибо
xxstevenxo
также работал для меня, большое спасибо за вашу помощь
h3nr1ke
4

Это должно решить проблему. Добавить proxy_redirectдирективу сразу после proxy_passдирективы

proxy_redirect http://example.com:8080/ http://example.com/;

Hariadi
источник
3

Если кто-то все еще испытывает эту проблему, имея apache за настройкой обратного прокси-сервера nginx, вы можете попробовать ff:

  место расположения / {
    proxy_redirect off;
    proxy_set_header Host $ host: $ server_port; # <- этот решил мой
    proxy_set_header X-Forwarded-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

Моя установка состоит в том, что я позволяю Apache прослушивать 127.0.0.1:8083 и разрешать запросы прокси-сервера nginx к нему.

gone43v3r
источник
2

У меня была такая же проблема с моей настройкой nginx + Apache. Apache, кажется, перенаправляет на свой собственный порт (работает на 8080), а nginx на 80-м.

В моей настройке это сделало бесконечный цикл перенаправления для обычных URL:

proxy_set_header Host $host:80; # Force port 80

Вместо этого свяжите возвращаемые данные с портом 80, вот так:

proxy_bind $host:80; # Bind to port 80

Вот мой серверный блок nginx:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _; # Wildcard server

    location / {
        proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
        proxy_pass http://localhost:8080;
        proxy_set_header Host            $host; # Pass host header
        proxy_set_header X-Real-IP       $remote_addr; # Preserve client IP
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

При такой установке подстановочных знаков все запросы, которые nginx не имеет серверного блока, передаются в Apache.

Ecker00
источник
Не работает вообще
TomSawyer
1

Если у кого-то еще возникла эта проблема - статья здесь: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ решила проблему для меня ,

Мне пришлось добавить дополнительный заголовок в прокси.

Убедитесь , что у вас есть набор хост для $http_hostа также , что Вы установили , X-Forwarded-Hostчтобы $http_hostнравится ниже:

proxy_redirect off;
proxy_set_header Host $http_host;             # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;
derekyau
источник
Это не работает вообще
TomSawyer
1

Я думаю, что этого простого примера достаточно:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}
Xiaomu Blue
источник
0

У меня была аналогичная проблема.

Может быть, вы должны использовать директиву, proxy_set_headerчтобы установить хост и местоположение заголовков. В моей конфигурации я добавил proxy_set_header Location $host:80; и все запросы возвращают порт 80 сейчас.

Сергей Ковтонюк
источник
Я полагаю, что это прервет перенаправления за пределы "/" - каждый редирект будет указывать на $ host: 80
perrierism
0

Эта проблема вызвана тем, что Nginx автоматически переводит относительный путь в абсолютный, верно?
Есть способ сказать Nginx не переводить, вы добавляете пробел перед косой чертой: ngx.redirect(" /foo")

Саймон
источник
Обратите внимание, что это вопрос от 3 лет назад.
Охотник на оленей
-1

Я бы рекомендовал вместо этого добавить это в свой блок сервера:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

Это было, когда вы переходите на example.com/wp-admin, он идет на example.com/wp-admin, а не на example.com:8080/wp-admin/, и если вы, например, находитесь на CloudFlare DNS, он скажет сайт не работает

Я использую Ubuntu, Nginx и Varnish, и теперь это прекрасно работает, а не отключает port_in_redirect.

Чтобы добавить, обязательно перезапустите nginx после:

sudo service nginx restart
cchiera
источник
-1

Добавление absolute_redirect off; в блок местоположения работает для меня.

Виджит Шарма
источник