Skip to content

Latest commit

 

History

History

219

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Nginx vs Apache Performance (Latency - Throughput - Saturation - Availability | HTTP/2 - TLS - Gzip)

You can find tutorial here.

Apache

## Update VM

export HOST_NAME="apache"

sudo apt update && sudo apt -y upgrade
sudo sed -i "s/ubuntu/$HOST_NAME/" /etc/hostname
sudo sed -i "s/ubuntu/$HOST_NAME/" /etc/hosts
sudo reboot

## Installation
export APACHE_VERION="2.4.62" APR_VERSION="1.7.5" APR_UTIL_VERSION="1.6.3" PCRE_VERSION="10.44" EXPAT_VERSION="2.6.3"

sudo apt -y install build-essential zlib1g-dev libssl-dev libnghttp2-dev

wget https://dlcdn.apache.org/httpd/httpd-${APACHE_VERION}.tar.gz
tar -zxf httpd-${APACHE_VERION}.tar.gz
sudo mv httpd-${APACHE_VERION} /opt/httpd

wget https://dlcdn.apache.org//apr/apr-${APR_VERSION}.tar.gz
tar -zxf apr-${APR_VERSION}.tar.gz
sudo mv apr-${APR_VERSION} /opt/httpd/srclib/apr
sed -i 's|$RM "$cfgfile"|$RM -f "$cfgfile"|g' /opt/httpd/srclib/apr/configure

wget https://dlcdn.apache.org//apr/apr-util-${APR_UTIL_VERSION}.tar.gz
tar -zxf apr-util-${APR_UTIL_VERSION}.tar.gz
sudo mv apr-util-${APR_UTIL_VERSION} /opt/httpd/srclib/apr-util

wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-${PCRE_VERSION}/pcre2-${PCRE_VERSION}.tar.gz
tar -zxf pcre2-${PCRE_VERSION}.tar.gz
cd pcre2-${PCRE_VERSION}
./configure --prefix=/usr/local/pcre
make
sudo make install
cd ..

wget https://github.com/libexpat/libexpat/releases/download/R_2_6_3/expat-${EXPAT_VERSION}.tar.gz
tar -zxf expat-${EXPAT_VERSION}.tar.gz
cd expat-${EXPAT_VERSION}
./configure --prefix=/usr/local/expat
make
sudo make install
cd ..

cd /opt/httpd/
env PCRE_CONFIG=/usr/local/pcre/bin/pcre2-config \
./configure \
--enable-deflate \
--enable-ssl \
--enable-http2 \
--with-included-apr \
--prefix=/usr/local/apache2 \
--with-pcre=/usr/local/pcre \
--with-expat=/usr/local/expat

make
sudo make install

sudo mkdir -p /data /etc/ssl/certs/ /etc/ssl/private/

## Local
export SSH_KEY="~/.ssh/id_ed25519" SSH_USER="aputra" SERVER_IP="192.168.50.38"
scp -r -i ${SSH_KEY} /Users/antonputra/devel/tutorials/lessons/219/my-website/out ${SSH_USER}@${SERVER_IP}:/tmp/
scp -r -i ${SSH_KEY} /Users/antonputra/devel/private-tests/tls/certs/apache-antonputra-pvt-key.pem ${SSH_USER}@${SERVER_IP}:/tmp/
scp -r -i ${SSH_KEY} /Users/antonputra/devel/private-tests/tls/certs/apache-antonputra-pvt.pem ${SSH_USER}@${SERVER_IP}:/tmp/

## Remote
sudo mv /tmp/out/ /data/my-website/
sudo mv /tmp/apache-antonputra-pvt-key.pem /etc/ssl/private/apache-antonputra-pvt-key.pem
sudo mv /tmp/apache-antonputra-pvt.pem /etc/ssl/certs/apache-antonputra-pvt.pem

sudo tee /usr/local/apache2/conf/httpd.conf <<EOF
ServerRoot "/usr/local/apache2"

Listen 80

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule http2_module modules/mod_http2.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule deflate_module modules/mod_deflate.so

<IfModule unixd_module>
User daemon
Group daemon
</IfModule>

ServerAdmin [email protected]

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
</Directory>

DocumentRoot "/usr/local/apache2/htdocs"

<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"
LogLevel warn

<IfModule log_config_module>
    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>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" common
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>

<IfModule cgid_module>
</IfModule>

<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule headers_module>
    RequestHeader unset Proxy early
</IfModule>

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

Include conf/my-website.conf

<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
EOF

sudo tee /usr/local/apache2/conf/my-website.conf <<EOF
<VirtualHost *:80>
    SetOutputFilter DEFLATE
    ServerAdmin [email protected]
    ServerName apache.antonputra.pvt
    DocumentRoot /data/my-website
</VirtualHost>

Listen 443

<VirtualHost *:443>
    SetOutputFilter DEFLATE
    ServerAdmin [email protected]
    ServerName apache.antonputra.pvt
    DocumentRoot /data/my-website

	SSLEngine On

	Protocols h2 http/1.1

    SSLCertificateFile "/etc/ssl/certs/apache-antonputra-pvt.pem"
    SSLCertificateKeyFile "/etc/ssl/private/apache-antonputra-pvt-key.pem"
</VirtualHost>

<VirtualHost *:443>
	ServerName api-apache.antonputra.pvt
	SSLEngine On

	Protocols h2 http/1.1

    SSLCertificateFile "/etc/ssl/certs/apache-antonputra-pvt.pem"
    SSLCertificateKeyFile "/etc/ssl/private/apache-antonputra-pvt-key.pem"

	ProxyPass /api/devices balancer://myapp/api/devices

	<Proxy balancer://myapp>
		BalancerMember http://myapp-apache-0.antonputra.pvt:8080
        BalancerMember http://myapp-apache-1.antonputra.pvt:8080
	</Proxy>
</VirtualHost>
EOF

sudo /usr/local/apache2/bin/apachectl -k restart


## Tail access logs
tail -f /usr/local/apache2/logs/access_log