[Beta] Convert to NGINX on a CentOS + cPanel server


Staff member
I've been working on a script slowely to convert a cpanel server to nginx for a while. I consider the script now to be good enough to allow others to use it. Some things to consider:

* tested on centos 5/6
* only available for cpanel
* I don't have an easy way to convert back yet (but will add this in and show below how it can be easily removed.
* You must be able to run commands as root in SSH

Converting to nginx
Run the following ssh commands
rsync -a rsync://mirror.trouble-free.net/admin /admin

1) Install + convert
/admin/convert2nginx yes all

Nginx will be installed, the apache vhosts converted and started up. But you are not done, you should also

2) Add to cron
/etc/cron.d/nginxmonitor.sh is automatically created now, no step needed here anymore.

3) Remove fileprotect

4) Configure mod_rpaf by adding the below to /usr/local/apache/conf/includes/pre_virtualhost_global.conf

The install process also configured mod_rpaf. Note change RPAFproxy_ips to your server IPs.

LoadModule rpaf_module        modules/mod_rpaf-2.0.so
<IfModule mod_rpaf-2.0.c>
RPAFenable On
# Enable reverse proxy add forward
# which ips are forwarding requests to us
RPAFsethostname On
# let rpaf update vhost settings
# allows to have the same hostnames as in the "real"
# configuration for the forwarding Apache
RPAFheader X-Forwarded-For
# Allows you to change which header mod_rpaf looks
# for when trying to find the ip the that is forwarding
# our requests

Once done restart apache with /scripts/restartsrv_httpd

So what just happened? /admin/convert2nginx did the following

* installed nginx
* installed mod_rpaf
* converted the vhosts to nginx (/usr/local/nginx/conf/virtual.include)
* added /admin/nginx_monitor.sh to /etc/rc.d/rc.local
* created /scripts/legacypostwwwacct and /etc/logrotate.d/nginx
* change /var/cpanel/cpanel.config to reflect apache_port=
* added /etc/cron.d/nginxmonitor.sh

Your steps are to add the cron and configure mod_rpaf, and if needed disable file protect.

Disabling nginx

To disable edit /var/cpanel/cpanel.config and change apache_port= to apache_port=

Save and run
killall -9 nginx
/usr/local/cpanel/whostmgr/bin/whostmgr2 --updatetweaksettings

nginx_monitor.sh will not run if the apache port is not set to 81

To remove completely: delete /usr/local/nginx, /etc/logrotate.d/nginx, /scripts/legacypostwwwacct, nginx_monitor from cron and /etc/rc.d/rc.local startup of nginx

To do

Add in support for file protect (better to get cloudlinux with cagefs anyway)
Add in DA support
Add in removal script


Staff member
Step 2:
*/2 * * * * /admin/nginx_monitor.sh >/dev/null 2>&1

Is no longer needed. A cron is created in /etc/cron.d now.


Staff member
Two new options have been added.

touch /admin/.info/cpanelusername_nginximageskip

To skip nginx from serving images on the username. Why might you want that? If you use mod_rewrite to redirect images to a php script you will need this.


touch /admin/.info/cpanelusername_nginxcacheskip

To skip nginx from using its built in proxy cache. If you frequently update your site and want to see the changes instantly you'll want this.

To rebuild vhosts run
/admin/nginxvhostconvert yes hosts
killall -HUP nginx

Boris Janevski

New Member
Looks like there is an error after nginx update EasyApache don't work:

Building global cache for cpanel...Done
!! Failed to utilize existing Apache configuration file. Resetting Apache configuration to default. !!
!! Updating Apache configuration for ModQos !!
Distilled successfully
!! Failed to generate a syntactically correct Apache configuration (/usr/local/apache/conf/httpd.conf.1394084177):
Configuration problem detected on line 242 of file /usr/local/apache/conf/httpd.conf.1394084177: : Syntax error on line 1 of /usr/local/apache/conf/includes/pre_virtualhost_global.conf: Cannot load /usr/local/apache/modules/mod_rpaf-2.0.so into server: /usr/local/apache/modules/mod_rpaf-2.0.so: cannot open shared object file: No such file or directory

What to do?


Staff member
Temporarily remove mod_rpaf from any included files,

rebuild easyapache

reinstall mod_rpaf

* There are better ways, for example I know its possible to make custom changes to have mod_rpaf build with easyapache, but I don't have the info right now. I will update it once I do.

Boris Janevski

New Member
I would like to remove mod_rpaf from "any included files" just I'm not sure how to find that files?
Maybe stupid question, but :D

Boris Janevski

New Member
Ok, here is what I did and EasyApache works

I renamed pre_virtualhost_global.conf from /usr/local/apache/conf/includes to file home2 ( in the same directory, give any name you want ) , rebuild Apache and than renamed home2 back to pre_virtualhost_global.conf


New Member
Did you manage to do a benchmark? i.e. cPanel+Apache vs cPanel+Nginx page speed, CPU and RAM usage/load, Response Time etc..

It would be most interesting to see from an Admin point of view. Many thanks for your effort.