Unable to run parallel apache httpd instances - apache

I have created 2 conf files httpd.conf and httpd1.conf in my apache server. In order to run two instances of it.
When I try to start both apache instance
httpd -f /etc/httpd/conf/httpd1.conf -k start and
httpd -f /etc/httpd/conf/httpd.conf -k start only one instance starts. I am able to run either first instance or second. But unable to run them parallel.
The error I am getting httpd (pid 51415) already running.
Where as a server should not have any problem in running multiple instance of any application.

Ok, I found problem. Every httpd service instance stores value of process id in separate file. Inorder to run every instance a new process id needs to generated. The location for process id file is defined in httpd.conf

Related

How to make changes to httpd.conf of apache running inside DOCKER container and restart apache

I am new to docker. In our docker environment - Apache has been installed and it is up and running.
Now I need to get into the container, modify the httpd.conf, save it and then I need to restart the apache.
Can you guys please let me know, what needs to be done.
I am pretty much confused about -
'exec' and 'attach' commands.
No need to attach or exec (which is really a debug feature anyway)
You can use docker cp to copy a local version of your httpd.conf to the container. (That way, you can modify the file from the comfort of your local environment)
docker cp httpd.conf <yourcontainer_name>:/path/to/httpd.conf
Once that is done, you can send an USR1 signal to ask for a graceful restart (see docker kill syntax):
docker kill --signal="USR1" <yourcontainer_name>
Replace <yourcontainer_name> by the container id or name which is running Apache.
That will only work if the main process launched by your container is
CMD ["apachectl", "-DFOREGROUND"]
See more at "Docker: How to restart a service running in Docker Container"
To update Apache configs you need to:
Replace Apache configs.
If you have config folder mapped from outside of container you should update configs outside of container.
If your apache configs are stored inside of container, you will need to run something like this:
docker cp httpd.conf YOUR_CONTAINER_NAME:/path/to/httpd.conf
Do Graceful Apache restart:
sudo docker exec -it YOUR_CONTAINER_NAME apachectl graceful
Enter a container by opening a bash shell:
docker exec -it containerName bash
I guess you better just reload apache config and not reboot apache.
But I wouldn't go this route and just modify Dockerfile and rebuild and rerun the image.
edit for link: https://docs.docker.com/engine/reference/commandline/exec/

How to switch between two Apache installations?

Some time ago I installed Apache 2.2.29 with this manual:
https://echo.co/blog/os-x-1010-yosemite-local-development-environment-apache-php-and-mysql-homebrew
into this directory:
/usr/local/Cellar/httpd22/2.2.29/bin/httpd
Yesterday I installed Apache 2.4.17 with this manual:
https://www.youtube.com/watch?v=hV52Vs4E1xs
into this directory:
/usr/local/apache2/bin/httpd
Terminal command
which httpd
shows me this:
Server version: Apache/2.2.29 (Unix)
is there any way to switch to 2.4.17?
(I'm on OS X 10.10.5)
Yes of course. Just specify the absolute path.
For example to stop Apache 2.2.9 use the following command:
/usr/local/Cellar/httpd22/2.2.29/bin/apachectl -k stop
Give it a few seconds or use 'ps' to check its finished shutting down and then use the following to start up the 2.4.17 instance:
/usr/local/apache2/bin/apachectl -k start
Note when you machine restarts it my revert to the old version depending what's in its start up scripts.
Also any config will be specific to each installation so you might find they don't point to the same DocumentRoot so don't display the same website.
You cannot run both under port 80 at the same time. However you could run one under port 80 and one under another port of you wanted both running at exactly the same time.

Failed to get D-Bus connection - httpd service in Docker container

I am creating a Dockerfile for PostgreSQL with CentOS7 as the base image. I am trying to start httpd service with the following command in the container,
service httpd start
and i get the following error:
Redirecting to /bin/systemctl start httpd.service
Failed to get D-Bus connection: No connection to service manager.
The log file directory /var/log/httpd is also empty. I guess this is the problem with Docker CentOS7 image. Any help appreciated.
I have run into this a well.
It might not be the best way, but you can find a copy of the /etc/init.d/httpd file from another computer. copy that into the container in /etc/init.d
then run
chkconfig --level 345 httpd on
then you will be able to use either
/etc/init.d/httpd start or service httpd start

How to install two Apache services

I would like two install two different apache2.2 services on a Windows machine. I already have one installed and running on ports 80 and 443. I copied the server installation directory and pasted it some where else. I went into httpd.conf and changed it from Listen 80 to Listen 8000. I also changed the Listen 443 to Listen 8001.
I can install it as a service, but it says there is an error in httpd.conf.
When I try to start the service it says:
make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down
Nowhere in the config file does it say to listen to port 80.
What could cause this?
EDIT
I found that if I changed the config file in the original Apache installation that I copied, it would change the error message.
For example I changed the original config files to listen on ports not in use and the error messages, when I try to start the new Apache service, would go away. However, in task manager it did not show the Service as running but as STOPPED.
I uninstalled the service and re-installed it using the -f flag to point to the correct config file and nothing changed. It seems there must be internal pointers or something that are kept when I copied it?
I also tried installing Apache from a .msi installer and it wont install because I already have an apache installation.
SECOND EDIT
Wish I would have seen this earlier. According to Using Apache HTTP Server on Microsoft Windows I may need to build Apache from source.
Note that you cannot install two versions of Apache 2.3 on the same computer with the binary installer. You can, however, install a version of the 1.3 series and a version of the 2.3 series on the same computer without problems. If you need to have two different 2.3 versions on the same computer, you have to compile and install Apache from the source.
I have never done something like this could some one perhaps explain this a little more clearly?
The solution was going into the original Apache install directory and running:
C:\original-apache-install\bin> httpd -k install -n "new service name" -f "new/config/file/location"
Just copying the installation and pasting somewhere else kept ties to the original config file and did not let me change what it pointed to. When I ran the above command in the new install directory it did not work. Example:
C:\new-pasted-apache\bin> httpd -k install -n "new service name" -f "new/config/file/location"
I successfully installed two different 2.4.x versions of apache by installing both services separately with the command that was already mentioned:
C:\Apache2.4.23> httpd -k install -n "Apache2.4.23" -f "C:/Apache2.4.23/conf/httpd.conf"
C:\Apache2.4.12\bin> httpd -k install -n "Apache2.4.12" -f "C:/Apache2.4.12/conf/httpd.conf"
When i checked both services in the "Services" interfaces of windows i noticed that the seconds service had the same executable path as the first installed service. I fixed that by editing the service via regedit (since the sc command did not accept the parameter "-k runservice" that is appended to the executable path):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
See: https://superuser.com/questions/222238/how-to-change-path-to-executable-for-a-windows-service/252850#252850

how to get the env variables set inside an apache server process

i am using an apache server.
Actually i have written a few modules which run when the apache service is started with
apachectl.
I have set certain env variables in envvars at
/usr/local/apache2/bin/envvars
Now i start the httpd process with
/usr/local/apache2/bin/apachectl -k start.
Now this apache process will initiate another child apache process.
I would like to know the enviroment variables set in both these processes? How can i see that?
ok sorry, i found it.
cat /proc//environ