Skip to content

Instantly share code, notes, and snippets.

@chrisblackwell
Created April 22, 2015 12:02
Show Gist options
  • Select an option

  • Save chrisblackwell/323f7c70e0ced6987b49 to your computer and use it in GitHub Desktop.

Select an option

Save chrisblackwell/323f7c70e0ced6987b49 to your computer and use it in GitHub Desktop.

Revisions

  1. chrisblackwell created this gist Apr 22, 2015.
    70 changes: 70 additions & 0 deletions wordpress-nginx.conf
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,70 @@
    server {
    listen 80 default_server;
    server_name domain.tld;

    access_log /srv/www/domain.tld/logs/access.log;
    error_log /srv/www/domain.tld/logs/error.log;
    root /srv/www/domain.tld/public;
    index index.php index.html index.htm;

    client_max_body_size 20M;
    # Global restrictions configuration file.
    # Designed to be included in any server {} block.</p>
    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    large_client_header_buffers 4 32k;

    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }

    # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
    location ~ /\. {
    deny all;
    }

    # Deny access to any files with a .php extension in the uploads directory
    # Works in sub-directory installs and also in multisite network
    # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
    location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
    }

    # WordPress single blog rules.
    # Designed to be included in any server {} block.

    # This order might seem weird - this is attempted to match last if rules below fail.
    # http://wiki.nginx.org/HttpCoreModule
    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    # 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 ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off; log_not_found off; expires max;
    }

    location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    #fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param APP_ENV production;
    }
    }