We walked you through the process of installing Virtualmin with Nginx, PHP and MySQL on Ubuntu earlier today. This is an immediate follow up to that guide which will help you Optimize Virtualmin Server for better performance and speed of your websites.Â
If you’ve used our tutorial to configure your unmanaged VPS with Virtualmin and LEMP, you’re already one step ahead of others in terms of server optimization. But that’s not enough for us. We like to configure and optimize our servers to the fullest. We’ve been doing it for our clients for years. We’ll share some basic things we do to optimize our servers in this post.
This post also include some important configuration changes that you must do after setting up your server. So consider this a must follow tutorial after setting up your Virtualmin server on Ubuntu 20.04. We will begin with such important setting which will make your life easier going forward.
Set default PHP version for Virtualmin
The default PHP version configuration for Virtualmin is set to “Highest Available” by default. This is not an ideal setting for us since we’ve configured PHP v8.0 for CLI. you can change this easily from Virtualmin > System Settings > Server Templates > Default Settings > PHP Options. A drop down list of available PHP versions will be shown to you.
Select PHP v8.0 and click save. Now PHP v8.0 will be used for all newly created servers.
Set PHP Resource Limits
In this section, we will change few default PHP values that are too small for most websites. We will be changing 5 default values. They are memory_limit, upload_max_filesize, post_max_size, max_input_time and max_execution_time. Virtualmin gives an option to change these per website basis under PHP Configuration on Services menu for each virtual server. But having to change them for every website you add can be a little frustrating. Instead, we can change these values on main PHP v8.0 configuration file so they are copied automatically to each new virtual server you add.
Start by navigating to Webmin > Tools > PHP Configuration. You’ll see a list of configuration files for each of your PHP versions. Most of the configuration files will be for PHP CLI. But we’re after PHP FPMÂ configuration. That’s what we should be editing.
Click Manage next to PHP v8.0 CGI configuration file and then Resource Limits. If you’ve configured a different PHP version than PHP v8.0 on the previous tutorial, you should select that version here. You will see a screen similar to following with default values.
We will change these values as follows. These will be values will be good enough for most websites. If you have some requirements that need to be applied for all newly created servers, you may change them here.
Virtualmin Option Name | PHP Option Name | Default Value | New Value |
---|---|---|---|
Maximum memory allocation | memory_limit | 128M | 512M |
Maximum file upload size | upload_max_filesize | 2M | 100M |
Maximum HTTP POST size | post_max_size | 8M | 200M |
Maximum input parsing time | max_input_time | 60 | 320 |
Maximum execution time | Maximum execution time | 30 | 120 |
Maximum input variables limit | max_input_vars | 1000 | 3000 |
Optimize Virtualmin Server with PHP OPcache
OPcache increases PHP performance by caching precompiled PHP codes. thereby removing the need for PHP to load on every hit. Virtualmin doesn’t have a feature that allows us to enable and disable PHP OPcache easily. But it’s easy enough to edit php.ini files using Virtualmin config editor. Navigate to Webmin > Tools > PHP Configuration and click Edit Manually button next to PHP v8.0.
Now hit Ctrl+F keys on your keyboard to open search box. Use it to search for following lines one by one and make the changes accordingly. Note that I’ve removed ; symbol from beginning of each of these lines which enables the setting.
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.validate_timestamps=1 opcache.revalidate_freq=10 opcache.save_comments=0
Optimize Nginx Configuration on Virtualmin Server
- Search for the line # server_tokens off; and paste following block of codes below it in new lines.
client_body_buffer_size 10K; client_header_buffer_size 1k; client_max_body_size 200m; large_client_header_buffers 2 8k; reset_timedout_connection on; client_body_timeout 30; send_timeout 30; keepalive_timeout 15;
- Search for access_log and line and turn it off.
access_log off;
- Search for # Gzip Settings and uncomment/change settings as below.
## # Gzip Settings ## gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 2; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/x-icon;Click Save and Close button while making sure Test new configuration before saving? is ticked. Technically and simple restart of nginx now will apply these changes to the system. But since we’ve made some changes to PHP as well, I like to do a system reboot. So let’s do it.
rebootChanges will be applied when your VPS comes back online. Now you can move on to adding your domain to Virtualmin.
Maybe, you can tell us, how to make best sevurity for LEMP, virtualmin and WordPress.
Becouse i use virtualmin with apache, but sites get sometimes hacked.
Best Regards
Unfortunately, we don’t use Apache here at vpsfix.com. If you switch to nginx, we have it all covered.
Ok.
Thanks for info.
Your blog is very valuable.
Regards