मेरा वर्डप्रेस प्रदर्शन और कैशिंग स्टैक
यह निम्न से मध्यम श्रेणी के एकल सर्वर या VPS के लिए सर्वश्रेष्ठ वर्डप्रेस प्रदर्शन स्टैक है। मैं लगभग 1G मेमोरी और काफी तेज ड्राइव के साथ मिड रेंज को सिंगल कोर के रूप में वर्गीकृत कर रहा हूं।
सर्वर स्टैक
- लिनक्स - या तो डेबियन लेन या उबंटू
- Nginx - रिवर्स प्रॉक्सी स्टेटिक फ़ाइल कैश के रूप में कॉन्फ़िगर किया गया
- Apache - Apache वैकल्पिक पोर्ट पर Nginx द्वारा लोड किए गए PHP को हैंडल करेगा
- MySql - WP द्वारा आवश्यक, सुनिश्चित करें कि आपका नवीनतम स्थिर संस्करण चल रहा है
- PHP - 5.2 या 5.3 शाखा का नवीनतम स्थिर संस्करण
PHP कैश
- APC - इसे कम से कम 128 M मिमी मेमोरी और shm आकार के साथ कॉन्फ़िगर करें
वर्डप्रेस प्रदर्शन प्लगइन स्टैक
- Nginx प्रॉक्सी कैश इंटीग्रेटर
- W3 कुल कैश - डिस्क को बढ़ाया, डिस्क, और वस्तु को छोटा और एपीसी को db के लिए पृष्ठ कैश सेट करें।
- Self Hosted CDN - 4 cname उपनाम बनाएँ जो सर्वर पर डोमेन को इंगित करता है बस स्थैतिक फ़ाइल की सेवा के लिए सेट करें
W3 कुल कैश के साथ हम पेज कैश के लिए डिस्क का उपयोग कर रहे हैं और मिनिमाइज़ करते हैं क्योंकि Nginx हमारी स्टैटिक फ़ाइलों को बहुत तेज़ी से सेवा देगा।
स्थिर फ़ाइलों की सेवा करने के लिए और अपाचे के लिए PHP पास करने के लिए Nginx को कैसे कॉन्फ़िगर करें
अकेले अपाचे का उपयोग करने में समस्या यह है कि यह एक कनेक्शन खोलता है और स्थिर फ़ाइलों के लिए भी हर अनुरोध पर php को हिट करता है। यह कनेक्शन बर्बाद करता है क्योंकि अपाचे उन्हें खुला रखेगा और जब आपके पास बहुत सारे ट्रैफ़िक होंगे तो आपके कनेक्शन का उपयोग नहीं किया जाएगा, भले ही उनका कनेक्शन काट दिया गया हो।
डिफ़ॉल्ट रूप से Apache पोर्ट 80 पर अनुरोधों के लिए सुनता है जो डिफ़ॉल्ट वेब पोर्ट है। सबसे पहले हम पोर्ट 8080 पर सुनने के लिए अपने Apache conf और वर्चुअल होस्ट फ़ाइलों में बदलाव करने जा रहे हैं।
अपाचे विन्यास
httpd.conf
KeepAlive को बंद करने के लिए सेट करें
ports.conf
NameVirtualHost *:8080
Listen 8080
प्रति साइट वर्चुअल होस्ट
<VirtualHost 127.0.0.1:8080>
ServerAdmin info@yoursite.com
ServerName yoursite.com
ServerAlias www.yoursite.com
DocumentRoot /srv/www/yoursite.com/public_html/
ErrorLog /srv/www/yoursite.com/logs/error.log
CustomLog /srv/www/yoursite.com/logs/access.log combined
</VirtualHost>
आपको mod_rpaf भी स्थापित करना चाहिए ताकि आपके लॉग में आपके विज़िटर के असली आईपी पते शामिल हों। यदि आपके लॉग नहीं हैं तो मूल पते के रूप में 127.0.0.1 होगा।
Nginx विन्यास
डेबियन पर आप रिपॉजिटरी का उपयोग कर सकते हैं स्थापित करने के लिए, लेकिन वे केवल संस्करण 0.6.33 होते हैं। बाद के संस्करण को स्थापित करने के लिए आपको लेनी बैकपोर्ट पैकेज को जोड़ना होगा
$ nano /etc/apt/sources.list
इस लाइन को फाइल में जोड़ें deb http://www.backports.org/debian lenny-backports main
$ nano /etc/apt/preferences
फ़ाइल में निम्न जोड़ें:
Package: nginx
Pin: release a=lenny-backports
Pin-Priority: 999
पैकेज सत्यापित करने और अपने सिस्टम के पैकेज डेटाबेस को अपडेट करने के लिए backports.org से कुंजी आयात करने के लिए निम्न आदेश जारी करें:
$ wget -O - http://backports.org/debian/archive.key | apt-key add -
$ apt-get update
अब apt-get के साथ इंस्टॉल करें
apt-get install nginx
यह स्रोत से संकलन की तुलना में बहुत आसान है।
Nginx conf और सर्वर फाइलें कॉन्फिगर करती हैं
nginx.conf
user www-data;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
client_body_temp_path /var/lib/nginx/body 1 2;
gzip_buffers 32 8k;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_comp_level 6;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types text/html text/css image/x-icon
application/x-javascript application/javascript text/javascript application/atom+xml application/xml ;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
अब आपको अपना Nginx वर्चुअल होस्टिंग सेट अप करना होगा। मैं साइटों में उपलब्ध निर्देशिका में एक फ़ाइल से जुड़े प्रत्येक होस्ट की सहानुभूति के साथ साइटों-सक्षम पद्धति का उपयोग करना पसंद करता हूं।
$ mkdir /etc/nginx/sites-available
$ mkdir /etc/nginx/sites-enabled
$ touch /etc/nginx/sites-available/yourservername.conf
$ touch /etc/nginx/sites-available/default.conf
$ ln -s /etc/nginx/sites-available /etc/nginx/sites-enabled
$ nano /etc/nginx/sites-enabled/default.conf
default.conf
ध्यान दें:
निम्न फ़ाइलों में स्थिर कैश सेटिंग्स केवल तभी काम करेंगी जब Nginx प्रॉक्सी कैश इंटीग्रेटर प्लगइन सक्षम हो।
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=staticfilecache:180m max_size=500m;
proxy_temp_path /var/lib/nginx/proxy;
proxy_connect_timeout 30;
proxy_read_timeout 120;
proxy_send_timeout 120;
#IMPORTANT - this sets the basic cache key that's used in the static file cache.
proxy_cache_key "$scheme://$host$request_uri";
upstream wordpressapache {
#The upstream apache server. You can have many of these and weight them accordingly,
#allowing nginx to function as a caching load balancer
server 127.0.0.1:8080 weight=1 fail_timeout=120s;
}
वर्डप्रेस साइट कॉन्फिडेंस (मल्टी साइट के लिए आपको केवल एक vhost की आवश्यकता होगी)
server {
#Only cache 200 responses, and for a default of 20 minutes.
proxy_cache_valid 200 20m;
#Listen to your public IP
listen 80;
#Probably not needed, as the proxy will pass back the host in "proxy_set_header"
server_name www.yoursite.com yoursite.com;
access_log /var/log/nginx/yoursite.proxied.log;
# "combined" matches apache's concept of "combined". Neat.
access_log /var/log/apache2/nginx-access.log combined;
# Set the real IP.
proxy_set_header X-Real-IP $remote_addr;
# Set the hostname
proxy_set_header Host $host;
#Set the forwarded-for header.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
# If logged in, don't cache.
if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
set $do_not_cache 1;
}
proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
proxy_cache staticfilecache;
proxy_pass http://wordpressapache;
}
location ~* wp\-.*\.php|wp\-admin {
# Don't static file cache admin-looking things.
proxy_pass http://wordpressapache;
}
location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
# Cache static-looking files for 120 minutes, setting a 10 day expiry time in the HTTP header,
# whether logged in or not (may be too heavy-handed).
proxy_cache_valid 200 120m;
expires 864000;
proxy_pass http://wordpressapache;
proxy_cache staticfilecache;
}
location ~* \/[^\/]+\/(feed|\.xml)\/? {
# Cache RSS looking feeds for 45 minutes unless logged in.
if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
set $do_not_cache 1;
}
proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
proxy_cache_valid 200 45m;
proxy_cache staticfilecache;
proxy_pass http://wordpressapache;
}
location = /50x.html {
root /var/www/nginx-default;
}
# No access to .htaccess files.
location ~ /\.ht {
deny all;
}
}
सेल्फ होस्टेड सीडीएन कॉन्फिडेंस
अपने स्वयं के होस्ट किए गए सीडीएन के लिए, आपको केवल प्रॉक्सी पास के बिना स्थिर फ़ाइलों की सेवा के लिए इसे सेट करने की आवश्यकता है
server {
proxy_cache_valid 200 20m;
listen 80;
server_name yourcdndomain.com;
access_log /srv/www/yourcdndomain.com/logs/access.log;
root /srv/www/yourcdndomain.com/public_html/;
proxy_set_header X-Real-IP $remote_addr;
location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
# Cache static-looking files for 120 minutes, setting a 10 day expiry time in the HTTP header,
# whether logged in or not (may be too heavy-handed).
proxy_cache_valid 200 120m;
expires 7776000;
proxy_cache staticfilecache;
}
location = /50x.html {
root /var/www/nginx-default;
}
# No access to .htaccess files.
location ~ /\.ht {
deny all;
}
}
अब सर्वर शुरू करें
$ /etc/init.d/apache2 restart
$/etc/init.d/nginx start
बेंचमार्क परिणाम
अपाचे बेंच पर यह सेटअप सैद्धांतिक रूप से प्रति सेकंड 1833.56 अनुरोधों को पूरा कर सकता है
$ ab -n 1000 -c 20 http://yoursite.com/