Preparing for Large-scale Wordpress MU Usage
W-Mark Kubacki
wmark+nginx at hurrikane.de
Thu May 24 21:14:18 UTC 2012
Hi "CheezItMan",
500 users are not much, except you're running everything from a tiny
ARM-powered machine. Come to think of it, even that will suffice. ;-)
Make sure to install a static-site generator for Wordpress, "WP Super
Cache Plus" for example (perhaps your "ms-file" cache already does
that; didn't look into it). Then it will be Nginx serving static files
most of the time. Gzip_static module for Nginx helps, too, provided
your caching-plugin generates *.gz files along with the uncompressed
ones.
A mediocre MySQL installation can bear some thousands inserts per
second. So you will most probably run out of available PHP workers.
Configure a reasonable high number of "spare server" in PHP FPM and
observe the load and memory usage, tune, observe and so forth.
--
Mark
2012/5/24 CheezItMan <nginx-forum at nginx.us>:
> I'm preparing to deploy a new Nginx server hosting Wordpress MU to our
> school. Each wordpress site will serve as a student ePortfolio. I'm
> concerned about when all 500 students hit the site and start editing at
> the same time. The particulars of my setup are below. What can I
> expect/do to prepare for the mass hit of users on my site?
>
> I am running Wordpress Quick Cache, & apc (for php caching).
>
>
> The Server:
>
> OS: Ubuntu Linux 12.04 LTS
> Web server: Nginx (naturally)
> PHP: php5-fpm
> RAM 16 GB
> CPUs: 2 CPUs with 4 cores each (total of 8 cores).
>
> My nginx.conf file:
>
> ---
>
> user www-data;
> worker_processes 8;
> pid /var/run/nginx.pid;
>
> events {
> worker_connections 2048;
> # multi_accept on;
> }
>
> http {
> sendfile on;
> tcp_nopush on;
> tcp_nodelay on;
> server_tokens off;
> include mime.types;
> default_type application/octet-stream;
> index index.php index.htm index.html redirect.php;
>
> client_max_body_size 512M;
>
> #Gzip
> gzip on;
> gzip_vary on;
> gzip_proxied any;
> gzip_comp_level 6;
> gzip_buffers 64 32k;
> gzip_http_version 1.1;
> gzip_disable "MSIE [1-6].(?!.*SV1)";
> gzip_types text/plain text/css application/json
> application/x-javascript text/xml
> application/xml application/xml+rss
> text/javascript;
>
> #FastCGI
> fastcgi_intercept_errors on;
> fastcgi_ignore_client_abort on;
> fastcgi_buffers 32 64k;
> fastcgi_buffer_size 256k;
> fastcgi_read_timeout 500;
> fastcgi_index index.php;
>
> limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
>
> ##
> # Virtual Host Configs
> ##
>
> include /etc/nginx/conf.d/*.conf;
> include /etc/nginx/sites-enabled/*; #Our individual site vhost
> server files will live here
> }
>
> ---
>
> My site file:
>
> ---
> server {
> listen 80;
>
> server_name students.scisdragons.net;
> root /var/www/students.scisdragons.net;
> access_log /var/log/nginx/students.scisdragons.net.access.log;
> error_log /var/log/nginx/students.scisdragons.net.error.log;
>
> include global/wordpress-ms-subdir.conf;
>
>
>
> location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
> expires 1y;
> log_not_found off;
> }
>
> }
>
> ---
>
> And my Wordpress Config file
>
> ---
> location / {
> try_files $uri $uri/ /index.php?$args;
> }
>
>
> location /phpmyadmin {
> root /usr/share/;
> index index.php index.html index.htm;
> location ~ ^/phpmyadmin/(.+\.php)$ {
> # Zero-day exploit defense.
> #
> http://forum.nginx.org/read.php?2,88845,page=3
> # Won't work properly (404 error) if the file is
> not stored on this server, which is entirely possible with
> php-fpm/php-fcgi.
> # Comment the 'try_files' line out if you set up
> php-fpm/php-fcgi on another machine. And then cross your fingers that
> you won't get hacked.
> try_files $uri =404;
>
> fastcgi_split_path_info ^(.+\.php)(/.+)$;
> include fastcgi_params;
> fastcgi_index index.php;
> fastcgi_param SCRIPT_FILENAME
> $document_root$fastcgi_script_name;
> # fastcgi_intercept_errors on;
> fastcgi_pass 127.0.0.1:9000;
> }
> location ~*
> ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
> root /usr/share/;
> }
> }
> location /phpMyAdmin {
> rewrite ^/* /phpmyadmin last;
> }
>
>
> # Add trailing slash to */wp-admin requests.
> rewrite /wp-admin$ $scheme://$host$uri/ permanent;
>
> # Directives to send expires headers and turn off 404 error logging.
> location ~* \.(js|css|png|jpg|jpeg|gif|ico|mov|mp4|avi|doc|docx|pdf)$ {
> expires 48h;
> log_not_found off;
> }
>
> # Pass uploaded files to wp-includes/ms-files.php.
> rewrite /files/$ /index.php last;
>
> # For multisite: Use a caching plugin/script that creates symlinks to
> the correct subdirectory structure to get some performance gains.
> set $cachetest
> "$document_root/wp-content/cache/ms-filemap/${host}${uri}";
> if ($uri ~ /$) {
> set $cachetest "";
> }
> if (-f $cachetest) {
> # Rewrites the URI and stops rewrite processing so it doesn't
> start over and attempt to pass it to the next rule.
> rewrite ^ /wp-content/cache/ms-filemap/${host}${uri} break;
> }
>
> if ($uri !~ wp-content/plugins) {
> rewrite /files/(.+)$ /wp-includes/ms-files.php?file=$1 last;
> }
>
> # Uncomment one of the lines below for the appropriate caching plugin
> (if used).
> # include global/wordpress-ms-subdir-wp-super-cache.conf;
> # include global/wordpress-ms-subdir-w3-total-cache.conf;
>
> # Rewrite multisite '.../wp-.*' and '.../*.php'.
> if (!-e $request_filename) {
> rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
> rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
> }
>
> # Pass all .php files onto a php-fpm/php-fcgi server.
> location ~ \.php$ {
> # Zero-day exploit defense.
> # http://forum.nginx.org/read.php?2,88845,page=3
> # Won't work properly (404 error) if the file is not stored on
> this server, which is entirely possible with php-fpm/php-fcgi.
> # Comment the 'try_files' line out if you set up
> php-fpm/php-fcgi on another machine. And then cross your fingers that
> you won't get hacked.
> try_files $uri =404;
>
> fastcgi_split_path_info ^(.+\.php)(/.+)$;
> include fastcgi_params;
> fastcgi_index index.php;
> fastcgi_param SCRIPT_FILENAME
> $document_root$fastcgi_script_name;
> # fastcgi_intercept_errors on;
> fastcgi_pass 127.0.0.1:9000;
> }
>
> ---
>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?2,226786,226786#msg-226786
>
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx
More information about the nginx
mailing list