Nginx переспрямовує до порту 8080 під час доступу до URL без косої риски [закрито]


19

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

Я спробував це:

 http {
    port_in_redirect off;

Будь-які ідеї?


Чи можете ви надати свою конфігурацію? Ви звертаєтесь до іншої служби за nginx?
Шейн Мадден

Я вважаю, що ми наближаємось до апаша. Які файли конфігурації ви хочете?
Кріс Мюнч

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.
wqw

відмінно працював для розміщення nginx на 8080 за балансиром навантаження. дякую
xxstevenxo

також працював для мене, дякую за вашу допомогу
h3nr1ke

4

Це має вирішити проблему. Додайте proxy_redirectдирективу відразу за proxy_passдирективою

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


3

Якщо хтось і раніше відчуває цю проблему під час встановлення apache за налаштуванням зворотного проксі nginx, ви можете спробувати ff:

  Місцезнаходження / {
    proxy_redirect вимкнено;
    proxy_set_header Хост $ хост: $ 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 зараз.


Я вірю, що це перерве переадресацію за межі "/" - кожен переспрямування вказуватиме на $ хост: 80
пер'єрсизм

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

-1

Додавання absolute_redirect off; до блоку розташування працює для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.