Case 1: Normal WordPress setup in the root and multisite setup inside a directory in it.
For more clarity, https://domain.com => WordPress Single Site Setup
https://domain.com/demo => Demo is a folder (subdirectory) and has WordPress multisite setup.
For this case, below is the NGINX config file:
server { listen 443; server_name domain.com www.domain.com; root /var/www/html; index index.html index.htm index.php; ssl on; ssl_certificate /var/www/keys/namecheap/nginx_bundle_9ac0cec5ce44.crt; ssl_certificate_key /var/www/keys/domain.com.key; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } location ~ /\.ht { deny all; } if (!-e $request_filename) { rewrite /wp-admin$ $scheme://$host$uri/ permanent; rewrite ^/demo(/[^/]+)?(/wp-.*) /demo$2 last; rewrite ^/demo(/[^/]+)?(/.*\.php)$ /demo$2 last; } location /demo/ { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /demo/index.php?$args; } location ~ \.(hh|php)$ { try_files $uri /demo/index.php; fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 80; server_name domain.com; return 301 https://$host$request_uri; }
Case 2: Multisite WordPress setup in a subdomain co-hosted on the same server.
Let’s say the subdomain is subdom.yourdomain.com, for this the NGINX config file will look like this:
server { listen 443; server_name subdom.domain.com www.subdom.domain.com; root /var/www/subdom; index index.html index.htm index.php; ssl on; ssl_certificate /var/www/keys/subdom/namecheap/nginx_bundle_364dadc573b5.crt; ssl_certificate_key /var/www/keys/subdom/subdom.domain.com.key; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; include fastcgi_params; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } location ~ /\.ht { deny all; } if (!-e $request_filename) { rewrite /wp-admin$ $scheme://$host$uri/ permanent; rewrite ^(/[^/]+)?(/wp-.*) $2 last; rewrite ^(/[^/]+)?(/.*\.php)$ $2 last; } location ~ \.(hh|php)$ { try_files $uri /index.php; fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 80; server_name subdom.domain.com; return 301 https://$host$request_uri; }
Hope this helps.