Best Hosting set up using Gridpane

I am just getting into the world of Main wp, I have over 50 sites all in the gridpane ecocenter.

I was using WPMU DEV dashboard as my go to management of my websites,

After looking at main WP and dipping my toe in I can see how this system whould beat my old system hands down.

I have started to migrate all my sites and now as I have got up to over 35 sites installed the server is starting to really buckle under the pressure. when I go to the sites tab I see a spinning wheel for over 20 seconds and sometimes get a Page unresponsive message. Only half way to adding all the sites I need with more to come I need some guidence.

Somewhere I saw gridpane as a recommended provider so though i was in good company. I added the site to an open light speed instance on a voltar AMD High performance with 2cpu’s, 100 Gb storage. the server does have our own Live website on it as well as this is where build our dev sites before moving them live, but I thought this server whould be plenty large enough. it is only using 40% of disk space and 30% of memery so not working hard.

Open to suggestions on possible issues or recommendations, is OLS not good? is ngnix better, could anyone recommenced a better service for Mainwp(Linode, upcloud, or digital Ocean) should I move all other sites from this server?

Below are some server speck if helps

Thank You in Advance :slight_smile:

Hi @Ebundant-Online

Welcome to the MainWP Community.

Can you try increasing the WordPress Memory Limit to 128MB and cURL Timeout to at least 300 and see if that helps?

You can find more information on how to do so here: Resolving System Requirement Issues - MainWP Documentation

You may also try enabling “Optimize for shared hosting or big networks” option on the Dashboard > Settings > Advanced Settings page for faster loading of MainWP pages with large tables such as the Manage Sites page.

I am on GP and I host my MainWP site on its own Hetzner server 3 vCPU and 4 GB RAM I can run 50 sites for a scan in less than 10 seconds and updates are quite fast as well.

Setting curl to 300 on all of your sites is a must. You also must look at how many sites you have per server. There are rate limits set by GP so if you have too many sites you will need to adjust the MainWP request rate under andvanced (/wp-admin/admin.php?page=SettingsAdvanced)

If you are running 7G there are some items to whitelist.


Thanks Bonjan,
I toggled on the “Optimize for shared hosting or big networks” and the time for sites to load is way faster now.
Much more usable :slight_smile:

1 Like

Hey Eric,
thanks for your response, after posing this I did a bit more digging through Gridpane Wiki and discovered how to ssh into server and set the “WordPress Memory Limit” to show the same as PHP memory limit, and set as Gridpane describes for each website and then set the Default Socket Timeout (seconds) to adjust the cURL setting to 300. I did this on the Dashboard site as shown now below. This did not speed up the load of sites in the dashboard toggling on “Optimize for shared hosting or big networks” did the trick as Bojan described.

Always looking to learn more on how to optimise.
Just checking you are saying setting of cURL is a must for all child sites connected as well? gridpade defults to 60 seconds

Also can you please point me to Items that need Whitlisting in 7G
I am using 7G at the moment with no additional measures set, I am really interested to know how others really lock down their dash sites. should I use wordfence or any other wordpress plug in in conjunction? I did install the dashboaed lock extension.


1 Like

Yes, I set my curl to 300 on all child sites

If you put this code into your user-config.php it will handle the memory info

define( 'WP_MEMORY_LIMIT', ini_get( 'memory_limit' ) );

7G below …

nano /etc/nginx/extra.d/mainwp-whitelist-7g-context.conf

set $exclusion_rule_match "";
if ( $args ~* ^(.*)mainwpsignature=(.*)$ ) {
set $exclusion_rule_match 6;
if ( $bad_querystring_7g = $exclusion_rule_match ) {
set $7g_drop_bad_query_string 0;

set $exclusion_rule_match "";
if ( $args ~* ^(.*)mainwpsignature=(.*)$ ) {
set $exclusion_rule_match 15;
if ( $bad_querystring_7g = $exclusion_rule_match ) {
set $7g_drop_bad_query_string 0;

set $exclusion_rule_match "";
if ( $args ~* ^(.*)mwpdl(.*)$ ) {
set $exclusion_rule_match 36;
if ( $bad_querystring_7g = $exclusion_rule_match ) {
set $7g_drop_bad_query_string 0;

if you have a bunch of sites on a server set the below to the ip of you MainWP server …

nano /etc/nginx/extra.d/mainwp-remote-addr-rate-limit-whitelist.conf 0;

After changing the 2 files on your servers run the below commands

nginx -t

gp ngx reload

For more on my config see this post which also includes my CloudFlare rule to protect my server.


Awesome thanks for this I will check it out :slight_smile:

Have a great day

1 Like

Hi Eric

Thanks so much for your input you have been really helpful I have just dug into your content and discovered two issues
1 the server I am using for MainWP dash is a Lightspeed server obviously you are using a NGNIX instance here with this code si I need to find where to add this code in OLS.

Question is their a specific reason you used NGNIX, in your opinion would it do better as the server for Mainwp or just personal preference?

2 I have logged in to gridpane community and clicked the link and I get page not available, I have found your profile in the community followed you, I searched your visible posts and do not see it either. interested to see what you wrote

Thanks again for all you guidance

1 Like

Sorry, I forgot to check which group it was in. It’s in the Developer group so I am posting the contents below…

I have MainWP running. My setup is below

  • Dedicated Hetzner (3Core/4GB)
  • GP Cron set to 5 minutes
  • Caching disabled
  • 7G enabled
  • Fail2Ban all enabled (CF integration, whitelist my IP, 3 failed attempts locks for 60 minutes)
  • Additional measures - all except wp-version enabled
  • PHP 8.1 (300 max execution, 300 max input, 1k input vars, 512 memory, 300 socket timeout

I also have CloudFlare configured to block all access to the console and then I create allows for monitoring (Patchstack, Better Uptime, Uptime Robot) and I allow responses from managed sites. The below rule is an example of what I use.

( contains “my mainwp server domain” and not ip.src in {my gridpane server ipss} and not ip.src in $whitelist and http.user_agent ne “Better Uptime Bot Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36” and not http.user_agent contains “UptimeRobot” and not http.user_agent contains “client domain” and not http.user_agent contains “next client domain” and not http.request.uri.path contains “/.well-known/acme-challenge/”)

1 Like

Awesome thanks so much for this, it is super helpful.
to start with I Just popped MainWP on on OLS server to try, this is the same server my own website is on and also where we develop client websites, now ironing out some bugs with settings.

The more I find settings wise the more i see that NGNIX may be the way to go.

Just trying to evaluate is it worth pulling up stumps now and move it to NGNIX before I finish adding all my sites to it, as all the settings I am seeing people use are with NGNIX.
Also would it be best practice to have it on a stand alone box with no other sites.

thanks for your input, have a great day. :slight_smile:

1 Like

I keep mine on it’s own server for performance and security purposes. It also has a dedicated domain, not a subdomain.

I have a dedicated development server where every site is a subdomain of a specific dev domain.

All eCommerce sites are on dedicated servers. Brochure sites are combined but are based on size and plugins as to how many per server.

I do run NGINX currently but have looked at OLS.

1 Like

Thanks Eric,
Good to know how others set up their systems, I am do same with sub domains now thinking as you say moving the MainWP dash from this server would help with performance and security.
great to have your input.

Have a great day

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.