Перезаписать на HTTP_HOST заморозку сайта? - PullRequest
1 голос
/ 21 июля 2010

У меня есть несколько доменов, указывающих на один и тот же веб-сервер, и я хочу настроить его так, чтобы перезаписывать весь входящий трафик в один согласованный домен.Я сделал это, прежде чем убедиться, что запрос имеет www.в нем, но когда я добавил нижеприведенный скрипт в качестве сайта, он начал зависать.

 RewriteCond %{HTTP_HOST} !^www\.domain\.com(.*) [NC]
 RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,NC,L]

После того, как я добавлю это в свой .htaccess (прежде всего, мои другие перезаписывает) и сохраню файл на сервере,сайт будет работать в обычном режиме около 10 секунд, после чего запросы к нему начнут зависать.Я знаю, что это очень странно, это происходит после того, как файл сохраняется на сервере.Если я уберу строки выше, он сразу начнет работать.

Я немного растерялся относительно того, что может быть причиной этой странной проблемы.

ОБНОВЛЕНИЕ: Я проверил своипереписать логи, сравнивая до и после внесения изменений.Я вижу много этих ошибок

 127.0.0.1 - - [21/Jul/2010:12:57:35 --0400] [280082-web1.dummy.com/sid#2b4899b49d30][rid#2b489a396148/initial] (2) [perdir /var/www/html/] rewrite '*' -> 'http://www.dummy.com/*'
 127.0.0.1 - - [21/Jul/2010:12:57:35 --0400] [280082-web1.dummy.com/sid#2b4899b49d30][rid#2b489a396148/initial] (2) [perdir /var/www/html/] explicitly forcing redirect with http://www.dummy.com/*

Я также проверил свои журналы доступа на ту же метку времени и вижу это:

 127.0.0.1 - - [21/Jul/2010:12:57:35 -0400] "OPTIONS * HTTP/1.0" 301 333 "-" "Apache/2.2.3 (Red Hat) (internal dummy connection)"

У меня действительно включен keepAlive.Может ли это быть причиной проблемы?

Также попытался добавить этот cond в мою перезапись, и он все еще выдает ошибки: RewriteCond% {REMOTE_ADDR}! 127.0.0.1

1 Ответ

1 голос
/ 22 июля 2010

Я начну с того, что это спекуляция с моей стороны (я не слишком знаком с этим аспектом обработки Apache), но это было немного длинно для комментария, и, надеюсь, это поможет с расследованиемэто немного дальше.

Поскольку вы, вероятно, используете MPM наподобие prefork, метод управления дочерними процессами Apache заключается в отправке им запроса на их пробуждение.Я полагаю, что раньше это был запрос GET, но, учитывая, что запрос реального ресурса может создать ненужную нагрузку на сервер для этой цели, похоже, что теперь он вместо этого отправляет запрос OPTION.

Вы также сказали, что для KeepAlive установлено значение On.Если ваши запросы занимают значительное количество времени (по сравнению с обычным запросом), вполне возможно, что ваши дочерние процессы привязаны к точке, где сервер должен порождать новые для обработки дополнительного входящего трафика.Следовательно, если ваше значение MaxSpareServers установлено достаточно низким, после того, как процессы освободятся, Apache может убить множество дочерних элементов.

Чтобы убить их, необходимо установить этоOPTION запрос в вашем журнале, чтобы убедиться, что они не спят.Это в конечном итоге будет обработано вашим правилом mod_rewrite, которое, будучи объединено со всем остальным, может привести к крайне медленному замедлению, которое вы испытываете.

Я не уверен, почему ваше RewriteCond нене работает, чтобы предотвратить перенаправление.Вы можете попробовать это, но я не уверен, почему все будет иначе:

RewriteCond %{REQUEST_METHOD} =OPTIONS [NC]
RewriteRule ^.*$ - [R=200,L]    

RewriteCond %{HTTP_HOST} !=www.example.com [NC]
RewriteRule ^.*$ http://www.example.com/$0 [R=301,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...