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

Перенаправление конечной косой черты Nginx + Apache

у меня есть Nginx сервер работает на 80 порт работает как прокси для Apache 2.2 который слушает 127.0.0.1:8080

Когда я получаю доступ http://hostname/subfolder/ он отлично работает.
Когда я получаю доступ http://hostname/subfolder он перенаправляет меня на http://hostname:8080/subfolder/ что неправильно.

Насколько я понимаю, Apache возвращает неправильное перенаправление, но UseCanonicalName и UseCanonicalPhysicalProxy оба настроены на Off

Есть идеи, как это исправить?

Я тоже столкнулся с этим, и я смог исправить это с помощью директивы proxy_redirect сразу после моей директивы proxy_pass в моей конфигурации nginx:

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

Это моя полная конфигурация nginx (в моем случае Apache находится на порту 81 и размещает два сайта. Я добавил две строки proxy_redirect для конкретных сайтов, потому что я не уверен, как добавить одну общую).

server {
    listen 80;

    access_log /var/log/nginx/apache-proxy.access.log;

    location / {
        proxy_pass http://localhost:81;

        #fix for apache redirects that include the port number
        proxy_redirect http://nfriedly.com:81/ http://nfriedly.com/;
        proxy_redirect http://misticflame.com:81/ http://misticflame.com/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 6000;
        proxy_send_timeout 6000;
        proxy_read_timeout 6000;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        send_timeout 6000;
        proxy_buffering off;
        proxy_next_upstream error;

    }
}

Примечание: это было для версии nginx до 1.0 5+ лет назад. Вот документы для proxy_redirect для текущей версии: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Если ваша директива ServerName в Apache установлена ​​на «hostname: 8080», удалите «: 8080» или измените его на «hostname: 80». Вы также можете добавить "proxy_set_header Host $ host: 80"

У меня была эта проблема давным-давно .. Насколько я помню, это было связано с HTTP RFC, косая черта в конце обозначает каталог (/ test /), без косой черты в конце это файл (/ test)

Короче говоря, добавьте правило перезаписи, которое добавит завершающую косую черту к запросу, если его нет.

смотреть на Решено: проблема с конечной косой чертой на сервере Nginx

ПВТ

Недавно я столкнулся с этой проблемой. Хотя предлагаемые решения будут работать, Nginx предлагает встроенное решение:

proxy_redirect default;

Документация на http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Вот полный пример того, как его использовать:

server {
  listen 80;
  location / {
    proxy_pass http://localhost:8080
    proxy_redirect default
  }
}

Возможно, nginx не устанавливает заголовки прокси, чтобы сообщить apache, как выглядел исходный запрос.

В nginx:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Видеть http://wiki.nginx.org/LikeApache