Report this

What is the reason for this report?

Anyone got WordPress Multisite using subdirectories working on NginX - with each site serving to https only?

Posted on February 12, 2018

I’ve run up my old Ubuntu 12.04 WordPress Network site using Apache to a brand new 16.04 Nginx instance. The main site is working fine, but I can’t get it to serve any of the subdirectory site contents in my network. I’ve installed the NginX Helper plugin, have Lets Encrypt Certs in place for the main site and the first of 7 subsites, but all I get is permission errors or the NginX welcome to your new website page.

Any ideas what i’m doing wrong?

Sites-available file as below.

Ian W.

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

#map $http_host $blogid {
#    default 0;
#    include /var/www/html/wp-content/uploads/nginx-helper/map.conf;
#}

map $uri $blogname{
    ~^(?P<blogpath>/[^/]+/)files/(.*)       $blogpath ;
}

map $blogname $blogid{
    default -999;
    include /var/www/html/wp-content/uploads/nginx-helper/map.conf;
}
 
#
# Default server configuration
#

server {
    listen 80;
    listen 443 ssl http2;

    server_name software-enabled.com www.software-enabled.com 139.59.187.99;

    if ( $scheme = "http") {
        return 301 https://$server_name$request_uri;
    }

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    # ESSENTIAL : no favicon logs
    location = /favicon.ico { log_not_found off; access_log off; }
    
    # ESSENTIAL : robots.txt
    location = /robots.txt { log_not_found off; access_log off; allow all; }

    # ESSENTIAL : Configure 404 Pages
    error_page 404 /404.html;

    # ESSENTIAL : Configure 50x Pages
    error_page 500 502 503 504 /50x.html;
	location = /50x.html {
		root /usr/share/nginx/html;
	}

    # PERFORMANCE : Set expires headers for static files and turn off logging.
    location ~* ^.+\.(js|css|swf|xml|txt|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|r
ss|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 30d;
    }

    # SECURITY : Deny all attempts to access PHP Files in the uploads directory
    location ~* /(?:uploads|files)/.*\.php$ {
        deny all;
    }

    #
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
	include snippets/fastcgi-php.conf;
	fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	}

    # Nginx Rewrite rules attempt by Ian W

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

    location ~ ^/files/(.*)$ {
        try_files /wp-content/blogs.dir/$blogid/$uri /wp-includes/ms-files.php?f
ile=$1 ;
         access_log off; log_not_found off; expires max;
        }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
	 expires 24h;
	 log_not_found off;
        }

    location ^~ /blogs.dir {
	 internal;
	 alias /var/www/html/wp-content/blogs.dir ;
	 access_log off; log_not_found off;      expires max;
        }

    if (!-e $request_filename) {
	 rewrite /wp-admin$ $scheme://$host$uri/ permanent;
	 rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
	 rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
        }
	
    # End of Rewrite Code!

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
		deny all;
    }

    access_log  /var/log/nginx/$host-access.log;
    error_log   /var/log/nginx/wpms-error.log;

    ssl_certificate /etc/letsencrypt/live/software-enabled.com/fullchain.pem; # 
managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/software-enabled.com/privkey.pem; 
# managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

#
# Virtual Host configuration for ianwaring.com/www.ianwaring.com
#
server {
    listen 80;
    listen 443 ssl http2;

    server_name ianwaring.com www.ianwaring.com;

    if ( $scheme = "http") {
        return 301 https://$server_name$request_uri;
    }

#    root /ianwaring/;
#    index index.php;

    location ~ ^(/[^/]+/)?files/(?<rt_file>.+) {
	try_files /wp-content/blogs.dir/$blogid/files/$rt_file /wp-includes/ms-f
iles.php?file=$rt_file ;
	access_log off;	log_not_found off; expires max;
    }

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

#    location ~ ^/files/(.*)$ {
#      try_files /wp-content/blogs.dir/$blogid/$uri /wp-includes/ms-files.php?fi
le=$1 ;
#      access_log off; log_not_found off; expires max;
#    }

#    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
#	expires 24h;
#	log_not_found off;
#    }

#   location ^~ /blogs.dir {
#	internal;
#	alias /var/www/html/wp-content/blogs.dir ;
#	access_log off; log_not_found off;      expires max;
#    }

    if (!-e $request_filename) {
	rewrite /wp-admin$ $scheme://$host$uri/ permanent;
	rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
	rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
    }

    access_log  /var/log/nginx/$host-access.log;
    error_log   /var/log/nginx/wpms-error.log;

    ssl_certificate /etc/letsencrypt/live/ianwaring.com/fullchain.pem; # managed
 by Certbot
    ssl_certificate_key /etc/letsencrypt/live/ianwaring.com/privkey.pem; # manag
ed by Certbot

}

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Start building today

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.