Настройка nginx и PHP для работы WordPress

Краткая инструкция по настройки конфигурации виртуального хоста nginx для работы CMS WordPress с использованием постоянных ссылок, а также некоторые настройки PHP для корректной работы WordPress.

Всё дело в том, что nginx, в отличие от Apache, не понимает файл .htaccess, и поэтому для работы WordPress необходимо внести некоторые изменения в настройки виртуальных хостов.

Данная инструкция была опробована на ОС Gentoo GNU/Linux, но подойдёт для любых операционных систем Linux и FreeBSD.

Перед тем, как выполнить все действия, которые описаны ниже, необходимо установить и настроить стек LEMP. Выберите ОС, в которой он будет (или уже) развёрнут и перейдите по ссылке:

Затем открываем файл php.ini и при необходимости исправляем в нём следующие параметры:

max_execution_time — параметр максимального времени выполнения скрипта (по умолчанию 30 секунд) — если у вас сервер достаточной мощности, можно оставить по умолчанию, если нет — увеличиваем время до 60 или даже до 120 секунд

max_execution_time = 60

memory_limit — ограничение оперативной памяти для выполнения скрипта (по умолчанию 128 MB) — если скрипты тяжёлые — лучше увеличить, например 256 или 512 MB

memory_limit = 256M

upload_max_filesize — максимальный размер файла, который может быть загружен с использованием PHP (по умолчанию 2 MB) — при использовании WordPress выставить значение хотя-бы 20 MB

upload_max_filesize = 20M

По окончании необходимо будет перезапустить службу php-fpm.

Теперь открываем файл конфигурации виртуального хоста nginx и дописываем и/или изменяем следующие параметры:

после строчки

root /var/www/yoursite.com/htdocs;

допишем

index index.php;

перед строчкой

location ~ .php$

вставим

location / {
	try_files $uri $uri/ /index.php$args;
}

после строчки

location ~ \.php$ {
	...
}

допишем

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
	expires max;
	log_not_found off;
}

также и для SSL.

На выходе конфигурация виртуального хоста должна выглядеть примерно так:

server {
	listen 192.168.1.45;
	server_name yoursite.com;

	access_log /var/log/nginx/yoursite.com.access_log main;
	error_log /var/log/nginx/yoursite.com.error_log info;

	root /var/www/yoursite.com/htdocs;
	index index.php;

	location / {
		try_files $uri $uri/ /index.php$args;
	}

	location ~ \.php$ {
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_index index.php;
		include fastcgi_params;
		# для Gentoo
		fastcgi_pass unix:/run/php-fpm.socket;
		# для Debian, CentOS, Ubuntu Server и FreeBSD путь к fastcgi_pass будет другим, пройдите по указанным выше ссылкам 
		fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}

	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
		expires max;
		log_not_found off;
	}

}

# SSL site
server {
	listen 192.168.1.45:443;
	server_name yoursite.com;

	ssl on;
	# проверьте пути к сертификатам, как они расположены у вас
	ssl_certificate /etc/ssl/nginx/nginx.pem;
	ssl_certificate_key /etc/ssl/nginx/nginx.key;

	access_log /var/log/nginx/yoursite.com.ssl_access_log main;
	error_log /var/log/nginx/yoursite.com.ssl_error_log info;

	root /var/www/yoursite.com/htdocs;
	index index.php;

	location / {
		try_files $uri $uri/ /index.php$args;
	}

	location ~ \.php$ {
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_index index.php;
		include fastcgi_params;
		# для Gentoo
		fastcgi_pass unix:/run/php-fpm.socket;
		# для Debian, CentOS, Ubuntu Server и FreeBSD путь к fastcgi_pass будет другим, пройдите по указанным выше ссылкам 
		fastcgi_param  PATH_INFO  $fastcgi_path_info;
		fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}

	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
		expires max;
		log_not_found off;
	}
}

Готово! Теперь WordPress должен работать без проблем.

Если не получилось — пишите в комментариях, разберёмся.

Один комментарий к “Настройка nginx и PHP для работы WordPress”

  1. А как настроить некоторые опции, если на хостинге уже настроена связка nginx+apache? Нужно сделать что-то типа такого:

    Allow from all

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} ^.*(mp3|m4a|jpeg|jpg|gif|png|bmp|pdf|doc|docx|ppt|pptx)$
    RewriteCond %{REQUEST_FILENAME} !^.*(cropped-cropped-happy_logo-1-1.png)$
    RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
    RewriteRule . — [R=403,L]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *