при доступе: 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