Проявилась следующая проблема:
на отдельном сервере стоит apache+mod_accell, у сервера 1 адрес.
прописаны наразных портах виртуальные сервера:
<VirtualHost _default_:8001>
AccelPass / http://srv001/ [MC=30,MW=100,PH]
</VirtualHost>
<VirtualHost _default_:8002>
AccelPass / http://srv002/ [MC=30,MW=100,PH]
</VirtualHost>
UseCanonicalName Off
На роутере прописан НАТ на обращение к реальным серверам переход наэти порты
и адрес.
при обращении к сайту, если у URL нет завершающего слэша, а обращение
происходит ккаталогу
бэкенд делает авторедиректс использование заверщающего слэша, а фронтэнд при
это добавляет
порт в зависимости от его порта на кэширующем сервере, как сделать так, чтобы
порт не добавлялся?
Нужно патчить src/mod_accel/accel_http.c, примерно так:
if (rewrite) {
char *url, *refresh, *new;
/* Location */
if (url = (char *)ap_table_get(r->headers_out, "Location")) {
- new = (rewrite == 2) ? accel_rewrite_url(a, url):
- accel_rewrite_port(a, url, port);
+ new = (rewrite == 2) ? accel_rewrite_url(a, url): NULL;
+
if (new)
ap_table_setn(r->headers_out, "Location", new);
}
/* Refresh */
if ((refresh = (char *)ap_table_get(r->headers_out, "Refresh"))
&& (url = strstr(refresh, "url=")))
{
- new = (rewrite == 2) ? accel_rewrite_url(a, url + 4):
- accel_rewrite_port(a, url + 4, port);
+ new = (rewrite == 2) ? accel_rewrite_url(a, url + 4): NULL;
+
if (new)
ap_table_setn(r->headers_out, "Refresh",
ap_pstrcat(r->pool,
ap_pstrndup(r->pool,
refresh, url + 4 - refresh ),
new, NULL));
}
}
Игорь Сысоев
http://sysoev.ru