jentanbernardus
3/31/2016 - 2:48 AM

My WordPress Nginx setup

My WordPress Nginx setup

upstream phpfpm {
	server unix:/var/run/php5-fpm.sock;
}

upstream hhvm {
	server unix:/var/run/hhvm/hhvm.sock;
}

# SSL
ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers               ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
ssl_buffer_size           8k;
spdy_headers_comp         6;

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache_fpm:30m max_size=1000m;
server {
	listen 80;
	<% if @use_ssl %>
	listen 443 ssl spdy;
	ssl_certificate ssl/<%= @domain %>/server.crt;
	ssl_certificate_key ssl/<%= @domain %>/server.key;
	<% end %>
	server_name <%= @domain %><% if @also_www %> www.<%= @domain %><% end %>;
	access_log  /var/log/nginx/access.log main;

	root /srv/www/<%= @path %>;
	index index.html index.htm index.php;

	include sites-available/custom/<%= @domain %>;

	location ~ \.(jpe?g|gif|png|css|bmp|js|ico)$ {
		expires 30d;
	}

	location / {
		try_files $uri $uri/ /index.php$is_args$args;
	}

	# redirect server error pages to the static page /50x.html
	#
	error_page   500 502 503 504  /50x.html;
	location = /50x.html {
		root /var/www/nginx-default;
	}

	location ~ /\.ht[a-z]+$ {
		deny all;
	}

	location ~ \.php$ {
		# Set some proxy cache stuff
		fastcgi_cache microcache_fpm;
		fastcgi_cache_key $scheme$host$request_method$request_uri;
		fastcgi_cache_valid 200 5s;
		fastcgi_cache_use_stale updating;
		fastcgi_max_temp_file_size 1M;
		fastcgi_cache_min_uses 3; # Hit a URL 3 times before caching it

		set $no_cache_set  0;
		set $no_cache_get  0;

		set $temp_caching_exemption 0;
		if ($request_method !~ ^(GET|HEAD)$) {
			set $temp_caching_exemption 1;
		}

		if ( $temp_caching_exemption = 1 ) {
			add_header Set-Cookie "_mcnc=1; Max-Age=10; Path=/";
		}

		# Bypass cache if no-cache cookie is set
		if ( $http_cookie ~* "_mcnc" ) {
			set $no_cache_set 1;
			set $no_cache_get 1;
		}

		if ( $http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
			set $no_cache_set 1;
			set $no_cache_get 1;
		}

		# fastcgi_no_cache means "Do not store this proxy response in the cache"
		fastcgi_no_cache $no_cache_set;
		# fastcgi_cache_bypass means "Do not look in the cache for this request"
		fastcgi_cache_bypass $no_cache_get;


		include        /etc/nginx/fastcgi_params;
		fastcgi_index  index.php;
		try_files      $uri =404;

		<% if @hhvm %>
		fastcgi_keep_conn on;
		fastcgi_pass hhvm;
		<% else %>
		fastcgi_pass phpfpm;
		<% end %>
	}

}