Nginx: конфигурация для WordPress с PHP-FPM
Официальная конфигурация Nginx для WordPress с PHP-FPM, поддержкой pretty permalinks, кеширования и безопасности. Основано на документации WordPress.org.
Конфигурация Nginx для WordPress с PHP-FPM. Основано на официальной документации WordPress.org Advanced Administration Handbook.
Базовая конфигурация (одиночный сайт)
server {
listen 80;
server_name example.com www.example.com;
root /var/www/wordpress;
index index.php index.html;
access_log /var/log/nginx/wordpress-access.log;
error_log /var/log/nginx/wordpress-error.log;
# Favicon и robots.txt
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Защита скрытых файлов
location ~ /\. {
deny all;
}
# Защита PHP в директории uploads
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
# Основной location с поддержкой pretty permalinks
location / {
# Включаем ?$args для поддержки query string в permalinks
try_files $uri $uri/ /index.php?$args;
}
# Обработка PHP
location ~ \.php$ {
# ВАЖНО: должно быть cgi.fix_pathinfo = 0 в php.ini
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_intercept_errors on;
}
# Кеширование статических файлов
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires max;
log_not_found off;
}
}
С поддержкой HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /var/www/wordpress;
index index.php index.html;
# SSL сертификаты
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
access_log /var/log/nginx/wordpress-access.log;
error_log /var/log/nginx/wordpress-error.log;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\. {
deny all;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_intercept_errors on;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires max;
log_not_found off;
}
}
Важные замечания
⚠️ Pretty Permalinks: Директива try_files $uri $uri/ /index.php?$args; критически важна для работы pretty permalinks в WordPress. Без ?$args query string будет потерян.
⚠️ php.ini: В php.ini должно быть установлено cgi.fix_pathinfo = 0; для безопасности. Это стандартная настройка в современных версиях PHP.
⚠️ Защита uploads: WordPress позволяет загружать файлы в директорию uploads. Важно запретить выполнение PHP в этой директории для предотвращения атак.
⚠️ Нет .htaccess: Nginx не поддерживает .htaccess файлы. Вся конфигурация должна быть на уровне сервера.
Источники: