You can't have two VirtualHost definitions for the same port number unless they 
have ServerName set for each to a different hostname. Even then, you can't 
access them by IP and have them distinguished, you would need to use the 
respective hostnames.

So if you are going to use an IP address only, have one VirtualHost only and 
use inside of that for mod_wsgi:

WSGIDaemonProcess app_qa processes=1 display-name=%{GROUP} 
python-path=/opt/app/app_qa/app
WSGIScriptAlias /app_qa /opt/app/app_qa/app/wsgi.py  process-group=app_qa 
application-group=%{GLOBAL}

WSGIDaemonProcess app_prod processes=1 display-name=%{GROUP} 
python-path=/opt/app/app_prod/app
WSGIScriptAlias /app_prod /opt/app/app_prod/app/wsgi.py  process-group=app_prod 
application-group=%{GLOBAL}

Add your other stuff for Alias etc as well for each.

> On 19 Mar 2020, at 11:42 am, Guddu <[email protected]> wrote:
> 
> Dear Graham, Thanks for your response.
> 
> I removed socket-user=app_user and now I see a different behaviour. One of 
> the app work while the other does not. Both are exactly identical one is 
> meant for QA and other for PROD and the QA URL works while for the PROD URL 
> it shows an error 
> 
> Not Found The requested URL /app_prod was not found on this server.
> 
> The   QA    URL is http://<ip>:8999/app_qa
> The PROD URL is http://<ip>:8999/app_prod
> 
> The initial reason why I had to move to daemon mode is to be able to set a 
> python-path for both of them separately as WSGIPythonPath cannot be used 
> inside <VirtualHost>
> 
> This is my httpd.conf setting.
> 
> WSGISocketPrefix /run/httpd/wsgi/
> <VirtualHost *:8999>
> WSGIDaemonProcess app_qa processes=1 display-name=%{GROUP} 
> python-path=/opt/app/app_qa/app
> WSGIProcessGroup app_qa
> WSGIScriptAlias /app_qa /opt/app/app_qa/app/wsgi.py  process-group=app_qa
> Alias /static_app_qa /opt/app/app_qa/staticfiles
> 
> <Directory /opt/app/app_qa/app/>
>         <Files wsgi.py>
>                 Require all granted
>         </Files>
> </Directory>
> 
> <Directory /opt/app/app_qa/staticfiles/>
>         Require all granted
> </Directory>
> </VirtualHost>
> 
> <VirtualHost *:8999>
> WSGIDaemonProcess app_prod processes=1 display-name=%{GROUP} 
> python-path=/opt/app/app_prod/app
> WSGIProcessGroup app_prod
> WSGIScriptAlias /app_prod /opt/app/app_prod/app/wsgi.py  
> process-group=app_prod
> Alias /static_app_prod /opt/app/app_prod/staticfiles
> 
> <Directory /opt/app/app_prod/app/>
>         <Files wsgi.py>
>                 Require all granted
>         </Files>
> </Directory>
> 
> <Directory /opt/app/app_prod/staticfiles/>
>         Require all granted
> </Directory>
> </VirtualHost>
> 
> The netstat output is as follows indicating that the socket files were 
> created in the desired folder. The permission on files and directories also 
> follows
> 
> [root@server app]# netstat -an | grep http
> unix  2      [ ACC ]     STREAM     LISTENING     1107556  
> /run/httpd/wsgi/.13750.0.1.sock
> unix  2      [ ACC ]     STREAM     LISTENING     1107558  
> /run/httpd/wsgi/.13750.0.2.sock
> 
> [root@server app]# ls -ltr /run/httpd/wsgi/.13750.0.1.sock 
> /run/httpd/wsgi/.13750.0.2.sock
> srwx------ 1 app_user root 0 Mar 18 19:29 /run/httpd/wsgi/.13750.0.2.sock
> srwx------ 1 app_user root 0 Mar 18 19:29 /run/httpd/wsgi/.13750.0.1.sock
> 
> [root@server app]# ls -ltr /run/httpd/
> total 8
> drwx------ 2 apache  apache  40 Mar 10 13:50 htcacheclean
> -rw-r--r-- 1 root    root     8 Mar 18 19:29 authdigest_shm.13750
> -rw-r--r-- 1 root    root     6 Mar 18 19:29 httpd.pid
> drwxr-xr-x 2 app_user app_user 80 Mar 18 19:29 wsgi
> 
> [root@server app]# ls -ltr /run | tail -2
> -rw-rw-r--  1 root     utmp     3072 Mar 18 19:11 utmp
> drwx--x---  4 root     apache    120 Mar 18 19:29 httpd
> 
> 
> 
> Also the ps -ef | grep httpd output is
> 
> 
> root     13750     1  0 19:29 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
> app_user  13753 13750  0 19:29 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
> app_user  13754 13750  0 19:29 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
> app_user  13755 13750  0 19:29 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
> app_user  13756 13750  0 19:29 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
> app_user  13757 13750  0 19:29 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
> 
> 
> I am a bit confused as everything seems alright.
> 
> Appreciate your help
> 
> 
> On Wednesday, 18 March 2020 18:57:26 UTC-3, Graham Dumpleton wrote:
> Why are you setting 'socket-user'?
> 
> That is only required when using Apache PrivilegesMode as SECURE, or using 
> certain Apache MPMs.
> 
> What happens when you don't use that?
> 
> I want to see the original error messages and permissions on both the socket 
> files, and the directory the sockets are in, before changing any 
> configuration from what one would normally use.
> 
> Graham
> 
>> On 19 Mar 2020, at 2:10 am, Guddu <anurag....@ <>gmail.com 
>> <http://gmail.com/>> wrote:
>> 
>> After configuring daemon mode, I started getting a 503 Server Unavailable 
>> error.
>> 
>> There are lot of posts on stackoverflow and a dedicate section in the 
>> troubleshooting page at 
>> https://modwsgi.readthedocs.io/en/develop/user-guides/frequently-asked-questions.html
>>  
>> <https://modwsgi.readthedocs.io/en/develop/user-guides/frequently-asked-questions.html>
>>  and 
>> https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-issues.html
>>  
>> <https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-issues.html>
>>  but none of the suggestions seem to be helping me at the moment. Appreciate 
>> your guidance.
>> 
>> The error logs have the following
>> 
>> [Wed Mar 18 09:30:17.649428 2020] [wsgi:error] [pid 14044] (13)Permission 
>> denied: [client 10.52.7.18:2505] mod_wsgi (pid=14044): Unable to connect to 
>> WSGI daemon process 'app_qa' on '/run/httpd/wsgi/.14039.0.1.sock' as user 
>> with uid=1001.
>> 
>> 
>> 
>> 
>> The directory in question has read and write permission to app_user
>> 
>> The httpd processes start fine. Below is the ps output
>> 
>> root     14197     1  0 09:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
>> app_user  14202 14197  0 09:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
>> app_user  14203 14197  0 09:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
>> app_user  14204 14197  0 09:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
>> app_user  14205 14197  0 09:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
>> app_user  14206 14197  0 09:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
>> 
>> 
>>   
>> The socket flies get written
>>   
>> [root@server wsgi]# ls -ltra
>> total 0
>> srwx------ 1 app_user root      0 Mar 18 09:30 .14197.0.1.sock
>> srwx------ 1 app_user root      0 Mar 18 09:30 .14197.0.2.sock
>> 
>> 
>> 
>> 
>> My apache build info is as follows
>> 
>> [app_user@server app_qa]$ httpd -V
>> AH00558: httpd: Could not reliably determine the server's fully qualified 
>> domain name, using 10.21.2.136. Set the 'ServerName' directive globally to 
>> suppress this message
>> Server version: Apache/2.4.6 (Red Hat Enterprise Linux)
>> Server built:   Jun  9 2019 13:01:04
>> Server's Module Magic Number: 20120211:24
>> Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
>> Compiled using: APR 1.4.8, APR-UTIL 1.5.2
>> Architecture:   64-bit
>> Server MPM:     prefork
>>   threaded:     no
>>     forked:     yes (variable process count)
>> Server compiled with....
>>  -D APR_HAS_SENDFILE
>>  -D APR_HAS_MMAP
>>  -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
>>  -D APR_USE_SYSVSEM_SERIALIZE
>>  -D APR_USE_PTHREAD_SERIALIZE
>>  -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
>>  -D APR_HAS_OTHER_CHILD
>>  -D AP_HAVE_RELIABLE_PIPED_LOGS
>>  -D DYNAMIC_MODULE_LIMIT=256
>>  -D HTTPD_ROOT="/etc/httpd"
>>  -D SUEXEC_BIN="/usr/sbin/suexec"
>>  -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
>>  -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
>>  -D DEFAULT_ERRORLOG="logs/error_log"
>>  -D AP_TYPES_CONFIG_FILE="conf/mime.types"
>>  -D SERVER_CONFIG_FILE="conf/httpd.conf"
>> 
>>  [app_user@server app_qa]$ httpd -l
>> Compiled in modules:
>>   core.c
>>   mod_so.c
>>   http_core.c
>> 
>> 
>> 
>> 
>> My httpd conf is as follows
>>   
>> WSGISocketPrefix /run/httpd/wsgi/
>> <VirtualHost *:8999>
>> WSGIDaemonProcess app_qa processes=2 display-name=%{GROUP} 
>> python-path=/opt/app/app_qa  socket-user=app_user
>> WSGIProcessGroup app_qa
>> WSGIScriptAlias /app_qa /opt/app/app_qa/app/wsgi.py  process-group=app_qa
>> Alias /static_app_qa /opt/app/app_qa/staticfiles
>> 
>> <Directory /opt/app/app_qa/app/>
>>         <Files wsgi.py>
>>                 Require all granted
>>         </Files>
>> </Directory>
>> 
>> <Directory /opt/app/app_qa/staticfiles/>
>>         Require all granted
>> </Directory>
>> </VirtualHost>
>> 
>> 
>> Appreciate your help on this matter.
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "modwsgi" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to mod...@ <>googlegroups.com <http://googlegroups.com/>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/modwsgi/82ab46fe-adc1-42fd-90ad-abaf05f58613%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/modwsgi/82ab46fe-adc1-42fd-90ad-abaf05f58613%40googlegroups.com?utm_medium=email&utm_source=footer>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "modwsgi" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/modwsgi/21647165-18ba-4f06-92d0-b224f06e8311%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/modwsgi/21647165-18ba-4f06-92d0-b224f06e8311%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/modwsgi/EE1E7A7B-4045-4B31-8917-D7A4A032D96B%40gmail.com.

Reply via email to