मेरा वर्डप्रेस प्रदर्शन और कैशिंग स्टैक
यह निम्न से मध्यम श्रेणी के एकल सर्वर या वीपीएस के लिए एक शानदार वर्डप्रेस प्रदर्शन स्टैक है। मैं लगभग 1G मेमोरी और काफी तेज ड्राइव के साथ मिड रेंज को सिंगल कोर के रूप में वर्गीकृत कर रहा हूं।
आपके बॉक्स पर यह प्रति घंटे 10K पृष्ठ दृश्यों में सेवारत करने में सक्षम होगा
सर्वर स्टैक
- लिनक्स - या तो डेबियन लेन या उबंटू
- Nginx - रिवर्स प्रॉक्सी स्टेटिक फ़ाइल कैश के रूप में कॉन्फ़िगर किया गया
- Apache - Apache वैकल्पिक पोर्ट पर Nginx द्वारा लोड किए गए PHP को हैंडल करेगा
- MySql - WP द्वारा आवश्यक, सुनिश्चित करें कि आपका नवीनतम स्थिर संस्करण चल रहा है
- PHP - 5.2 या 5.3 शाखा का नवीनतम स्थिर संस्करण
PHP कैश
- APC - इसे कम से कम 128 M के mmap मेमोरी और shm आकार के साथ कॉन्फ़िगर करें
वर्डप्रेस प्रदर्शन प्लगइन स्टैक
- Nginx प्रॉक्सी कैश इंटीग्रेटर
- W3 कुल कैश - डिस्क में एन्हांस की गई, डिस्क को छोटा करें और APC को db और एपीसी को पेज कैश सेट करें।
- सेल्फ होस्टेड 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/