WordPress интенсивная активность MySQL без доступа к блогу

#php #mysql #wordpress

#php #mysql #wordpress

Вопрос:

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

/wp-content/folder/my.xml

Отлично. Теперь я перенаправляю своих пользователей, которые обычно приходят через URL RSS-канала, в этот статический файл через .htaccess:

 # BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# Rewrite feed/ to Static Feed:
RewriteRule ^feed/?$ /wp-content/folder/my.xml [L,T=application/rss xml]
</IfModule>
# END WordPress
  

Кажется, что все это отлично работает — однако, глядя на MySQL, он находится под действительно большой нагрузкой из-за количества пользователей, которые получает мой сервер. Это странно, поскольку все, что он теоретически делает, это предоставляет им статический XML. Глядя на процессы в phpmyadmin, я вижу множество:

 SELECT SQL_CALC_FOUND_ROWS  wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND ...
  

Который предлагает каждый запрос на / feed /? вызывает активность MySQL… почему??

Есть идеи?

Ответ №1:

Я полагаю, вам не хватает / в начале вашего регулярного выражения или RewriteBase / объявления над ним.


Попробуйте изменить свое правило перезаписи следующим образом:

 RewriteBase /
RewriteRule ^(feed/?)?$ /wp-content/folder/my.xml [L,T=application/rss xml]
  

Комментарии:

1. Спасибо. Я добавил RewriteBase / выше правила перезаписи, и это не возымело никакого эффекта … ?

2. 100%… все это в /?feed= rss2

3. Если это так, то /?feed=rss2, безусловно, не попадает под ваше правило перезаписи, и неудивительно, почему вы получаете активность MySQL.

4. Ах … на что мне следует изменить мое правило перезаписи?

5. Это очень близко… Теперь я, наконец, перенаправлен, но говорит /wp-content/folder/my.xml не может быть найден (хотя я могу перейти к нему)

Ответ №2:

Вы уверены, что этот файл генерируется ТОЛЬКО при публикации нового поста в блоге? Недействительный механизм регенерации — единственная причина, которая приходит мне на ум.

@Denis также правильно упомянул, что вы, возможно, перенаправляете не в то место. Пользователи могут вводить путь, который будет создавать XML-файл «на лету» для каждого запроса.

Редактировать:

Спасибо @Denis, но попробуйте один из:

 RewriteRule ^?feed=rss2$ /wp-content/folder/my.xml [L,T=application/rss xml]

RewriteRule ^/?feed=rss2$ /wp-content/folder/my.xml [L,T=application/rss xml]
  

Комментарии:

1. Ну, глядя на файл, я могу отредактировать его вручную, и эти изменения не будут перезаписаны, пока я не опубликую снова …?

2. Если я вызываю статический файл XML напрямую, все в порядке… Я получаю статический файл … если я вызову первую точку входа в браузере, должна ли она измениться в адресной строке? в журналах доступа я вижу: «GET / ?feed=rss2 HTTP / 1.1″ 301 — ЗАТЕМ /feed / HTTP / 1.1» 200 18700

3. Это сломалось… может быть, мне следует повторить: мне нужно перенаправлять любые вызовы / ?feed = rss2 на /wp-content/folder/xml.xml

Ответ №3:

У меня была похожая проблема.

Я обнаружил, что кто-то время от времени напрямую (удаленно) бомбардировал мою базу данных MySQL. Вероятно, они раздобыли пароли, не знаю как.

Я решил это, установив MySQL в ‘safe_mode: On’ (используя cPanel / php.ini EZ Config)

Затем я также сменил пароль в cPanel.

После этого моя нагрузка резко снизилась.

Надеюсь, это поможет,

CGS


Обновление: Проблемы вернулись, поэтому вышеуказанное не помогло. После еще нескольких тестов я обнаружил, что именно плагин «WP Stats» вызывал множество запросов к базе данных. После того, как я деактивировал его, я больше не видел ошибок.