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;
  }
}

Или даже использовать port_in_redirectвнутри location.
августа

отлично работал на хостинге nginx на 8080 за балансировщиком нагрузки. спасибо
xxstevenxo

также работал для меня, большое спасибо за вашу помощь
h3nr1ke

4

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

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


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 к нему.


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.


Не работает вообще
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;

Это не работает вообще
TomSawyer

1

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

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.