High Performance Cloud Web Servers – My Quest for The Perfect Budget Lightning Fast Power-housed Cloud Linux Configuration – Part 24 – CRITICAL APACHE2 UPDATE ROCKETTHEME ROCKETLAUNCHER + JOOMLA
Virtual Server #1 Schema:
Domain: exampledomain.com
Username: w1-edcom
Home Path: /home/w1-edcom/
Apache2 Home Path: /home/w1-edcom/public_html/
Virtual Server #2 Schema:
Domain: server-1.exampledomain.com
Username: w2-syshn
Home Path: /home/w2-syshn
Apache2 Home Path: /home/w2-syshn/public_html/
Main Binding IP for Apache2:
xxx.xx.x.4 = shared.exampledomain.com
Apache2 Custom Daemon Username:
httpdu
The Apache2 configuration is a little messy and needs a clean-up for this to all work properly.
Let’s fire up Terminator and su root bash:
[root@server-1]
Let’s backup Apache2 configuration file
[root@server-1] cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bkup4
The following httpd.conf is configured with the following schema:
Virtual Server #1 = exampledomain.com = PUBLIC & LAN (80/443):
https://exampledomain.com
PUBLIC IP = xxx.xx.x.120
LAN IP = 10.1.1.100
Virtual Server #2 = server-1.exampledomain.com = LAN (80/443) (VPN Accessible Only):
https://server-1.exampledomain.com/databases/ = phpMyAdmin 4.6.6
https://server-1.exampledomain.com/mail/ = RoundCube 1.2.3
LAN IP = 10.1.1.2
Working Apache2 Configuration file that matches above schema:
/etc/httpd/conf/httpd.conf
CONTENTS:
ServerRoot “/etc/httpd”
Listen xxx.xx.x.4:80
Include conf.modules.d/*.conf
User httpdu
Group httpdu
ServerAdmin admin@exampledomain.com
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot “/var/www/html/”
<Directory “/var/www”>
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<Directory “/var/www/html”>
#
# Possible values for the Options directive are “None”, “All”,
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that “MultiViews” must be named *explicitly* — “Options All”
# doesn’t give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be “All”, “None”, or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9071/var/www/html/
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files “.ht*”>
Require all denied
</Files>
ErrorLog “logs/error_log”
LogLevel warn
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\” %I %O” combinedio
</IfModule>
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
#CustomLog “logs/access_log” common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
CustomLog “logs/access_log” combined
</IfModule>
<IfModule alias_module>
#
# Redirect: Allows you to tell clients about documents that used to
# exist in your server’s namespace, but do not anymore. The client
# will make a new request for the document at its new location.
# Example:
# Redirect permanent /foo http://www.example.com/bar
#
# Alias: Maps web paths into filesystem paths and is used to
# access content that does not live under the DocumentRoot.
# Example:
# Alias /webpath /full/filesystem/path
#
# If you include a trailing / on /webpath then the server will
# require it to be present in the URL. You will also likely
# need to provide a <Directory> section to allow access to
# the filesystem path.
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the target directory are treated as applications and
# run by the server when requested rather than as documents sent to the
# client. The same rules about trailing “/” apply to ScriptAlias
# directives as to Alias.
#
ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
</IfModule>
<Directory “/var/www/cgi-bin”>
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
#
# TypesConfig points to the file containing the list of mappings from
# filename extension to MIME-type.
#
TypesConfig /etc/mime.types
#
# AddType allows you to add to or override the MIME configuration
# file specified in TypesConfig for specific file types.
#
#AddType application/x-gzip .tgz
#
# AddEncoding allows you to have certain browsers uncompress
# information on the fly. Note: Not all browsers support this.
#
#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz
#
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
#
# AddHandler allows you to map certain file extensions to “handlers”:
# actions unrelated to filetype. These can be either built into the server
# or added with the Action directive (see below)
#
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add “ExecCGI” to the “Options” directive.)
#
#AddHandler cgi-script .cgi
# For type maps (negotiated resources):
#AddHandler type-map var
#
# Filters allow you to process content before it is sent to the client.
#
# To parse .shtml files for server-side includes (SSI):
# (You will also need to add “Includes” to the “Options” directive.)
#
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
#
# The mod_mime_magic module allows the server to use various hints from the
# contents of the file itself to determine its type. The MIMEMagicFile
# directive tells the module where the hint definitions are located.
#
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
# VIRTUAL SERVER 1 #
# TLD: exampledomain.com #
# Username: w1-edcom #
# NON-SSL #
IncludeOptional conf.d/*.conf
SSLProtocol ALL -SSLv2
SSLCipherSuite HIGH:!SSLv2:!ADH:!aNULL:!eNULL:!NULL
ServerTokens Minimal
ServerSignature Off
TraceEnable Off
<VirtualHost xxx.xx.x.120:80>
ServerName exampledomain.com
ServerAlias http://www.exampledomain.com
DocumentRoot /home/w1-edcom/public_html
ErrorLog /home/w1-edcom/exampledomain.com_non-ssl_error_log
CustomLog /home/w1-edcom/exampledomain.com_non-ssl_access_log combined
ScriptAlias /cgi-bin/ /home/w1-edcom/cgi-bin/
DirectoryIndex index.html index.php index.php4 index.php5 index.htm
<Directory /home/w1-edcom/public_html>
Options -Indexes +FollowSymlinks
#allow from all
#AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AllowOverride All
Require all granted
</Directory>
<Directory /home/w1-edcom/cgi-bin>
#allow from all
#AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond %{HTTP_HOST} =www.exampledomain.com
RewriteRule ^(.*) https://exampledomain.com/ [R]
<LocationMatch ^(.*\.php)$>
ProxyPass fcgi://127.0.0.1:9071/home/w1-edcom/public_html$1
</LocationMatch>
php_value memory_limit 64M
php_value suhosin.session.encrypt Off
</VirtualHost>
# VIRTUAL SERVER 1 #
# TLD: exampledomain.com #
# Username: w1-edcom #
# SSL #
<VirtualHost xxx.xx.x.120:443>
ServerName exampledomain.com
ServerAlias http://www.exampledomain.com
DocumentRoot /home/w1-edcom/public_html
ErrorLog /home/w1-edcom/exampledomain.com_ssl_error_log
CustomLog /home/w1-edcom/exampledomain.com_ssl_access_log combined
ScriptAlias /cgi-bin/ /home/w1-edcom/cgi-bin/
DirectoryIndex index.html index.php index.php4 index.php5 index.htm
<Directory /home/w1-edcom/public_html>
Options -Indexes +FollowSymlinks
#allow from all
#AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AllowOverride All
Require all granted
</Directory>
<Directory /home/w1-edcom/cgi-bin>
#allow from all
#AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond %{HTTP_HOST} =www.exampledomain.com
RewriteRule ^(.*) https://exampledomain.com/ [R]
SSLEngine on
SSLCertificateFile /home/w1-edcom/ssl.cert
SSLCertificateKeyFile /home/w1-edcom/ssl.key
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
php_value memory_limit 64M
php_value suhosin.session.encrypt Off
<LocationMatch ^(.*\.php)$>
ProxyPass fcgi://127.0.0.1:9071/home/w1-edcom/public_html$1
</LocationMatch>
</VirtualHost>
# VIRTUAL SERVER 1 #
# TLD: exampledomain.com #
# Username: w1-edcom #
# SSL LAN #
<VirtualHost 10.1.1.100:443>
ServerName exampledomain.com
ServerAlias http://www.exampledomain.com
DocumentRoot /home/w1-edcom/public_html
ErrorLog /home/w1-edcom/exampledomain.com_ssl_error_log
CustomLog /home/w1-edcom/exampledomain.com_ssl_access_log combined
ScriptAlias /cgi-bin/ /home/w1-edcom/cgi-bin/
DirectoryIndex index.html index.php index.php4 index.php5 index.htm
<Directory /home/w1-edcom/public_html>
Options -Indexes +FollowSymlinks
#allow from all
#AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AllowOverride All
Require all granted
</Directory>
<Directory /home/w1-edcom/cgi-bin>
#allow from all
#AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond %{HTTP_HOST} =www.exampledomain.com
RewriteRule ^(.*) https://exampledomain.com/ [R]
SSLEngine on
SSLCertificateFile /home/w1-edcom/ssl.cert
SSLCertificateKeyFile /home/w1-edcom/ssl.key
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
php_value memory_limit 64M
php_value suhosin.session.encrypt Off
<LocationMatch ^(.*\.php)$>
ProxyPass fcgi://127.0.0.1:9071/home/w1-edcom/public_html$1
</LocationMatch>
</VirtualHost>
# VIRTUAL SERVER 2 #
# TLD: server-1.exampledomain.com #
# Username: w2-syshn #
# NON-SSL LAN #
<VirtualHost 10.1.1.2:80>
ServerName server-1.exampledomain.com
ServerAlias http://www.server-1.exampledomain.com
DocumentRoot /home/w2-syshn/public_html
ErrorLog /home/w2-syshn/server-1.exampledomain.com_non-ssl_error_log
CustomLog /home/w2-syshn/server-1.exampledomain.com_non-ssl_access_log combined
ScriptAlias /cgi-bin/ /home/w2-syshn/cgi-bin/
DirectoryIndex index.html index.php index.php4 index.php5 index.htm
<Directory /home/w2-syshn/public_html>
Options -Indexes +FollowSymlinks +ExecCGI
#allow from all
AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
#AllowOverride All
Require all granted
AddType application/x-httpd-php .php
AddType application/x-httpd-php5 .php5
</Directory>
<Directory /home/w2-syshn/cgi-bin>
#allow from all
AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
#AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond %{HTTP_HOST} =www.server-1.exampledomain.com
RewriteRule ^(.*) https://server-1.exampledomain.com/ [R]
SuexecUserGroup “#502” “#501”
<Directory /home/w2-syshn/public_html/php56>
Options +Indexes +IncludesNOEXEC +SymLinksifOwnerMatch +ExecCGI
#allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
</Directory>
<LocationMatch ^(.*\.php)$>
ProxyPass fcgi://127.0.0.1:9071/home/w2-syshn/public_html$1
</LocationMatch>
php_value memory_limit 64M
php_value suhosin.session.encrypt Off
</VirtualHost>
# VIRTUAL SERVER 2 #
# TLD: server-1.exampledomain.com #
# Username: w2-syshn #
# SSL – LAN #
<VirtualHost 10.1.1.2:443>
ServerName server-1.exampledomain.com
ServerAlias http://www.server-1.exampledomain.com
DocumentRoot /home/w2-syshn/public_html
ErrorLog /home/w2-syshn/server-1.exampledomain.com_ssl_error_log
CustomLog /home/w2-syshn/server-1.exampledomain.com_ssl_access_log combined
ScriptAlias /cgi-bin/ /home/w2-syshn/cgi-bin/
DirectoryIndex index.html index.php index.php4 index.php5 index.htm
<Directory /home/w2-syshn/public_html>
Options -Indexes +FollowSymlinks +ExecCGI
#allow from all
#AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AllowOverride All
Require all granted
AddType application/x-httpd-php .php
AddType application/x-httpd-php5 .php5
</Directory>
<Directory /home/w2-syshn/cgi-bin>
#allow from all
#AllowOverride None Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond %{HTTP_HOST} =www.server-1.exampledomain.com
RewriteRule ^(.*) https://server-1.exampledomain.com/ [R]
SSLEngine on
SSLCertificateFile /home/w2-syshn/ssl.cert
SSLCertificateKeyFile /home/w2-syshn/ssl.key
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
php_value memory_limit 64M
php_value suhosin.session.encrypt Off
<LocationMatch ^(.*\.php)$>
ProxyPass fcgi://127.0.0.1:9071/home/w2-syshn/public_html$1
</LocationMatch>
</VirtualHost>
Paste the above contents into httpd.conf , edit the variables accordingly to match your true schema…
Null httpd.conf
[root@server-1] dev /cat/null > /etc/httpd/conf/httpd.conf
Edit httpd.conf
[root@server-1] nano -c /etc/httpd/conf/httpd.conf
Paste, Edit
CNTRL + X , “Y” to save changes and ENTER to return to bash:
[root@server-1]
Restart Apache2 with new configuration:
[root@server-1] systemctl restart httpd.service
Let’s edit the permissions of the following directories and chown them with our new apache2 username :
/var/opt/remi/php71/lib/php/session
/var/opt/remi/php71/lib/php/opcache
/var/opt/remi/php71/lib/php/wsdlcache
[root@server-1] cd /var/opt/remi/php71/lib/php
[root@server-1] chown -R httpdu:httpdu session
[root@server-1] chown -R httpdu:httpdu opcache
[root@server-1] chown -R httpdu:httpdu wsdlcache
Since we can access our RoundCube on VPN using the following URL:
https://server-1.exampledomain.com/mail/
Let’s go ahead and uninstall RoundCube from Virtual Server #1 – exampledomain.com:
Virtualmin -> select exampledomain.com [dropdown-box] -> Install Scripts -> Installed Scripts -> Check /mail/ and click Uninstall
Virtualmin currently doesn’t support what we have already achieved and continue on to achieve… so we’re basically using Virtualmin for specific features and doing the rest in Terminal.
And therefore means more maintenance and steps to take to get things running correctly.
Since this quest is security minded, we don’t have a running FTP Server and we’re not enabling login for our apache2 custom user. And we’re using PHP-FPM , therefore we will need to either use Terminal or Webmin -> Others -> File Manager to manage website files for the various domains, and within their custom username folders, we will be changing the ownership user and group to our new apache2 user “httpdu”.
This way, we still maintain Virtualmin and our System working together properly. And for all PHP Processing within our Virtual Server’s, the sub-folders will always be owned by “httpdu:httpdu”.
If I ever figure out a better way to do this… I will update this blog accordingly.
We want Security, Speed, Performance and Reliability!
In this part of the quest, we will be deploying three different CMS (Content Management System) PHP Scripts.
- Joomla 3.6
- WordPress 4.x
- phpBB 3.1.x
Using Rocket Theme’s Premium Style Set “Ambrosia”…
RocketTheme – Joomla – Ambrosia
RocketTheme – WordPress – Ambrosia
RocketTheme – phpBB – Ambrosia
Let’s begin with deploying RocketTheme Ambrosia for Joomla:
Your local RocketTheme Joomla Pack files should look something similar:
ambrosia-1.1.4-rocketlauncher_j36.zip
ambrosia-1.1.4-template.zip
joomla-pkg_gantry5_v5.4.8.zip
We’re going to use the rocketlauncher file: ambrosia-1.1.4-rocketlauncher_j36.zip on the root directory of Virtual Server #1 – exampledomain.com
Switching over to Virtualmin, let’s navigate to the following:
Webmin -> Others -> File Manager
You’re home directory should be bare bones. If you still have the info.php , it’s best that you remove it. Since we have it on server-1 (VPN Only) … and it would provide the public with private server information.
It should look like the following, then we will be uploading our RocketTheme Joomla 3.6 RocketLauncher for Ambrosia Premium Theme.
Now we’re about to select the file, click the paperclip as pictured:
Select the file as follows:
Now that we selected our file, let’s go ahead and click “Upload Files” button:
Once it finishes uploading, right click on the .zip and choose “Extract” like follows:
Once it finishes extracting, we are going to select all the files like the following:
Once we have all the folders and files selected, we’re going to right click -> Properties -> Change Ownership, like pictured:
Once the dialog box pops up, we’re going to want to use our custom apache2 user, which is what PHP-FPM uses to process our PHP Files through our web server: (Make sure to use your own custom apache2 user in replacement of here. And check Reclusive. This ensures all sub-directories are affected by this change:
Now we’re going to delete the index.html that we were using a placeholder. (Always good practice to put a placeholder when changing, uploading, your root directory for your Virtual Server):
CREATING configuration.php (Essential for install) 🙂
In file Manager, navigate to “File -> Create File” and create “configuration.php”
Then right click on it and go to Properties -> Ownership -> httpdu (user) httpdu (group)
Then right click on it and go to Properties -> Permissions -> Make sure it’s writeable by everyone but public, this should equate to 0664
Now let’s switch over to a different FireFox tab and navigate to the following:
https://exampledomain.com
This should take you to the following Joomla RocketLauncher installation screen, which you need to type in your admin@exampledomain.com , your Page Name, Page Description and create an Administrator User and Password (make sure to use a strong password!):
In the next screen, we’re going to put in our database user and password for Virtual Server #1 – exampledomain.com and setup a prefix for the Joomla 3.6 installation.
We will use the following prefix schema for Joomla 3.6:
joom1_
Your next screen should look identical to the following, then click “Install”:
You should see the following screen saying Joomla 3.6 installation has completed. There is a remove installation folder button, go ahead and click it. You will get an error returned to you… This is because our apache2 user “httpdu” does not own the parent folder (/home/w1-edcom/ , however it owns everything inside of it. So we will have to manually remove it in file manager after receiving the error message. See below:
Error Message:
Let’s switch back to Webmin -> Others -> File Manager:
Select “Installation” and then click the upper right Delete Trash Can Icon:
Now that we have our Joomla 3.6 RocketTheme RocketLauncher for Ambrosia Installed… Let’s switch over to FireFox and navigate to the following URL (which we will restrict publically, so it only works on our LAN 10.x block, for VPN only.) 🙂 :
https://exampledomain.com/administrator/
Login with your chosen Administrator Username and Password:
You will immediately be prompted to update your extensions and joomla core. Let’s do that, starting with extensions:
Click “View Updates”:
Check “RokSprocket Module” and click “Update” in the upper left corner as follows:
Update Successful Message…
Click the upper left Joomla Icon and go back to the homepage where you will be prompted to update Joomla core…
Click the “Install the Update”…
You should now have a completion update to Joomla 3.6.5:
Now navigate to System -> Global Configuration:
Select “Use URL Rewriting” to -> YES
Then click the “Server” sub-tab:
Select “GZIP Page Compression” -> YES
Select “Your Server’s Local Time Zone”
then “Save and Close”
Configuration Successfully Saved:
Now let’s switch over to Terminator on server-1 as su root on bash:
[root@server-1] cd /home/w1-edcom/public_html
Copy htaccess.txt to .htaccess
[root@server-1] cp htaccess.txt .htaccess
Delete htaccess.txt
[root@server-1] rm -rf htaccess.txt
Switching back to FireFox, let’s navigate to the following URL, which will re-write as follows:
https://exampledomain.com/pages/pricing/
Using Free tools at Pingdom.com , let’s do a quick speed test and see how we are faring so far…
Currently Clocking:
Load Time = 1.12 seconds
Performance Grade = 77
Faster Than = 87% of tested sites
Let’s make it faster 🙂
Source Articles, Blogs, Websites:
ServerFault – Apache 2.4 + PHP-FPM – ProxyPassMatch
ServerFault – php-fpm – File Not Found
QUEST 1 : Lightning Fast Web Servers (STRUCTURED INDEX)
QUEST 1 : Lightning Fast Web Servers – PART 1 – INTRODUCTION
QUEST 1: Lightning Fast Web Servers – PART 2 – PREREQUISITES
QUEST 1: Lightning Fast Web Servers – PART 3 -OVERVIEW/PRIOR TO CENTOS 7.3 MINIMAL INSTALLATION
QUEST 1: Lightning Fast Web Servers – PART 4 – CentOS 7.3 NETWORK CONFIGURATION AND SSH2 DAEMON CONFIGURATION WITH 4096-BIT KEYS
QUEST 1: Lightning Fast Web Servers – PART 5 – VIRTUALMIN PRO INSTALLATION AND CONFIGURATION
QUEST 1: Lightning Fast Web Servers – Part 6 – CSF FIREWALL INSTALL CONFIGURATION – FINALIZE SSH2 4096-BIT KEYS
QUEST 1: Lightning Fast Web Servers – Part 7 – VIRTUALMIN WAN AND LAN STATIC IP ADDRESSING
QUEST 1: Lightning Fast Web Servers – Part 8 – BIND 9 CONFIGURATION + VIRTUALMIN AND APACHE2 OPTIMIZATION
QUEST 1: Lightning Fast Web Servers – Part 9 – INSTALL PHP 5.6.25, PHP 7.0.15, PHP 7.1.1 + VIRTUALMIN CONFIGURATION
QUEST 1: Lightning Fast Web Servers – Part 10 – ADD STATIC WAN IP ADDRESS + ENABLE PHP 7.1.1 ON BOOT + PHP-FPM + APACHE2 + PHP INFO
QUEST 1: Lightning Fast Web Servers – Part 11 – BIND 9 + SETUP AS AUTHORITATIVE DNS NAME SERVERS + VIRTUALMIN VIRTUAL SERVER #1 CREATION
QUEST 1: Lightning Fast Web Servers – Part 12 – APACHE2 FIXES + PHP AND PHP-FPM UPDATES
QUEST 1: Lightning Fast Web Servers – Part 13 – DOVECOT FIX + VIRTUAL SERVER #2 CREATION + REMOVE SYSTEM HOST IP FROM SHARED POOL
QUEST 1: Lightning Fast Web Servers – Part 14 – VIRTUALMIN CONFIGURATIONS + INSTALL PRO LICENSE + UPDATE SYSTEM + MODIFY SETTINGS
QUEST 1: Lightning Fast Web Servers – Part 15 – PHP-FPM 5.4.x + PHP-FPM 5.6.x + PHP-FPM 7.0.x + PHP-FPM 7.1.x
QUEST 1: Lightning Fast Web Servers – Part 16 – ROUNDCUBE + SSL ON VIRTUAL SERVER #1 + SSL ON VIRTUALMIN WEBUI + APACHE2 CONFIGURATIONS
QUEST 1: Lightning Fast Web Servers – Part 17 – STATIC LAN IP NETWORK SCHEMA + APACHE2 LAN BINDING TO VIRTUAL SERVER #1
QUEST 1: Lightning Fast Web Servers – Part 18 – OPENVPN ACCESS SERVER + OPENVPN SERVER + OPENVPN CLIENT + TEST VPN
QUEST 1: Lightning Fast Web Servers – Part 19 – PRIVATE BIND 9 DNS
QUEST 1: Lightning Fast Web Servers – Part 20 – APACHE2 CONFIGURATION UPDATE + INTERNAL VIRTUALHOST MAPPING
QUEST 1: Lightning Fast Web Servers – Part 21 – SECURITY ENHANCEMENT + OPENVPN
QUEST 1: Lightning Fast Web Servers – Part 22 – SSL DOVECOT + POSTFIX + MOZILLA THUNDERBIRD
QUEST 1: Lightning Fast Web Servers – Part 23 – FFMPEG X64 + MULTIMEDIA LIBRARIES
QUEST 1: Lightning Fast Web Servers – Part 24 – CRITICAL APACHE2 UPDATE ROCKETTHEME ROCKETLAUNCHER + JOOMLA
QUEST 1: Lightning Fast Web Servers – Part 25 – ROCKETTHEME ROCKETLAUNCHER + WORDPRESS
QUEST 1: Lightning Fast Web Servers – Part 26 – ROCKETTHEME ROCKETLAUNCHER + PHPBB
QUEST 1: Lightning Fast Web Servers – Part 27 – NGINX INSTALL FROM SOURCE + MODS
QUEST 1: Lightning Fast Web Servers – Part 28 – APACHE2 + SECURITY – MOD_SECURITY + MOD_EVASIVE + OWASP V3
QUEST 1: Lightning Fast Web Servers – Part 29 – MYSQL MARIADB TUNING AND OPTIMIZATION
QUEST 1: Lightning Fast Web Servers – Part 30 – VARNISH INSTALLATION + CONFIG WITH NGINX + APACHE2
QUEST 1: Lightning Fast Web Servers – Part 31 – APACHE2 TUNING AND OPTIMIZATION
QUEST 1: Lightning Fast Web Servers – Part 32 – REDIS CACHE SERVER
QUEST 1: Lightning Fast Web Servers – Part 33 – INSTALL HYBRID-IRCD + ANOPE SERVICES + SECURITY EGGDROP
QUEST 1: Lightning Fast Web Servers – Part 34 – INSTALL SHOUTCAST SERVER + WEBUI
QUEST 1: Lightning Fast Web Servers – Part 35 – JOOMLA CMS OPTIMIZATION + SECURITY
QUEST 1: Lightning Fast Web Servers – Part 36 – WORDPRESS CMS OPTIMIZATION + SECURITY
QUEST 1: Lightning Fast Web Servers – Part 37 – PHPBB FORUM OPTIMIZATION + SECURITY