у меня есть 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;