OpenLiteSpeed Server Tweaks Script

#1
I'm the kind of person who likes to install and configure OpenLiteSpeed to be tweaked to my own liking for out of the box installations. As such I script alot of my software installs.

This includes OpenLiteSpeed tweaking :D

Thought I'd share my shell script to be run in SSH telnet after initial OpenLiteSpeed installation. Feel free to modify it for your own needs.

Save contents in file named lsws_tweaks.sh and chmod +x it.

Code:
#!/bin/bash
#########################################
DESC='OpenLiteSpeed server tweaks'
BYLINE='by George Liu (eva2000) vbtechsupport.com'
#########################################
VER='0.0.1'
DT=`date +"%d%m%y-%H%M%S"`
RESTART='y'              # restart server after tweaks ?

LSWSCONFIG='/usr/local/lsws/conf/httpd_config.xml'
USER='nobody'          # change to your preferred user to run OLS
GROUP='nobody'      # change to your preferred group to run OLS
#########################################
CPUS=$(grep "processor" /proc/cpuinfo |wc -l)
CPUS=$(echo $CPUS/2 | bc)
WORKERCHECK=$(grep '<httpdWorkers>' ${LSWSCONFIG})
#########################################
if [[ -z "$WORKERCHECK" ]]; then
sed -i "4 i\  <httpdWorkers>${CPUS}<\/httpdWorkers>" ${LSWSCONFIG}
fi
#########################################
echo "-------------------------------------------------------------------"
echo "$DESC"
echo "$BYLINE"
echo "-------------------------------------------------------------------"
echo
echo -n "Backup $LSWSCONFIG"
cp -a $LSWSCONFIG ${LSWSCONFIG}_backup_${DT}
echo " done"
echo "Backup at ${LSWSCONFIG}_backup_${DT}"
echo -n "General Tweaks"
sed -i 's/<indexFiles>index.html<\/indexFiles>/<indexFiles>index.html index.php<\/indexFiles>/g' ${LSWSCONFIG}
sed -i "s/<user>nobody<\/user>/<user>${USER}<\/user>/g" ${LSWSCONFIG}
sed -i "s/<group>nobody<\/group>/<group>${GROUP}<\/group>/g" ${LSWSCONFIG}
sed -i "s/<inMemBufSize>60M<\/inMemBufSize>/<inMemBufSize>120M<\/inMemBufSize>/g" ${LSWSCONFIG}
echo " done"
echo -n "Tuning Tweaks"
sed -i "s/<smartKeepAlive>0<\/smartKeepAlive>/<smartKeepAlive>1<\/smartKeepAlive>/g" ${LSWSCONFIG}
sed -i "s/<sndBufSize>0<\/sndBufSize>/<sndBufSize>65535<\/sndBufSize>/g" ${LSWSCONFIG}
sed -i "s/<rcvBufSize>0<\/rcvBufSize>/<rcvBufSize>65535<\/rcvBufSize>/g" ${LSWSCONFIG}
sed -i "s/<maxCachedFileSize>4096<\/maxCachedFileSize>/<maxCachedFileSize>16384<\/maxCachedFileSize>/g" ${LSWSCONFIG}
sed -i "s/<totalInMemCacheSize>20M<\/totalInMemCacheSize>/<totalInMemCacheSize>40M<\/totalInMemCacheSize>/g" ${LSWSCONFIG}
sed -i "s/<maxMMapFileSize>256K<\/maxMMapFileSize>/<maxMMapFileSize>512K<\/maxMMapFileSize>/g" ${LSWSCONFIG}
sed -i "s/<totalMMapCacheSize>40M<\/totalMMapCacheSize>/<totalMMapCacheSize>80M<\/totalMMapCacheSize>/g" ${LSWSCONFIG}
echo " done"
echo -n "External App lsphp5 Tweaks"
sed -i "s/<maxConns>35<\/maxConns>/<maxConns>50<\/maxConns>/g" ${LSWSCONFIG}
sed -i "s/<env>PHP_LSAPI_CHILDREN=35<\/env>/<env>PHP_LSAPI_CHILDREN=50<\/env>/g" ${LSWSCONFIG}
sed -i "s/<memSoftLimit>450M<\/memSoftLimit>/<memSoftLimit>900M<\/memSoftLimit>/g" ${LSWSCONFIG}
sed -i "s/<memHardLimit>500M<\/memHardLimit>/<memHardLimit>1000M<\/memHardLimit>/g" ${LSWSCONFIG}
sed -i "s/<procSoftLimit>300<\/procSoftLimit>/<procSoftLimit>1000<\/procSoftLimit>/g" ${LSWSCONFIG}
sed -i "s/<procHardLimit>400<\/procHardLimit>/<procHardLimit>1200<\/procHardLimit>/g" ${LSWSCONFIG}
echo " done"
echo
echo "-------------------------------------------------------------------"
echo "Compare Tweaks vs Default settings"
echo "-------------------------------------------------------------------"
sdiff $LSWSCONFIG ${LSWSCONFIG}_backup_${DT}
echo
echo "-------------------------------------------------------------------"
echo "Compare Tweaks vs Default settings"
echo "-------------------------------------------------------------------"
sdiff -s $LSWSCONFIG ${LSWSCONFIG}_backup_${DT}
echo "-------------------------------------------------------------------"
echo
if [[ "$RESTART" = [yY] ]]; then
    service lsws restart
fi
exit
Sample output when you run the script

Code:
./lsws_tweaks.sh
-------------------------------------------------------------------
OpenLiteSpeed server tweaks
by George Liu (eva2000) vbtechsupport.com
-------------------------------------------------------------------

Backup /usr/local/lsws/conf/httpd_config.xml done
Backup at /usr/local/lsws/conf/httpd_config.xml_backup_250813-115116
General Tweaks done
Tuning Tweaks done
External App lsphp5 Tweaks done
-------------------------------------------------------------------
Compare Tweaks vs Default settings
-------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>                          <?xml version="1.0" encoding="UTF-8"?>
<httpServerConfig>                                              <httpServerConfig>
  <serverName>lshttpd</serverName>                                <serverName>lshttpd</serverName>
  <httpdWorkers>4</httpdWorkers>                                  <httpdWorkers>4</httpdWorkers>
  <user>nobody</user>                                            <user>nobody</user>
  <group>nobody</group>                                          <group>nobody</group>
  <priority>0</priority>                                          <priority>0</priority>
  <inMemBufSize>120M</inMemBufSize>                          |  <inMemBufSize>60M</inMemBufSize>
  <swappingDir>/tmp/lshttpd/swap</swappingDir>                    <swappingDir>/tmp/lshttpd/swap</swappingDir>
  <autoRestart>1</autoRestart>                                    <autoRestart>1</autoRestart>
  <autoFix503>1</autoFix503>                                      <autoFix503>1</autoFix503>
  <mime>$SERVER_ROOT/conf/mime.properties</mime>                  <mime>$SERVER_ROOT/conf/mime.properties</mime>
  <showVersionNumber>0</showVersionNumber>                        <showVersionNumber>0</showVersionNumber>
  <adminRoot>$SERVER_ROOT/admin/</adminRoot>                      <adminRoot>$SERVER_ROOT/admin/</adminRoot>
  <logging>                                                      <logging>
    <log>                                                          <log>
      <fileName>$SERVER_ROOT/logs/error.log</fileName>                <fileName>$SERVER_ROOT/logs/error.log</fileName>
      <logLevel>DEBUG</logLevel>                                      <logLevel>DEBUG</logLevel>
      <debugLevel>0</debugLevel>                                      <debugLevel>0</debugLevel>
      <rollingSize>10M</rollingSize>                                  <rollingSize>10M</rollingSize>
      <enableStderrLog>1</enableStderrLog>                            <enableStderrLog>1</enableStderrLog>
    </log>                                                          </log>
    <accessLog>                                                    <accessLog>
      <fileName>$SERVER_ROOT/logs/access.log</fileName>              <fileName>$SERVER_ROOT/logs/access.log</fileName>
      <rollingSize>10M</rollingSize>                                  <rollingSize>10M</rollingSize>
      <keepDays>30</keepDays>                                        <keepDays>30</keepDays>
      <compressArchive>0</compressArchive>                            <compressArchive>0</compressArchive>
    </accessLog>                                                    </accessLog>
  </logging>                                                      </logging>
  <indexFiles>index.html index.php</indexFiles>              |  <indexFiles>index.html</indexFiles>
  <expires>                                                      <expires>
    <enableExpires>1</enableExpires>                                <enableExpires>1</enableExpires>
    <expiresByType>image/*=A604800, text/css=A604800, applica      <expiresByType>image/*=A604800, text/css=A604800, applica
  </expires>                                                      </expires>
  <tuning>                                                        <tuning>
    <eventDispatcher>best</eventDispatcher>                        <eventDispatcher>best</eventDispatcher>
    <SSLCryptoDevice>null</SSLCryptoDevice>                        <SSLCryptoDevice>null</SSLCryptoDevice>
    <maxConnections>2000</maxConnections>                          <maxConnections>2000</maxConnections>
    <maxSSLConnections>200</maxSSLConnections>                      <maxSSLConnections>200</maxSSLConnections>
    <connTimeout>300</connTimeout>                                  <connTimeout>300</connTimeout>
    <maxKeepAliveReq>10000</maxKeepAliveReq>                        <maxKeepAliveReq>10000</maxKeepAliveReq>
    <smartKeepAlive>1</smartKeepAlive>                        |    <smartKeepAlive>0</smartKeepAlive>
    <keepAliveTimeout>5</keepAliveTimeout>                          <keepAliveTimeout>5</keepAliveTimeout>
    <sndBufSize>65535</sndBufSize>                            |    <sndBufSize>0</sndBufSize>
    <rcvBufSize>65535</rcvBufSize>                            |    <rcvBufSize>0</rcvBufSize>
    <maxReqURLLen>8192</maxReqURLLen>                              <maxReqURLLen>8192</maxReqURLLen>
    <maxReqHeaderSize>16380</maxReqHeaderSize>                      <maxReqHeaderSize>16380</maxReqHeaderSize>
    <maxReqBodySize>2047M</maxReqBodySize>                          <maxReqBodySize>2047M</maxReqBodySize>
    <maxDynRespHeaderSize>8192</maxDynRespHeaderSize>              <maxDynRespHeaderSize>8192</maxDynRespHeaderSize>
    <maxDynRespSize>2047M</maxDynRespSize>                          <maxDynRespSize>2047M</maxDynRespSize>
    <maxCachedFileSize>16384</maxCachedFileSize>              |    <maxCachedFileSize>4096</maxCachedFileSize>
    <totalInMemCacheSize>40M</totalInMemCacheSize>            |    <totalInMemCacheSize>20M</totalInMemCacheSize>
    <maxMMapFileSize>512K</maxMMapFileSize>                  |    <maxMMapFileSize>256K</maxMMapFileSize>
    <totalMMapCacheSize>80M</totalMMapCacheSize>              |    <totalMMapCacheSize>40M</totalMMapCacheSize>
    <useSendfile>1</useSendfile>                                    <useSendfile>1</useSendfile>
    <enableGzipCompress>1</enableGzipCompress>                      <enableGzipCompress>1</enableGzipCompress>
    <enableDynGzipCompress>1</enableDynGzipCompress>                <enableDynGzipCompress>1</enableDynGzipCompress>
    <gzipCompressLevel>6</gzipCompressLevel>                        <gzipCompressLevel>6</gzipCompressLevel>
    <compressibleTypes>text/html</compressibleTypes>                <compressibleTypes>text/html</compressibleTypes>
    <gzipAutoUpdateStatic>1</gzipAutoUpdateStatic>                  <gzipAutoUpdateStatic>1</gzipAutoUpdateStatic>
    <gzipStaticCompressLevel>6</gzipStaticCompressLevel>            <gzipStaticCompressLevel>6</gzipStaticCompressLevel>
    <gzipMaxFileSize>1M</gzipMaxFileSize>                          <gzipMaxFileSize>1M</gzipMaxFileSize>
    <gzipMinFileSize>300</gzipMinFileSize>                          <gzipMinFileSize>300</gzipMinFileSize>
  </tuning>                                                      </tuning>
  <security>                                                      <security>
    <fileAccessControl>                                            <fileAccessControl>
      <followSymbolLink>1</followSymbolLink>                          <followSymbolLink>1</followSymbolLink>
      <checkSymbolLink>0</checkSymbolLink>                            <checkSymbolLink>0</checkSymbolLink>
      <requiredPermissionMask>000</requiredPermissionMask>            <requiredPermissionMask>000</requiredPermissionMask>
      <restrictedPermissionMask>000</restrictedPermissionMask        <restrictedPermissionMask>000</restrictedPermissionMask
    </fileAccessControl>                                            </fileAccessControl>
    <perClientConnLimit>                                            <perClientConnLimit>
      <staticReqPerSec>0</staticReqPerSec>                            <staticReqPerSec>0</staticReqPerSec>
      <dynReqPerSec>0</dynReqPerSec>                                  <dynReqPerSec>0</dynReqPerSec>
      <outBandwidth>0</outBandwidth>                                  <outBandwidth>0</outBandwidth>
      <inBandwidth>0</inBandwidth>                                    <inBandwidth>0</inBandwidth>
      <softLimit>10000</softLimit>                                    <softLimit>10000</softLimit>
      <hardLimit>10000</hardLimit>                                    <hardLimit>10000</hardLimit>
      <gracePeriod>15</gracePeriod>                                  <gracePeriod>15</gracePeriod>
      <banPeriod>300</banPeriod>                                      <banPeriod>300</banPeriod>
    </perClientConnLimit>                                          </perClientConnLimit>
    <CGIRLimit>                                                    <CGIRLimit>
      <maxCGIInstances>20</maxCGIInstances>                          <maxCGIInstances>20</maxCGIInstances>
      <minUID>11</minUID>                                            <minUID>11</minUID>
      <minGID>10</minGID>                                            <minGID>10</minGID>
      <priority>0</priority>                                          <priority>0</priority>
      <CPUSoftLimit>10</CPUSoftLimit>                                <CPUSoftLimit>10</CPUSoftLimit>
      <CPUHardLimit>50</CPUHardLimit>                                <CPUHardLimit>50</CPUHardLimit>
      <memSoftLimit>460M</memSoftLimit>                              <memSoftLimit>460M</memSoftLimit>
      <memHardLimit>470M</memHardLimit>                              <memHardLimit>470M</memHardLimit>
      <procSoftLimit>400</procSoftLimit>                              <procSoftLimit>400</procSoftLimit>
      <procHardLimit>450</procHardLimit>                              <procHardLimit>450</procHardLimit>
    </CGIRLimit>                                                    </CGIRLimit>
    <accessDenyDir>                                                <accessDenyDir>
      <dir>/</dir>                                                    <dir>/</dir>
      <dir>/etc/*</dir>                                              <dir>/etc/*</dir>
      <dir>/dev/*</dir>                                              <dir>/dev/*</dir>
      <dir>$SERVER_ROOT/conf/*</dir>                                  <dir>$SERVER_ROOT/conf/*</dir>
      <dir>$SERVER_ROOT/admin/conf/*</dir>                            <dir>$SERVER_ROOT/admin/conf/*</dir>
    </accessDenyDir>                                                </accessDenyDir>
    <accessControl>                                                <accessControl>
      <allow>ALL</allow>                                              <allow>ALL</allow>
    </accessControl>                                                </accessControl>
  </security>                                                    </security>
  <extProcessorList>                                              <extProcessorList>
    <extProcessor>                                                  <extProcessor>
      <type>lsapi</type>                                              <type>lsapi</type>
      <name>lsphp5</name>                                            <name>lsphp5</name>
      <address>uds://tmp/lshttpd/lsphp5.sock</address>                <address>uds://tmp/lshttpd/lsphp5.sock</address>
      <maxConns>50</maxConns>                                |      <maxConns>35</maxConns>
      <env>PHP_LSAPI_MAX_REQUESTS=10000</env>                        <env>PHP_LSAPI_MAX_REQUESTS=10000</env>
      <env>PHP_LSAPI_CHILDREN=50</env>                        |      <env>PHP_LSAPI_CHILDREN=35</env>
      <initTimeout>60</initTimeout>                                  <initTimeout>60</initTimeout>
      <retryTimeout>0</retryTimeout>                                  <retryTimeout>0</retryTimeout>
      <persistConn>1</persistConn>                                    <persistConn>1</persistConn>
      <respBuffer>0</respBuffer>                                      <respBuffer>0</respBuffer>
      <autoStart>1</autoStart>                                        <autoStart>1</autoStart>
      <path>$SERVER_ROOT/fcgi-bin/lsphp5</path>                      <path>$SERVER_ROOT/fcgi-bin/lsphp5</path>
      <backlog>100</backlog>                                          <backlog>100</backlog>
      <instances>1</instances>                                        <instances>1</instances>
      <priority>0</priority>                                          <priority>0</priority>
      <memSoftLimit>900M</memSoftLimit>                      |      <memSoftLimit>450M</memSoftLimit>
      <memHardLimit>1000M</memHardLimit>                      |      <memHardLimit>500M</memHardLimit>
      <procSoftLimit>1000</procSoftLimit>                    |      <procSoftLimit>300</procSoftLimit>
      <procHardLimit>1200</procHardLimit>                    |      <procHardLimit>400</procHardLimit>
    </extProcessor>                                                </extProcessor>
  </extProcessorList>                                            </extProcessorList>
  <scriptHandlerList>                                            <scriptHandlerList>
    <scriptHandler>                                                <scriptHandler>
      <suffix>php</suffix>                                            <suffix>php</suffix>
      <type>lsapi</type>                                              <type>lsapi</type>
      <handler>lsphp5</handler>                                      <handler>lsphp5</handler>
    </scriptHandler>                                                </scriptHandler>
  </scriptHandlerList>                                            </scriptHandlerList>
  <railsDefaults>                                                <railsDefaults>
    <railsEnv>1</railsEnv>                                          <railsEnv>1</railsEnv>
    <maxConns>5</maxConns>                                          <maxConns>5</maxConns>
    <env>LSAPI_MAX_REQS=1000</env>                                  <env>LSAPI_MAX_REQS=1000</env>
    <env>LSAPI_MAX_IDLE=60</env>                                    <env>LSAPI_MAX_IDLE=60</env>
    <initTimeout>60</initTimeout>                                  <initTimeout>60</initTimeout>
    <retryTimeout>0</retryTimeout>                                  <retryTimeout>0</retryTimeout>
    <pcKeepAliveTimeout>60</pcKeepAliveTimeout>                    <pcKeepAliveTimeout>60</pcKeepAliveTimeout>
    <respBuffer>0</respBuffer>                                      <respBuffer>0</respBuffer>
    <backlog>50</backlog>                                          <backlog>50</backlog>
    <runOnStartUp>1</runOnStartUp>                                  <runOnStartUp>1</runOnStartUp>
    <extMaxIdleTime>300</extMaxIdleTime>                            <extMaxIdleTime>300</extMaxIdleTime>
    <priority>3</priority>                                          <priority>3</priority>
    <memSoftLimit>550M</memSoftLimit>                              <memSoftLimit>550M</memSoftLimit>
    <memHardLimit>600M</memHardLimit>                              <memHardLimit>600M</memHardLimit>
    <procSoftLimit>1000</procSoftLimit>                      |    <procSoftLimit>300</procSoftLimit>
    <procHardLimit>1200</procHardLimit>                      |    <procHardLimit>400</procHardLimit>
  </railsDefaults>                                                </railsDefaults>
  <virtualHostList>                                              <virtualHostList>
    <virtualHost>                                                  <virtualHost>
      <name>Example</name>                                            <name>Example</name>
      <vhRoot>$SERVER_ROOT/DEFAULT/</vhRoot>                          <vhRoot>$SERVER_ROOT/DEFAULT/</vhRoot>
      <configFile>$VH_ROOT/conf/vhconf.xml</configFile>              <configFile>$VH_ROOT/conf/vhconf.xml</configFile>
      <allowSymbolLink>1</allowSymbolLink>                            <allowSymbolLink>1</allowSymbolLink>
      <enableScript>1</enableScript>                                  <enableScript>1</enableScript>
      <restrained>1</restrained>                                      <restrained>1</restrained>
      <setUIDMode>0</setUIDMode>                                      <setUIDMode>0</setUIDMode>
    </virtualHost>                                                  </virtualHost>
  </virtualHostList>                                              </virtualHostList>
  <listenerList>                                                  <listenerList>
    <listener>                                                      <listener>
      <name>Default</name>                                            <name>Default</name>
      <address>*:8088</address>                                      <address>*:8088</address>
      <secure>0</secure>                                              <secure>0</secure>
      <vhostMapList>                                                  <vhostMapList>
        <vhostMap>                                                      <vhostMap>
          <vhost>Example</vhost>                                          <vhost>Example</vhost>
          <domain>*</domain>                                              <domain>*</domain>
        </vhostMap>                                                    </vhostMap>
      </vhostMapList>                                                </vhostMapList>
    </listener>                                                    </listener>
  </listenerList>                                                </listenerList>
  <vhTemplateList>                                                <vhTemplateList>
    <vhTemplate>                                                    <vhTemplate>
      <name>centralConfigLog</name>                                  <name>centralConfigLog</name>
      <templateFile>$SERVER_ROOT/conf/templates/ccl.xml</temp        <templateFile>$SERVER_ROOT/conf/templates/ccl.xml</temp
      <listeners>Default</listeners>                                  <listeners>Default</listeners>
    </vhTemplate>                                                  </vhTemplate>
    <vhTemplate>                                                    <vhTemplate>
      <name>PHP_SuEXEC</name>                                        <name>PHP_SuEXEC</name>
      <templateFile>$SERVER_ROOT/conf/templates/phpsuexec.xml        <templateFile>$SERVER_ROOT/conf/templates/phpsuexec.xml
      <listeners>Default</listeners>                                  <listeners>Default</listeners>
    </vhTemplate>                                                  </vhTemplate>
    <vhTemplate>                                                    <vhTemplate>
      <name>EasyRailsWithSuEXEC</name>                                <name>EasyRailsWithSuEXEC</name>
      <templateFile>$SERVER_ROOT/conf/templates/rails.xml</te        <templateFile>$SERVER_ROOT/conf/templates/rails.xml</te
      <listeners>Default</listeners>                                  <listeners>Default</listeners>
    </vhTemplate>                                                  </vhTemplate>
  </vhTemplateList>                                              </vhTemplateList>
</httpServerConfig>                                            </httpServerConfig>
-------------------------------------------------------------------
Compare Tweaks vs Default settings
-------------------------------------------------------------------
  <inMemBufSize>120M</inMemBufSize>                          |  <inMemBufSize>60M</inMemBufSize>
  <indexFiles>index.html index.php</indexFiles>              |  <indexFiles>index.html</indexFiles>
    <smartKeepAlive>1</smartKeepAlive>                        |    <smartKeepAlive>0</smartKeepAlive>
    <sndBufSize>65535</sndBufSize>                            |    <sndBufSize>0</sndBufSize>
    <rcvBufSize>65535</rcvBufSize>                            |    <rcvBufSize>0</rcvBufSize>
    <maxCachedFileSize>16384</maxCachedFileSize>              |    <maxCachedFileSize>4096</maxCachedFileSize>
    <totalInMemCacheSize>40M</totalInMemCacheSize>            |    <totalInMemCacheSize>20M</totalInMemCacheSize>
    <maxMMapFileSize>512K</maxMMapFileSize>                  |    <maxMMapFileSize>256K</maxMMapFileSize>
    <totalMMapCacheSize>80M</totalMMapCacheSize>              |    <totalMMapCacheSize>40M</totalMMapCacheSize>
      <maxConns>50</maxConns>                                |      <maxConns>35</maxConns>
      <env>PHP_LSAPI_CHILDREN=50</env>                        |      <env>PHP_LSAPI_CHILDREN=35</env>
      <memSoftLimit>900M</memSoftLimit>                      |      <memSoftLimit>450M</memSoftLimit>
      <memHardLimit>1000M</memHardLimit>                      |      <memHardLimit>500M</memHardLimit>
      <procSoftLimit>1000</procSoftLimit>                    |      <procSoftLimit>300</procSoftLimit>
      <procHardLimit>1200</procHardLimit>                    |      <procHardLimit>400</procHardLimit>
    <procSoftLimit>1000</procSoftLimit>                      |    <procSoftLimit>300</procSoftLimit>
    <procHardLimit>1200</procHardLimit>                      |    <procHardLimit>400</procHardLimit>
-------------------------------------------------------------------
 
Top