Переадресация косой черты в Nginx + Apache [закрыто]


8

У меня есть Nginxсервер, работающий через 80порт, работающий в качестве прокси, Apache 2.2который прослушивает127.0.0.1:8080

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

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

Любые идеи о том, как это исправить?


Проблема, по-видимому, связана с вашей конфигурацией nginx, учитывая, что ваш доступ к порту 80 без завершающей косой черты приводит к перенаправлению на порт 8080. ЕСЛИ ваш nginx проксирует Apache, а Apache заказывает перенаправление.
пп.

Я использую nginx в качестве прокси
кварка

Ответы:


5

Я тоже столкнулся с этим и смог исправить это с помощью директивы 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;

    }
}

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


добавление proxy_redirect дает синтаксическую ошибку
TomSawyer

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

Таким образом, вы все еще получаете его медленнее из-за перенаправления
TomSawyer

2

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


1

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

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

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

HTP


1

Я столкнулся с этой проблемой в последнее время. Пока предлагаемые решения будут работать, 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
  }
}

0

Возможно, 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

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