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

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

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

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

 http {
    port_in_redirect off;

Любые идеи?

Я столкнулся с той же проблемой и 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;
  }
}

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

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

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

  location / {
    proxy_redirect off;
    proxy_set_header Host $host:$server_port; # <-- this one solved mine
    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 запрашивать его.

У меня была такая же проблема с настройкой 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.

Если у кого-то еще была эта проблема - статья здесь: 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;

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

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

Добавление absolute_redirect off; в блоке локации у меня работает.

http://wiki.codemongers.com/NginxHttpCoreModule#port_in_redirect

syntax: port_in_redirect [ on|off ]
default: port_in_redirect on
context: http, server, location

Надеюсь, это то, что вы ищете.

У меня была похожая проблема.

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

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

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

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