Конфигурация nginx + php-fpm на ISPmanager для wordpress? Nginx wordpress


HTTPS для сайта на WordPress под управлением nginx.

rsz_https-nginx2

В последнее время наблюдается бум перехода на HTTPS не только для интернет магазинов, но и для информационных сайтов, коими по большей части и являются сайты, созданные на популярной платформе WordPress. Двигателем подобного перехода послужило заявление создателей Chromium о маркировке сайтов без HTTPS как небезопасных. Движок Chromium используется во многих популярных браузерах (основной тут конечно Google Chrome). Кроме того, Google заявил об изменении в ранжировании сайтов и приоритизации в выдаче ресурсов, использующих безопасное соединение.

Подобные заявления не остались без внимания веб мастеров и многие крупные ресурсы уже осуществили переход на HTTPS, в то же время проекты поменьше пока в большинстве своем остаются на HTTP, но это вероятно обусловлено потенциальными сложностями перехода и дополнительными расходами.

Данная статья расскажет о том, каким образом осуществить перевод на HTTPS сайтов, использующих WordPress, не потратив денег на SSL сертификат, получить оценку безопасности A+ в популярном тесте, минимизировать накладные расходы на обслуживание HTTPS соединений и выполнить требования Яндекса для успешной индексации картинок.

UPD: В связи с появлением атаки Weak Diffie-Hellman and the Logjam Attack статья обновлена. Проверьте свои сайты на предмет уязвимости к этой атаке!

В статье предполагается, что наш сервер использует nginx в качестве веб сервера. Если ваш сайт все еще использует Apache, советую задуматься о переходе, так как это даст достаточно приличный прирост производительности и позволит использовать последний тренд в оптимизации HTTPS — технологию SPDY. Подробная инструкция по настройке WordPress на nginx доступна по ссылке: Руководство по настройке блога WordPress на nginx.

В качестве тестового стенда я буду использовать блог, настроенный по руководству, указанному выше. Замену внутренних ссылок я осуществлю при помощи wp-cli. Хотя для этих целей существует множество плагинов, но для разовой операции по замене ссылок на мой взгляд их использование не принесет каких либо плюсов, а просто добавит еще один плагин.

Все операции по настройке HTTPS можно разделить на 4 этапа:

1. Получение сертификата.2. Настройка nginx.3. Настройка WordPress.4. Проверка результата.

Получение сертификата.

В данной главе мы поговорим о получении бесплатного валидного сертификата от компании StartSSL. Конечно есть ненулевая вероятность того, что в старых браузерах нет их корневого сертификата, но по итогам установки их сертификата на сервер Admins.SU, не встретилось ни одного клиента с подобной проблемой. Большинство элементов сайта StartSSL.com русифицировано, так что с регистрацией проблем возникнуть не должно, но на всякий случай опишу все шаги.

1. Перейдем на страницу https://www.startssl.com/?app=12

Если мы попробуем сразу зайти в контрольную панель по кнопке Authenticate, то получим ошибку: При соединении с auth.startssl.com произошла ошибка. SSL-узлу не удалось договориться о приемлемом наборе параметров безопасности. (Код ошибки: ssl_error_handshake_failure_alert). Все дело в том, что аутентификация происходит по сертификату, который необходимо получить в результате регистрации.

Так что для начала нажмем на кнопку Sign-up.

2. Заполним все требуемые поля. Пусть вас не вводит в заблуждение отсутствие звездочки напротив телефона. Без него регистрация не пройдет

3. Получим на почту код подтверждения, который и введем на сайте.

4. После завершения регистрации в браузер пропишется сертификат, по которому и будет осуществлен доступ в панель управления StartSSL.

5. Важно этот сертификат забэкапить. Для этого необходимо произвести экспорт вместе с секретным ключом. Так как файл экспорта может попасть в руки сторонним людям, обязательно ставьте пароль.

В Google Chrome:

a. Войдите в настройки Google Chrome.b. На главной странице настроек снизу нажмите «Показать дополнительные настройки».c. В секции HTTPS/SSL найдите кнопку «Настроить сертификаты» и нажмите на нее.d. Во вкладке «Личные» найдите ваш сертификат от StartCom выданный, на вашу почту.e. Выберите этот сертификат и нажмите «Экспорт».f. В меню про экспорт закрытого ключа выберите «Да, экспортировать закрытый ключ».g. В следующем окне отметьте галочками «Включить по возможности все сертификаты в путь сертификации» и «Экспортировать все расширенные свойства».h. Укажите имя файла, в который вы сохраните сертификатi. После сохранения файла сохраните его в надежном месте.

В Firefox:

a. Войдите в настройки Firefox.b. Перейдите в меню «Дополнительные».c. Откройте вкладку «Сертификаты».d. Нажмите на кнопку «Просмотр сертификатов».e. Перейдите во вкладку «Ваши сертификаты».f. Найдите ваш сертификат на имя почты.g. Нажмите на кнопку «Сохранить копию».h. Укажите имя файла имя файла и нажмите «Сохранить».i. Укажите пароль для сертификата. Нажмите ОК.

Теперь можно зайти на страницу https://auth.startssl.com/

6. На странице https://auth.startssl.com/ нажмем на кнопку «Contol Panel».

7. Перейдем по вкладке «Validations Wizard».8. В поле Type укажем «Domain Name Validation».Нажмем Continue.9. На странице «Enter Domain Name» укажем имя домена. Нажмем Continue.10. На следующей странице необходимо указать email, с помощью которого будет проходить валидация. Это адреса postmaster/hostmaster/webmaster @ ИМЯ_домена или адрес, на который домен зарегистрирован. Выберем любой удобный и нажмем Continue.11. На почту придет «Authentication Code», который необходимо будет ввести на странице валидации.

12. Перейдем по вкладке «Certificates Wizard».13. В поле «Certificate Target:» выберем Web Server SSL/TLS Certificate. Нажмем Continue.14. На странице «Generate Private Key» можно либо создать новый Private Key, либо пропустить этот шаг, нажав Skip, чтобы использовать свой Private Key. Если вы создаете новый, то необходимо ввести пароль (Key Password) от 10 символов, длину ключа (Keysize) и алгоритм (Secure Hash Algorithm). Длина ключа 2048 обычно достаточна, алгоритм SHA1 не подходит для новых браузеров, так что выберем SHA2. После этого нажмем Continue.15. Выберем наш домен из выпадающего списка и нажмем Continue.16. Теперь необходимо указать субдомен, обычно это WWW.ИМЯ_ДОМЕНА. После этого нажмем Continue и на следующей странице снова Continue.17. На следующей странице мы получим код сертификата, который необходимо сохранить. В ряде случаев сервис может сообщить, что для выпуска сертификата требуется время. В этом случае уведомление о выпуске придет на почту, а получить сертификат можно будет на вкладке «Tool Box» по ссылке «Retrieve Certificate».18. После генерации личного ключа, его можно расшифровать с помощью команды «openssl rsa -in ssl.key -out ssl.key», либо в Tool Box сайта StartSSL по ссылке «Decrypt Private Key». Можно этого не делать, но тогда каждый раз при перезапуске nginx придется указывать этот пароль. С другой стороны это безусловно повысит уровень безопасности.

Настройка nginx.

После получения сертификата, его необходимо подключить к нашему nginx. Все, описанное ниже, предполагает, что настройки nginx выполнены согласно руководству по настройке WordPress для LEMP. Если вы используете свой конфиг nginx, настройки могут отличаться.

1. Сохраним все необходимые сертификаты на сервере с nginx:

sudo mkdir /etc/nginx/ssl && cd $_

sudo mkdir /etc/nginx/ssl && cd $_

 

1.1. Данный пункт появился в связи с новой атакой Weak Diffie-Hellman and the Logjam Attack. Для унификации инструкции, данный пункт обязателен для любой версии Linux, т.к. ниже в конфигах на него идут отсылки.

Исполним данный код:

sudo mkdir -p /etc/nginx/ssl/private sudo chmod 710 /etc/nginx/ssl/private cd /etc/nginx/ssl/private sudo openssl dhparam -out dhparams.pem 2048 sudo chmod 600 dhparams.pem

sudo mkdir -p /etc/nginx/ssl/private

sudo chmod 710 /etc/nginx/ssl/private

 

cd /etc/nginx/ssl/private

sudo openssl dhparam -out dhparams.pem 2048

sudo chmod 600 dhparams.pem

 

2. В файл вставим полученный ранее Private key:

cd /etc/nginx/ssl sudo nano private.key

cd /etc/nginx/ssl

sudo nano private.key

3. В файле сохраним полученный сертификат. Вместо %SITENAME% укажите имя своего домена:

4. Скачаем вышестоящий сертификат:

sudo wget https://www.startssl.com/certs/sub.class1.server.ca.pem

sudo wget https://www.startssl.com/certs/sub.class1.server.ca.pem

5.Произведем склейку сертификатов для дальнейшего использования в nginx. Вместо %SITENAME% необходимо указать имя вашего домена:

cat %SITENAME%.pem sub.class1.server.ca.pem > %SITENAME%-chain.pem

cat %SITENAME%.pem sub.class1.server.ca.pem > %SITENAME%-chain.pem

6. Изменим конфигурационный файл nginx для работы по HTTPS. Вместо %SITENAME% укажите имя своего домена без WWW:

sudo nano /etc/nginx/conf.d/%SITENAME%.conf

sudo nano /etc/nginx/conf.d/%SITENAME%.conf

7. В секции Server найдем параметр listen, исправим порт с 80 на 443, добавим ключи ssl и spdy:

# listen *:80; listen *:443 ssl spdy;

# listen *:80;

listen *:443 ssl spdy;

8. После строки с параметром index вставим следующее, не забыв сменить %SITENAME% на имя домена без WWW:

# Включить поддержку ssl. ssl on; # Путь до файла, содержащего склеенный сертификат домена и вышестоящего узла ssl_certificate /etc/nginx/ssl/%SITENAME%-chain.pem; # Путь до Private Key ssl_certificate_key /etc/nginx/ssl/private.key; # Разрешенные протоколы. SSL3 дырявый, SSL2 старый. TLSv1 оставляем только для совместимости со старыми браузерами. Если таких нет, лучше удалить. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Виды разрешенных шифров. Указаны наиболее распространенные, исключая небезопасные. ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; # Исключаем возможность BEAST-атаки. ssl_prefer_server_ciphers on; # Исключаем возможность атаки Weak Diffie-Hellman and the Logjam Attack ssl_dhparam /etc/nginx/ssl/private/dhparams.pem; # Время жизни SSL сессии. ssl_session_cache shared:SSL:10m; # Таймаут сессии. ssl_session_timeout 5m; #Позволяет серверу прикреплять OCSP-ответы, тем самым уменьшая время загрузки страниц у пользователей. ssl_stapling on; # Требуется для ssl_stapling. resolver 8.8.8.8 8.8.4.4; # HSTS. Механизм, активирующий форсированное защищённое соединение по HTTPS add_header Strict-Transport-Security max-age=31536000;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# Включить поддержку ssl.

ssl on;

# Путь до файла, содержащего склеенный сертификат домена и вышестоящего узла

ssl_certificate /etc/nginx/ssl/%SITENAME%-chain.pem;

# Путь до Private Key

ssl_certificate_key /etc/nginx/ssl/private.key;

# Разрешенные протоколы. SSL3 дырявый, SSL2 старый. TLSv1 оставляем только для совместимости со старыми браузерами. Если таких нет, лучше удалить.

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

# Виды разрешенных шифров. Указаны наиболее распространенные, исключая небезопасные.

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

# Исключаем возможность BEAST-атаки.

ssl_prefer_server_ciphers on;

# Исключаем возможность атаки Weak Diffie-Hellman and the Logjam Attack

ssl_dhparam /etc/nginx/ssl/private/dhparams.pem;

# Время жизни SSL сессии.

ssl_session_cache shared:SSL:10m;

# Таймаут сессии.

ssl_session_timeout 5m;

#Позволяет серверу прикреплять OCSP-ответы, тем самым уменьшая время загрузки страниц у пользователей.

ssl_stapling on;

# Требуется для ssl_stapling.

resolver 8.8.8.8 8.8.4.4;

# HSTS. Механизм, активирующий форсированное защищённое соединение по HTTPS

add_header Strict-Transport-Security max-age=31536000;

9. Теперь перейдем в конец файла и добавим новую секцию Server для настройки переадресации с HTTP на HTTPS с возможностью передачи картинок по HTTP (сделано для нормальной индексации картинок Yandex картинками):

# Не забудьте изменить %SITENAME% на имя домена. server { listen *:80; server_name %SITENAME% www.%SITENAME%; access_log /var/log/nginx/%SITENAME%.access.log; error_log /var/log/nginx/%SITENAME%.error.log; root /srv/%SITENAME%; index index.php; # Для всех файлов кроме php, отключить логирование, установить максимальный срок жизни кэша. location ~* ^.+\.(jpg|jpeg|gif|png|ico|bmp)$ { access_log off; log_not_found off; expires 60d; } location / { # Перенаправим все остальные запросы на HTTPS. return 301 https://$server_name$request_uri; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# Не забудьте изменить %SITENAME% на имя домена.

server {

listen *:80;

server_name %SITENAME% www.%SITENAME%;

access_log /var/log/nginx/%SITENAME%.access.log;

error_log /var/log/nginx/%SITENAME%.error.log;

root /srv/%SITENAME%;

index index.php;

# Для всех файлов кроме php, отключить логирование, установить максимальный срок жизни кэша.

location ~* ^.+\.(jpg|jpeg|gif|png|ico|bmp)$ {

access_log off; log_not_found off; expires 60d;

}

location / {

# Перенаправим все остальные запросы на HTTPS.

return 301 https://$server_name$request_uri;

}

}

9. После сохранения файла проверим конфигурационный файл:

Если все сделано правильно, перезапустим nginx:

Настройка WordPress.

Для нормальной работы WordPress по HTTPS необходимо изменить его настройки. Для этого воспользуемся wp-cli.

Скачаем wp-cli:

cd ~/ curl -L https://raw.github.com/wp-cli/builds/gh-pages/phar/wp-cli.phar > wp-cli.phar

cd ~/

curl -L https://raw.github.com/wp-cli/builds/gh-pages/phar/wp-cli.phar > wp-cli.phar

Дадим wp-cli права на выполнение, переместим его в директорию из PATH, проверим работоспособность:

sudo chmod +x /usr/bin/wp-cli.phar sudo mv /usr/bin/wp-cli.phar /usr/bin/wp wp --version

sudo chmod +x /usr/bin/wp-cli.phar

sudo mv /usr/bin/wp-cli.phar /usr/bin/wp

wp --version

Теперь перейдем в директорию с сайтом и выполним команду wp search-replace. Вместо %SITENAME% укажите имя своего домена без WWW:

wp search-replace 'http://%SITENAME%' 'https://%SITENAME%'

wp search-replace 'http://%SITENAME%' 'https://%SITENAME%'

Поздравляю, настройка завершена.Осталось зайти в административную панель WordPress и удалить кэши.

Проверка результата.

Убедившись, что сайт теперь полностью под властью SSL, можно проверить настройки на стандартные проблемы в безопасности с помощью замечательного ресурса https://www.ssllabs.com

На момент написания статьи сайт с приведенными выше настройками заработал оценку A+.

ВАЖНО: статья не прошла боевого крещения и возможно не учитывает каких либо индивидуальных тонкостей в настройке. Если у вас возникли проблемы с использованием HTTPS и вы следовали выше приведенной инструкции, пожалуйста не стесняйтесь оставлять комментарии, я обязательно помогу.

admins.su

Настройка Wordpress + nginx + php5-fpm? — Toster.ru

Есть сайт на wordpress, посещаемость ~ 2000 в сутки, онлайн 100-300 человек. Все это расположено на VPS хостинге с 4 CPU и 1 Gb RAM на связке пу vesta + nginx + apache + apc + mysql. Страницы для незарегистрированных пользхователей кэшируются и загружаются за доли секунды, но для зарегистрированных пользователей часто отваливается база mysql. Загрузка сервера при этом колеблется от 7 до 15.

Решил перенести все это на nginx + php-fpm + apc + percona (mysql). База теперь не отваливается, но возникла другая проблема - на загрузку страницы уходит теперь 5-10 секунд, несмотря на то что она отдается из кэша. При этом закрузка самого сервера не поднимается выше 3.5.

Подскажите, что можно настроить, чтобы ускорить загрузку страниц?

конфиг mysql:

[client] port = 3306 socket = /var/run/mysqld/mysqld.sock default-character-set = utf8 [mysqld] # GENERAL # user = mysql default-storage-engine = InnoDB socket = /var/run/mysqld/mysqld.sock pid-file = /var/run/mysqld/mysqld.pid # MyISAM # key-buffer-size = 32M myisam-recover = FORCE,BACKUP # SAFETY # max-allowed-packet = 16M max-connect-errors = 1000000 skip-name-resolve sql-mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY sysdate-is-now = 1 innodb = FORCE innodb-strict-mode = 1 # DATA STORAGE # datadir = /var/lib/mysql/ # BINARY LOGGING # log-bin = /var/lib/mysql/mysql-bin expire-logs-days = 14 sync-binlog = 1 # CACHES AND LIMITS # tmp-table-size = 32M max-heap-table-size = 32M query-cache-type = 0 query-cache-size = 0 max-connections = 500 thread-cache-size = 50 open-files-limit = 65535 table-definition-cache = 1024 table-open-cache = 2048 # INNODB # innodb-flush-method = O_DIRECT innodb-log-files-in-group = 0 innodb-log-file-size = 64M innodb-flush-log-at-trx-commit = 0 innodb-file-per-table = 1 innodb-buffer-pool-size = 592M # LOGGING # log-error = off log-queries-not-using-indexes = 1 slow-query-log = 1 slow-query-log-file = off

конфиг nginx:

user www-data; worker_processes 4; timer_resolution 100ms; worker_rlimit_nofile 8192; pid /var/run/nginx.pid; events { worker_connections 768; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 15; types_hash_max_size 2048; server_tokens off; client_max_body_size 8m; open_file_cache max=5000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; include /etc/nginx/mime.types; default_type application/octet-stream; access_log off; error_log off; gzip on; gzip_disable "msie6"; gzip_static on; gzip_comp_level 5; gzip_min_length 1024; gzip_http_version 1.1; gzip_proxied any; gzip_vary on; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; gzip_buffers 16 8k; fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }

toster.ru

Кэширование сайта на Wordpress средствами Nginx | CODESELLER

#user 'user' virtual host 'example.com' configuration file

fastcgi_cache_path /var/tmp/nginx/user/example levels=2 keys_zone=example:16m max_size=512m inactive=1d;

server {

server_name example.com www.example.com;

charset UTF-8;

disable_symlinks if_not_owner from=$root_path;

index index.php;

root $root_path;

set $root_path /var/www/user/data/www/example.com;

ssi on;

access_log /var/www/httpd-logs/example.com.access.log ;

error_log /var/www/httpd-logs/example.com.error.log notice;

listen 123.234.345.456:80; #не забудьте поменять на свой ip сервера

include /etc/nginx/vhosts-includes/*.conf;

# объявляем о необходимости кешировать только тех, у кого НЕТ куки комментатора (боты и большинство других посетителей)

if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {

set $do_not_cache 1;

}

 

fastcgi_cache_bypass $do_not_cache;

fastcgi_no_cache $do_not_cache;

fastcgi_pass_header Cookie;

fastcgi_cache example; #не забудьте поменять

fastcgi_cache_key $request_method|$host|$request_uri;

fastcgi_cache_valid 301 8h;

fastcgi_cache_valid 404 1h;

# важно: это время жизни кеша страницы - больше значение, реже обновляется, но и меньше нагрузки

fastcgi_cache_valid 200 12h;

if ($http_user_agent !~* FeedBurner|FeedValidator) {

rewrite ^/feed.rss$  http://feeds.feedburner.com/example?format=xml; #не забудьте  поменять

}

error_page 404 = @wordpress;

    log_not_found off;

    location ^~ /files/ {

        rewrite /files/(.+) /wp-includes/ms-files.php?file=$1 last;

    }

#Включаем кэширование браузера пользователей вашего сайта

location ~* ^.+.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|js|zip|rar)$ {

root /var/www/user/data/www/example.com/; #не забудьте поменять

expires 99d; #Количество дней сколько буде хранится кэш

    }

location ~ \.php$ {

        include /etc/nginx/fastcgi_params;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        try_files $uri @wordpress;

        fastcgi_pass unix:/var/www/php-fpm/user.sock; #не забудьте поменять

        if ($do_not_cache != "1") {

            add_header Vary Cookie;

        }

    }

location @wordpress {

        include /etc/nginx/fastcgi_params;

        fastcgi_param SCRIPT_NAME /index.php;

        fastcgi_param SCRIPT_FILENAME $document_root/index.php;

        fastcgi_index index.php;

        fastcgi_pass unix:/var/www/php-fpm/user.sock; #не забудьте поменять

        if ($do_not_cache != "1") {

            add_header Vary Cookie;

        }

    }

# не кешируем админку и некоторые другие страницы

location ~ ^/(wp-admin/.*\.php|wp-login\.php|wp-register\.php|(feed|comment/feed)(/.*)?)$ {

        try_files $uri @wordpress;

        set $do_not_cache 1;

        fastcgi_cache_bypass 1;

        fastcgi_no_cache 1;

        fastcgi_pass unix:/var/www/php-fpm/user.sock; #не забудьте поменять

        fastcgi_index index.php;

        include /etc/nginx/fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    }

 

location ^~ /blogs.dir/ {

        internal;

        root /var/www/user/data/www/example.com/wp-content/; #не забудьте поменять

    }

location / {

try_files $uri $uri/ /index.php?$args;

location ~ [^/]\.ph(p\d*|tml)$ {

try_files /does_not_exists @php;

}

}

location @php {

fastcgi_index index.php;

fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";

fastcgi_pass unix:/var/www/php-fpm/user.sock; #не забудьте поменять

fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;

try_files $uri =404;

include fastcgi_params;

}

}

codeseller.ru

Nginx Helper | WordPress.org

  1. Удаляет index.php из ЧПУ WordPress при использовании nginx.
  2. Поддерживает очистку redis-cache при использовании как страничного кеша с использованием nginx-srcache-module
  3. Поддерживает nginx fastcgi_cache_purge & proxy_cache_purge директиву из модуля. Предоставляет пользовательские настройки очистки кеша
  4. Поддерживает директиву nginx map{..} для сети WordPress-multisite. С ее использованием nginx будет поддерживать загрузку файлов даже если PHP/MySQL не работает. Посмотрите обучающие ссылки ниже чтобы отконфигурировать nginx.
Tutorials

You will need to follow one or more tutorials below to get desired functionality:

Automatic Installation

  1. Log in to your WordPress admin panel, navigate to the Plugins menu and click Add New.
  2. In the search field type “Nginx Helper” and click Search Plugins. From the search results, pick Nginx Helper and click Install Now. WordPress will ask you to confirm to complete the installation.

Manual Installation

  1. Extract the zip file.
  2. Upload them to /wp-content/plugins/ directory on your WordPress installation.
  3. Then activate the Plugin from Plugins page.

For proper configuration, check out our tutorial list in the Description tab.

Important — Please refer to https://easyengine.io/nginx-helper/faq for up-to-date FAQs.

Installation Instructions

Automatic Installation

  1. Log in to your WordPress admin panel, navigate to the Plugins menu and click Add New.
  2. In the search field type “Nginx Helper” and click Search Plugins. From the search results, pick Nginx Helper and click Install Now. WordPress will ask you to confirm to complete the installation.

Manual Installation

  1. Extract the zip file.
  2. Upload them to /wp-content/plugins/ directory on your WordPress installation.
  3. Then activate the Plugin from Plugins page.

For proper configuration, check out our tutorial list in the Description tab.

FAQ — Installation/Comptability

Q. Will this work out of the box?

No. You need to make some changes at the Nginx end. Please check our tutorial list.

FAQ — Nginx Fastcgi Cache Purge

Q. There’s a ‘purge all’ button? Does it purge the w

ru.wordpress.org

Nginx & WordPress в Ubuntu 10.04

Продолжаю эксперименты на своем VPS, переносить текущий блог пока не готов, но думаю, в скором времени все будет.

Сегодня решил провести эксперимент по работе Nginx в качестве основного веб-сервера, без использования Apache. Сначала запутался с настройками, долго разбирался, почему же у меня ничего не работает. В конце концов разобрался.

Основная проблема, с которой приходиться сталкиваться любому человеку, желающему завести WordPress на Nginx – это проблема связки самого веб-сервера с PHP.

Есть два варианта решения – использование модуля Spawn-fcgi из комплекта веб-сервера Lighttpd, либо использование php-fpm. Не знаю, почему, но я решил остановиться на втором варианте. Кстати, для Ubuntu 10.04 установить его очень просто. Достаточно лишь подключить репозиторий Brian’s php5-fpm. Для этого прописываем следующие адреса в файл /etc/apt/sources.list:

deb http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main deb-src http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main

И затем импортируем ключ данного репозитория:

$sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8D0DC64F

Пришлось прописывать репозиторий руками, так как команды add-apt-repository в серверной убунте обнаружено не было.

Теперь устанавливаем нужный нам пакет и обновляем php, сразу же установим кэширующий модуль для php. Использовать будем php5-xcache, так как по производительности он не на много уступает eaccelerator, а вот устанавливается намного проще:

#apt-get update #apt-get upgrade #apt-get install php5-fpm php5-xcache

Настройки php для данной реализации располагаются в файле /etc/php5/fpm/php.ini. Можно оставить все без изменения. По умолчанию выделяется 128 мегабайт оперативной памяти на каждый php-процесс. И запускается по умолчанию 10 процессов php.

Теперь нужно запустить php-fpm и приступать к организации связки nginx и php-fpm:

#/etc/init.d/php5-fpm start

В основных настройках Nginx ничего не изменяем, можно только указать другое число процессов. Обычно рекомендуют число nginx-процессов устанавливать по числу ядер в процессоре. У меня на VPS используется 4-ядерный Xeon, потому поставил 4 процесса в настройках Nginx.

Теперь переходим к настройке отдельного сайта, который будет использовать в своей работе PHP. Создаем файл

/etc/nginx/sites-available/domain.ru

Под domain.ru подразумевается домен, который будет использоваться сайтом. Данное имя файла используется только для того, чтобы в дальнейшем можно было быстрее найти настройки конкретного сайта, поэтому можете называть его как угодно, лишь бы вам было удобно. В приведенном примере сразу приводятся настройки для использования WordPress со включенным ЧПУ и плагина WP Super Cache. Переходим к  редактированию файла:

server { listen 80; server_name domain.ru; root /var/www/domain.ru/web/wordpress; index index.php; access_log /var/log/nginx/localhost.access.log; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } location @wordpress { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /var/www/domain.ru/web/wordpress/index.php; include fastcgi_params; fastcgi_param SCRIPT_NAME /index.php; } location ~ \.php$ { try_files $uri @wordpress; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } location / { # enable search for precompressed files ending in .gz # nginx needs to be complied using <80><93>-with-http_gzip_static_module # for this to work, comment out if using nginx from aptitude gzip_static on; try_files $uri $uri/ @wordpress; # if the requested file exists, return it immediately if (-f $request_filename) { break; } set $supercache_file ''; set $supercache_uri $request_uri; if ($request_method = POST) { set $supercache_uri ''; } # Using pretty permalinks, so bypass the cache for any query string if ($query_string) { set $supercache_uri ''; } if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) { set $supercache_uri ''; } # if we haven't bypassed the cache, specify our supercache file if ($supercache_uri ~ ^(.+)$) { set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html; } # only rewrite to the supercache file if it actually exists if (-f $document_root$supercache_file) { rewrite ^(.*)$ $supercache_file break; } # all other requests go to Wordpress if (!-e $request_filename) { rewrite . /index.php last; } } }

Подразумевается, что папка wordpress лежит в корне сайта. Если это не так, то нужно немного подкорректировать пути в настройках сайта. Переводим сайт в режим работы:

# ln -s /etc/nginx/sites-available/domain.ru /etc/nginx/sites-enabled/domain.ru

Теперь можно запускать Nginx:

# /etc/init.d/nginx start

И переходить к установке и настройке WordPress. Единственное но: я не проводил тестирование установки вордпреса с данными настройками Nginx. Фактически я сначала только включил поддержку Fastcgi, установил WordPress и только после этого уже прописал в конфиге часть, отвечающую за rewrite. Обратите на это внимание!

Для корректного использования ЧПУ в WordPress под Nginx, нужно дополнительно установить расширение WP под названием nginx Compatibility.

Что могу сказать? Памяти стало использоваться больше, под кэш и буферы остается меньше места, чем было при использовании связки nginx+apache+php, так как используется большое количество php и nginx процессов. Однако скорость работы возросла очень значительно! Работать одно удовольствие!

Теперь попытаюсь найти способы тестирования сайта на нагрузку, провести эти тесты и сравнить с обычным апачем.

Ждите результатов!

www.juev.org

wordpress | Шпаргалки админа

И так, раз выдались выходные, можно поработать для себя и для души, проблема с высокой нагрузкой на мой сервер висит давно надо мною.

Сегодня решил один из своих сайтов перевести со связки nginx — Apache2+mod_php5 на nginx+php5-fpm в надежде, что появятся свободные ресурсы, которые сервер сможет тратить на mysql.

Введя в гугл запрос «ubuntu nginx php-fpm» я начал понимать, что предложенные варианты мне не подходят, т.к. я хотел перевести всего один из пару десятков сайтов, а все остальные продолжали работать на apache2.

Второе условие, что сайт у меня на wordpress и он должен заработать с прежним функционалом.

Я уже ранее писал, что я перешёл на PHP5.3 и вот ещё боялся ставить php-fpm версий меньше чем 5.3 т.к. не знал, а всё ли заработает, но сильно не задумываясь я решил проверить есть ли php-fpm в репозиториях? ну и разумеет оказался, как раз в тех, откуда я ставил PHP 5.3

и так поехали

Он успешно устанавливается, связка nginx+apache2 у меня была настроена по вот этим статьямРаз — компилируем сам nginx и два связываем всё во едино (пропуская установку из пакета)

Теперь я хочу один из virtualhost’ов заменить.Делаю резервную копию старого конфига и начинаю собирать новый.Времени я потратил много.Основная беда была в том, что повсеместно используется mod_rewrite для Apache, и теперь надо заставить работать правила но уже на nginx. Снова гугл и снова по крупицам воссоздал конфиг, который работает для wordpressи так привожу конфиг/etc/nginx/sites-available/mysite

server { listen 80; server_name www.mysite.ru mysite.ru;

access_log /var/log/nginx/mysite/access1.log;error_log  /var/log/nginx/mysite/error1.log  error;

index index.php;root  /var/www/mysite;location / {try_files $uri $uri/ @wordpress;}

location @wordpress {fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME $document_root/index.php;include /etc/nginx/fastcgi_params;fastcgi_param SCRIPT_NAME /index.php;}

location ~ \.php$ {try_files $uri @wordpress;fastcgi_index index.php;fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include /etc/nginx/fastcgi_params;}

}

Сохраняем, проверяем nginx на ошибки синтаксиса.

Если скажет, что ошибок нет, идём дальше — запускаем php5-fpm

 /etc/init.d/php5-fpm start

Теперь можно перезапустить nginx и пробовать зайти на свой сайт.я столкнулся с ошибками, пол шаблона wordpress была свёрстана с вот такими тегами php_code ?>Когда должно быть Поправил нужные места, потом пошёл отредактировал новый php.ini который находится вот тут

Собственно вся история, легче или сложнее жить я пока не заметил надо наблюдать, смотреть на графики и т.п.итог wordpress заработал на php-fpm ^)

Ах чуть не забыл есть ещё плагин для wordpress, который дружит его с nginx_http://wordpress.org/extend/plugins/nginx-compatibility/я им воспользовался, но не знаю нужен он был или нет

www.odmin4eg.ru

Конфигурация nginx + php-fpm на ISPmanager для wordpress? — Toster.ru

В ISPmanager автоматом для сайтов на nginx+php-fpm создается конфиг site.ru.confserver { server_name site.ru www.site.ru; charset off; index index.php; disable_symlinks if_not_owner from=$root_path; include /etc/nginx/vhosts-includes/*.conf; include /etc/nginx/vhosts-resources/site.ru/*.conf; access_log /var/www/httpd-logs/site.ru.access.log; error_log /var/www/httpd-logs/site.ru.error.log notice; ssi on; return 301 https://$host:443$request_uri; set $root_path /var/www/siteru/data/www/site.ru; root $root_path; listen xx.xxx.xx.xx:80; gzip on; gzip_comp_level 5; gzip_disable "msie6"; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; location / { location ~ [^/]\.ph(p\d*|tml)$ { try_files /does_not_exists @php; } } location @php { fastcgi_index index.php; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]"; fastcgi_pass unix:/var/www/php-fpm/siteru.sock; fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$; try_files $uri =404; include fastcgi_params; } } server { server_name site.ru www.site.ru; ssl on; ssl_certificate "/var/www/httpd-cert/siteru/site.ru_le1.crtca"; ssl_certificate_key "/var/www/httpd-cert/siteru/site.ru_le1.key"; ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_dhparam /etc/ssl/certs/dhparam4096.pem; charset off; index index.php; disable_symlinks if_not_owner from=$root_path; include /etc/nginx/vhosts-includes/*.conf; include /etc/nginx/vhosts-resources/site.ru/*.conf; access_log /var/www/httpd-logs/site.ru.access.log; error_log /var/www/httpd-logs/site.ru.error.log notice; ssi on; set $root_path /var/www/siteru/data/www/site.ru; root $root_path; listen listen xx.xxx.xx.xx:443; gzip on; gzip_comp_level 5; gzip_disable "msie6"; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; location / { location ~ [^/]\.ph(p\d*|tml)$ { try_files /does_not_exists @php; } } location @php { fastcgi_index index.php; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]"; fastcgi_pass unix:/var/www/php-fpm/siteru.sock; fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$; try_files $uri =404; include fastcgi_params; } }

Поскольку у меня сайт на wordpess, то в папку /etc/nginx/vhosts-resources/site.ru/ я закидываю конфигурационный файл wordpress.conf

server { ## Your website name goes here. server_name site.ru www.site.ru; ## Your only path reference. root /var/www/siteru/data/www/site.ru; ## This should be in your http block and if it is, it's not needed here. index index.php; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location / { try_files $uri $uri/ /index.php?$args; } location = /xmlrpc.php { deny all; access_log off; log_not_found off; } # Запрещаем доступ к скрытым файлам location ~ /\. { deny all; } # Запрещаем доступ к файлам .php в директории uploads location ~* /(?:uploads|files)/.*\.php$ { deny all; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } # Запрещаем доступ к админке location ~ ^/(wp-admin|wp-login.php) { allow xxx.xxx.xx.xxx; deny all; } location = /wp-login.php { try_files /does_not_exists @deny; } # Запрещаем доступ к файлам .php в директории uploads location ~* /(?:uploads|files)/.*\.php$ { deny all; } }

На сайте используется w3 total cache, поэтому в папку /etc/nginx/vhosts-resources/site.ru/ добавил еще один конфиг для кэша w3total.conf

#W3 TOTAL CACHE CHECK set $cache_uri $request_uri; # POST requests and urls with a query string should always go to PHP if ($request_method = POST) { set $cache_uri 'null cache'; } if ($query_string != "") { set $cache_uri 'null cache'; } # Don't cache uris containing the following segments if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $cache_uri 'null cache'; } # Don't use the cache for logged in users or recent commenters if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { set $cache_uri 'null cache'; } #ADD mobile rules from WP SUPER CACHE section above #APPEND A CODE BLOCK FROM BELOW... # Use cached or actual file if they exists, otherwise pass request to WordPress location / { try_files /wp-content/w3tc/pgcache/$cache_uri/_index.html $uri $uri/ /index.php?$args ; }

В итоге после рестарта Nginx не запускается. Подскажите, пожалуйста, мучаюсь уже несколько дней - где я допустил ошибку?

toster.ru


Смотрите также

Prostoy-Site | Все права защищены © 2018 | Карта сайта