Wordpress на стероиди с Nginx и php-fpm

r.stefanov

Well-Known Member
Тази конфигурация е изключително подходяща за сайтове с много трафик върху VPS-и с малко ресурси или стар хардуер. Дори екипа на Wordpress има статии за това как Nginx превъзхожда многократно Apache в доста отношения и как никой друг сървър не е успял да обслужи 15000 request-a (не бенчмарк). Разбира се първо взимайте в предвид какво и как искате да го постигнете преди да давате коментари. Почти всичко, което може Apache го може и Nginx. Сигурен съм, че съвсем скоро ще са рамо до рамо по отношение features. Да се надяваме, че все повече хора ще се престрашат да го пробват :)

За повече информация се консултирайте със съответната документация в /usr/share/doc*, http://nginx.org/en/docs и http://php.net/manual/en/install.fpm.php

Предимства? Освен производителността, спестявате си не малка част от главоболията с .htaccess и дупките свързани с платформата. Никога, повтарям НИКОГА не давайте права на сървъра да променя файлове или директории в Wordpress. Дори групата не е нужно да има друго освен read. Собственик на файловете е юзера. Permissions трябва да са 755 за директории и 644 за файловете (ако е възможно и по-ограничени). Аз лично ги свалям възможно най-много и след това вдигам ако нещо не работи.

Tip: отбягвайте IF - if is evil!

To do: APC и memcache

nginx.conf
Код:
user user group; # юзер-а и групата за nginx
worker_processes 1;

error_log /var/log/nginx/error_log info;

events {
	worker_connections 1024;
	use epoll;
}

http {

	limit_conn_zone $binary_remote_addr zone=phplimit:1m;
	
	#error_page 403 /път/до/файла.html; ако имате custom страници за грешките
	
	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	log_format main
		'$remote_addr - $remote_user [$time_local] '
		'"$request" $status $bytes_sent '
		'"$http_referer" "$http_user_agent" '
		'"$gzip_ratio"';

	client_header_timeout 10m;
	client_body_timeout 10m;
	send_timeout 10m;

	connection_pool_size 256;
	client_header_buffer_size 1k;
	large_client_header_buffers 4 2k;
	request_pool_size 4k;

	gzip on;
	gzip_min_length 1100;
	gzip_buffers 4 8k;
	gzip_types text/plain;

	output_buffers 1 32k;
	postpone_output 1460;

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;

	keepalive_timeout 20 10;

	ignore_invalid_headers on;

	server {
        server_name blabla.com www.blabla.com;
        root /var/www/blabla/p_html;
        index index.php;

        include /etc/nginx/sites/blabla.com.conf;

      
        }

}

server block за blabla.conf

Код:
	rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
	rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;

	access_log /var/log/nginx/blabla.access_log main;
        error_log /var/log/nginx/blabla.error_log info;

	
	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 ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }

	location ~ /\. { access_log off; log_not_found off; deny all; }

	location ~ ~$ { access_log off; log_not_found off; deny all; }

	location ~* wp-admin/includes { deny all; }
 	location ~* wp-includes/theme-compat/ { deny all; }
  	location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; }
  	location /wp-content/ { internal; }
  	location /wp-includes/ { internal; }

	location ~* ^/wp-content/uploads/.*.(html|htm|shtml|php)$ {
   		types { }
      		default_type text/plain;
        }

	 location /wp-content/uploads {
         deny all;

        }


	rewrite /wp-admin$ $scheme://$host$uri/ permanent;

	location /wp-admin {
	allow *.*.*.*;               #IP адрес за достъп до wp-admin/*
    	deny all; 
	
	}
 
	location ~* ^/wp-login.php$ {
    	allow 158.58.216.11;       #IP адрес за достъп до wp-login.php
	deny all;
	try_files $uri =404;
    	fastcgi_split_path_info ^(.+\.php)(/.+)$;
              include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass 127.0.0.1:9000;           #свободен порт, може да използвате и unix socket
        }


 location ~ \.php$ {
                include fastcgi.conf;
                fastcgi_intercept_errors on;
		limit_conn phplimit 5;
                fastcgi_pass 127.0.0.1:9000;           #свободен порт, може да използвате и unix socket
        }

pool в php-fpm.conf - с конфа на php-fpm все още не съм си играл много, тук експериментирайте с подходящи стойности за вашите нужди

Код:
[blabla]
listen = 127.0.0.1:9000 ;свободен порт

user = user            ;юзер-а който е собственик (owner) на файловете за Wordpress
group = users          ;група

pm = dynamic

pm.max_children = 5

pm.min_spare_servers = 2

pm.max_spare_servers = 2
 
Последно редактирано:

Горе