Can I run two "instances" of apache httpd?

Georgios Petasis petasisg at yahoo.gr
Fri Aug 9 19:22:17 UTC 2013


Στις 9/8/2013 18:31, ο/η Reindl Harald έγραψε:
>
> Am 09.08.2013 16:12, schrieb Zdenek Pytela:
>> Georgios Petasis pise:
>>> In my apache configuration, I am using a scripting language (tcl
>>> through apache rivet) which implements a "heavy" application,
>>> something that takes some minutes to start when apache starts a new
>>> process.
>>>
>>> Is there a way to "separate" these "heavy" apache processes from the
>>> rest of the apache?
>>>
>>> I.e. when the url is "/my_heavy_service" redirect the request to the
>>> apache which has the "heavy" application loaded, and the rest of the
>>> requests be handled by an apache with does not even has mod_rivet
>>> loaded?
>>>
>>> Like starting an apache on a different port (i.e. 8123), which loads
>>> my application, and starting a "normal" apache on port 80, which
>>> serves all requests except some, which are directed to the server in
>>> port 8123.
>>>
>>> In general I think it can be done (i.e.:
>>> http://wiki.apache.org/httpd/RunningMultipleApacheInstances),
>>> but is a way to do this in fedora 19, and keep all this "systemctl *
>>> httpd" stuff?
>>>
>>> Has anyone attempted this?
>> Yes. You just have multiple Listen lines in your config file and
>> then you have to restart the httpd.service
> and how does this magically have a own, isolated httpd-instance
> without "mod_rivet" whcih was the question
>
> well i posted a answer with complete examples short
> after the question but with this idiotic moderation
> it is worthless
>
I think I have received your answer. After a few hours of looking into 
this, I have automated it (for my case) in the following bash script:

# Steps to create a second running instance of httpd...

# 1) Create the needed script for systemctrl...
/usr/bin/cp -f /usr/lib/systemd/system/httpd.service \
       /usr/lib/systemd/system/httpd-palo.service
sed -i 
"s/EnvironmentFile=\/etc\/sysconfig\/httpd/EnvironmentFile=\/etc\/sysconfig\/httpd-palo/g" 
/usr/lib/systemd/system/httpd-palo.service


# 2) Prepare the environment file...
/usr/bin/cp -f /etc/sysconfig/httpd /etc/sysconfig/httpd-palo

# 3) Append our options...
echo "OPTIONS= -DPaloServices -f conf/httpd-palo.conf" >> 
/etc/sysconfig/httpd-palo

# 4) Copy http.conf...
/usr/bin/cp -f /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd-palo.conf
sed -i "s/Listen 80/PidFile \/run\/httpd-palo\/httpd.pid\\nListen 81/g" 
/etc/httpd/conf/httpd-palo.conf
sed -i 's/logs\/error_log/logs\/palo_error_log/g' 
/etc/httpd/conf/httpd-palo.conf
sed -i 's/conf\.d/palo_conf.d/g' /etc/httpd/conf/httpd-palo.conf

# 5) Create palo_conf.d...
mkdir -p /run/httpd-palo
rm -rf /etc/httpd/palo_conf.d
mkdir -p /etc/httpd/palo_conf.d
ln -s /etc/httpd/conf.d/my_palo.conf /etc/httpd/palo_conf.d/my_palo.conf
ln -s /etc/httpd/conf.d/my_rivet.conf /etc/httpd/palo_conf.d/my_rivet.conf
#ln -s /etc/httpd/conf.d/ssl.conf /etc/httpd/palo_conf.d/ssl.conf
chcon -R -u system_u -r object_r -t httpd_config_t 
/etc/httpd/palo_conf.d /etc/httpd/conf.d

systemctl --system daemon-reload

systemctl enable  httpd-palo.service
systemctl enable  httpd.service
systemctl restart httpd-palo.service
systemctl restart httpd.service

What it actually does is to copy everything from the httpd 
configuration, into a new one, named httpd-palo.
Which runs in port 81, and has its own config directory, in 
/etc/httpd/palo_conf.d. There, I create symbolic links from conf files 
in /etc/httpd/conf.d.

One of the configuration files is "special" (my_palo.conf), as it has 
two branches, according to whether the name "PaloServices" is defined:

<IfDefine PaloServices>
Alias /palo/appservices  /home/palo/opinionBuster/webapps_services
Alias /palo/app          /home/palo/opinionBuster/webapps
Alias /palo              /home/palo/opinionBuster/services
....
</ifDefine>

<IfDefine !PaloServices>
LoadModule proxy_module      modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyRequests Off
SSLProxyEngine on
ProxyPass        /palo http://localhost:81/palo
ProxyPassReverse /palo http://localhost:81/palo
</IfDefine>

I am ok with my solution, I now have two independent httpd server 
instances :-)

George


More information about the users mailing list