What version of mod_wsgi are you using now?

What are User/Group directives in Apache configuration set to?

Some versions of mod_wsgi can have an issue in daemon mode when the user Apache 
runs as has no actual home directory. I thought there would have been a clear 
error message in the logs.

Am sure that more recent mod_wsgi versions are meant to deal with this 
properly. Is possible if you are using an old mod_wsgi version, that Linux 
distros have back ported a change which has caused this problem for normal case 
because they didn’t bother to pickup later fix to make it more forgiving.

Graham


> On 9 Dec 2015, at 5:26 PM, Arjan van Eersel <[email protected]> 
> wrote:
> 
> I have been able to solve the issue, by changing the apache virtual conf to 
> this:
> 
> WSGIDaemonProcess aldeimbg.org user=aldeimbg group=aldeimbg threads=25 
> python-path=/home/aldeimbg/python:/home/aldeimbg/env/lib/python2.7/site-packages
> WSGIProcessGroup aldeimbg.org
> WSGIScriptAlias / /home/aldeimbg/python/BalkanCMS/wsgi.py
> WSGIPassAuthorization On
> 
> <Directory /home/aldeimbg/python/BalkanCMS>
> Order deny,allow
> Allow from all
> </Directory>
> 
> Alias /static  /home/aldeimbg/python/BalkanCMS/static
> <Directory /home/aldeimbg/python/BalkanCMS/static>
> Order deny,allow
> Allow from all
> </Directory>
> 
> Alias /media  /home/aldeimbg/python/UserContent/media
> <Directory /home/aldeimbg/python/UserContent/media>
> Order deny,allow
> Allow from all
> </Directory>
> 
> I came to this insight thanks to the info on this page: 
> https://code.google.com/p/modwsgi/wiki/IntegrationWithDjango.
> 
> The difference with the old apache configuration is the addition of these 
> arguments to the WSGIDaemonProcess definition: user=aldeimbg group=aldeimbg 
> threads=25. When I remove them and try again, the error 500 appears again, so 
> obviously I'm obliged to explicitly define the user, group and threads.
> 
> Graham, I'd like to thank you very much for your help, which was extremely 
> useful to find out where to start searching for a solution regarding this 
> problem.
> 
> Arjan
> 
> On Monday, November 30, 2015 at 1:32:22 AM UTC+2, Graham Dumpleton wrote:
> That log output doesn’t even show mod_wsgi attempting to load the WSGI script 
> file. So if that corresponds to the time of the request, then the error is 
> happening before mod_wsgi gets a chance to do anything.
> 
> Now you said you tried a WSGI hello world. Was that with a separate 
> VirtualHost configuration, or did you simply swap the contents of the Django 
> WSGI script file with a hello world?
> 
> If the issue is with the Apache configuration, then swapping the Django WSGI 
> script file with a WSGI hello world should fail as well.
> 
> Graham
> 
>> On 28 Nov 2015, at 10:23 PM, Arjan van Eersel <[email protected] 
>> <javascript:>> wrote:
>> 
>> Now I do get some response:
>> [Sat Nov 28 13:19:21 2015] [info] mod_wsgi (pid=21273): Shutdown requested 
>> 'aldeimbg.org <http://aldeimbg.org/>'.
>> [Sat Nov 28 13:19:21 2015] [info] mod_wsgi (pid=21273): Stopping process 
>> 'aldeimbg.org <http://aldeimbg.org/>'.
>> [Sat Nov 28 13:19:21 2015] [info] mod_wsgi (pid=21273): Destroying 
>> interpreters.
>> [Sat Nov 28 13:19:21 2015] [info] mod_wsgi (pid=21273): Cleanup interpreter 
>> ''.
>> [Sat Nov 28 13:19:21 2015] [info] mod_wsgi (pid=21273): Terminating Python.
>> [Sat Nov 28 13:19:21 2015] [info] mod_wsgi (pid=21273): Python has shutdown.
>> [Sat Nov 28 11:19:24 2015] [info] mod_wsgi (pid=700): Attach interpreter ''.
>> [Sat Nov 28 11:19:24 2015] [info] mod_wsgi (pid=700): Adding 
>> '/home/aldeimbg/env/lib/python2.7/site-packages' to path.
>> [Sat Nov 28 11:21:23 2015] [debug] mod_deflate.c(700): [client 195.230.7.52] 
>> Zlib: Compressed 538 to 325 : URL /
>> [Sat Nov 28 11:21:23 2015] [debug] mod_deflate.c(700): [client 195.230.7.52] 
>> Zlib: Compressed 538 to 325 : URL /favicon.ico, referer: 
>> http://www.aldeimbg.org/ <http://www.aldeimbg.org/>
>> 
>> On Sat, Nov 28, 2015 at 6:17 AM, Graham Dumpleton <[email protected] 
>> <javascript:>> wrote:
>> Ensure LogLevel in Apache configuration, at global as well as virtual host 
>> scope, is ‘info’ and not ‘warn’.
>> 
>> Then capture any extra messages from mod_wsgi around time of request. If 
>> mod_wsgi isn’t logging anything then it isn’t even getting to mod_wsgi.
>> 
>> Graham
>> 
>>> On 27 Nov 2015, at 4:10 PM, Arjan van Eersel <[email protected] 
>>> <javascript:>> wrote:
>>> 
>>> Nothing seems to happen, no output appears in the apache logs, but I might 
>>> be applying the middleware in a wrong way. 
>>> Here is my wsgi.py file:
>>> 
>>> """
>>> WSGI config for BalkanCMS project.
>>> 
>>> It exposes the WSGI callable as a module-level variable named 
>>> ``application``.
>>> 
>>> For more information on this file, see
>>> https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/ 
>>> <https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/>
>>> """
>>> 
>>> import os
>>> import sys
>>> 
>>> sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 
>>> "../../")))
>>> sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 
>>> "../")))
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BalkanCMS.settings")
>>> 
>>> from django.core.wsgi import get_wsgi_application
>>> application = get_wsgi_application()
>>> 
>>> # Logging WSGI middleware.
>>> 
>>> import pprint
>>> 
>>> class LoggingMiddleware:
>>>      def __init__(self, application):
>>>         self.__application = application
>>> 
>>>     def __call__(self, environ, start_response):
>>>         errors = environ['wsgi.errors']
>>>         pprint.pprint(('REQUEST', environ), stream=errors)
>>> 
>>>         def _start_response(status, headers, *args):
>>>             pprint.pprint(('RESPONSE', status, headers), stream=errors)
>>>             return start_response(status, headers, *args)
>>> 
>>>         return self.__application(environ, _start_response)
>>> 
>>> application = LoggingMiddleware(application)
>>> 
>>> On Thursday, November 26, 2015 at 1:53:37 PM UTC+2, Graham Dumpleton wrote:
>>> Lets now confirm that the 500 is coming from Django or whether is from 
>>> Apache.
>>> 
>>> Use a WSGI middleware wrapper described in:
>>> 
>>> https://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Tracking_Request_and_Response
>>>  
>>> <https://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Tracking_Request_and_Response>
>>> 
>>> to capture the request and response.
>>> 
>>> Is the application actually returning a 500, or perhaps instead returning a 
>>> different error code.
>>> 
>>> There are cases where for a non 200 error code other than 500 that Apache 
>>> can try and map it to an ErrorDocument but if that is mapping back into the 
>>> application and also has an error, Apache will fall back to generating a 
>>> 500 response.
>>> 
>>> So lets just make sure we know what is going in and out of the application 
>>> and that it looks like what is expected.
>>> 
>>> Also check what gets logged in the Apache access log at the same time.
>>> 
>>> Am sleeping now, so will see what you find in the morning.
>>> 
>>> Graham
>>> 
>>>> On 26 Nov 2015, at 10:40 PM, Arjan van Eersel <balkantec...@ <>gmail.com 
>>>> <http://gmail.com/>> wrote:
>>>> 
>>>> Debug mode is enabled, still get only the error 500.
>>>> 
>>>> Is there a way to get or log those exception details? These details should 
>>>> put me on the right track to solve the issue. 
>>>> 
>>>> Arjan
>>>> 
>>>> On Thursday, November 26, 2015 at 1:30:09 PM UTC+2, Graham Dumpleton wrote:
>>>> As first step, enable DEBUG mode in Django settings module to see if that 
>>>> fixes the issue or at least causes a description of the error in the 
>>>> browser.
>>>> 
>>>> It is quite common to get a 500 error response delivered back from Django 
>>>> with no record of the exception being logged. This is because Django 
>>>> doesn’t log exception details by default.
>>>> 
>>>> Graham
>>>> 
>>>>> On 26 Nov 2015, at 9:34 PM, Arjan van Eersel <balkantec...@ <>gmail.com 
>>>>> <http://gmail.com/>> wrote:
>>>>> 
>>>>> I'm trying to deploy a Django site through apache 2 as a wsgi daemon. Yet 
>>>>> I keep getting an error 500 message, but no message in the apache logs at 
>>>>> all. How can I get more information on what causes this error?
>>>>> 
>>>>> I also made a quick helloworld wsgi app to test, here everything goes 
>>>>> fine, so the problem seems to be related to the django app. The server 
>>>>> uses virtualmin for management of the virtual host. And I've searched 
>>>>> (and found) many related issues on the internet, still whatever I try I 
>>>>> can't fix this problem. The irony is that I can run other instances of 
>>>>> the same app without any problems on the same server. There are 3 other 
>>>>> sites running on exactly the same app on the same server.
>>>>> 
>>>>> Virtual host settings:
>>>>> SuexecUserGroup "#1237" "#1136"
>>>>> ServerName aldeimbg.org <http://aldeimbg.org/>
>>>>> ServerAlias www.aldeimbg.org <http://www.aldeimbg.org/>
>>>>> ServerAlias webmail.aldeimbg.org <http://webmail.aldeimbg.org/>
>>>>> ServerAlias admin.aldeimbg.org <http://admin.aldeimbg.org/>
>>>>> ServerAlias autoconfig.aldeimbg.org <http://autoconfig.aldeimbg.org/>
>>>>> 
>>>>> #LogLevel debug
>>>>> 
>>>>> Alias /static  /home/aldeimbg/python/BalkanCMS/static
>>>>> <Directory /home/aldeimbg/python/BalkanCMS/static>
>>>>>    Order deny,allow
>>>>>    Allow from all
>>>>> </Directory>
>>>>> 
>>>>> Alias /media  /home/aldeimbg/python/UserContent/media
>>>>> <Directory /home/aldeimbg/python/UserContent/media>
>>>>>    Order deny,allow
>>>>>    Allow from all
>>>>> </Directory>
>>>>> 
>>>>> WSGIDaemonProcess aldeimbg.org <http://aldeimbg.org/> 
>>>>> python-path=/home/aldeimbg/env/lib/python2.7/site-packages
>>>>> WSGIProcessGroup aldeimbg.org <http://aldeimbg.org/>
>>>>> WSGIApplicationGroup %{GLOBAL}
>>>>> WSGIScriptAlias / /home/aldeimbg/python/BalkanCMS/wsgi.py
>>>>> WSGIPassAuthorization On
>>>>> 
>>>>> <Directory /home/aldeimbg/python/BalkanCMS>
>>>>>    #Require all granted
>>>>>    Order allow,deny
>>>>>    Allow from all 
>>>>> </Directory>
>>>>> 
>>>>> ErrorLog /var/log/virtualmin/aldeimbg.org <http://aldeimbg.org/>_error_log
>>>>> CustomLog /var/log/virtualmin/aldeimbg.org 
>>>>> <http://aldeimbg.org/>_access_log combined
>>>>> ScriptAlias /cgi-bin/ /home/aldeimbg/cgi-bin/
>>>>> ScriptAlias /awstats/ /home/aldeimbg/cgi-bin/
>>>>> ScriptAlias /AutoDiscover/AutoDiscover.xml 
>>>>> /home/aldeimbg/cgi-bin/autoconfig.cgi
>>>>> ScriptAlias /Autodiscover/Autodiscover.xml 
>>>>> /home/aldeimbg/cgi-bin/autoconfig.cgi
>>>>> ScriptAlias /autodiscover/autodiscover.xml 
>>>>> /home/aldeimbg/cgi-bin/autoconfig.cgi
>>>>> 
>>>>> <Directory /home/aldeimbg/cgi-bin>
>>>>> allow from all
>>>>> AllowOverride All 
>>>>> Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
>>>>> </Directory>
>>>>> RewriteEngine on
>>>>> RewriteCond %{HTTP_HOST} =webmail.aldeimbg.org 
>>>>> <http://webmail.aldeimbg.org/>
>>>>> RewriteRule ^(.*) https://aldeimbg.org:20000/ 
>>>>> <https://aldeimbg.org:20000/> [R]
>>>>> RewriteCond %{HTTP_HOST} =admin.aldeimbg.org <http://admin.aldeimbg.org/>
>>>>> RewriteRule ^(.*) https://aldeimbg.org:10000/ 
>>>>> <https://aldeimbg.org:10000/> [R]
>>>>> RemoveHandler .php
>>>>> RemoveHandler .php5
>>>>> php_admin_value engine Off
>>>>> IPCCommTimeout 31
>>>>> FcgidMaxRequestLen 1073741824
>>>>> <Files awstats.pl <http://awstats.pl/>>
>>>>> AuthName "aldeimbg.org <http://aldeimbg.org/> statistics"
>>>>> AuthType Basic
>>>>> AuthUserFile /home/aldeimbg/.awstats-htpasswd
>>>>> require valid-user
>>>>> </Files>
>>>>> Alias /dav /home/aldeimbg/public_html
>>>>> Alias /pipermail /var/lib/mailman/archives/public
>>>>> <Location /dav>
>>>>> DAV on
>>>>> AuthType Basic
>>>>> AuthName "aldeimbg.org <http://aldeimbg.org/>"
>>>>> AuthUserFile /home/aldeimbg/etc/dav.digest.passwd
>>>>> Require valid-user
>>>>> ForceType text/plain
>>>>> Satisfy All
>>>>> RemoveHandler .php
>>>>> RemoveHandler .php5
>>>>> RewriteEngine off
>>>>> </Location>
>>>>> RedirectMatch /cgi-bin/mailman/([^/\.]*)(.cgi)?(.*) 
>>>>> https://aldeimbg.org:10000/virtualmin-mailman/unauthenticated/$1.cgi$3 
>>>>> <https://aldeimbg.org:10000/virtualmin-mailman/unauthenticated/$1.cgi$3>
>>>>> RedirectMatch /mailman/([^/\.]*)(.cgi)?(.*) 
>>>>> https://aldeimbg.org:10000/virtualmin-mailman/unauthenticated/$1.cgi$3 
>>>>> <https://aldeimbg.org:10000/virtualmin-mailman/unauthenticated/$1.cgi$3>
>>>>> Redirect /mail/config-v1.1.xml /cgi-bin/autoconfig.cgi
>>>>> 
>>>>> wsgi.py:
>>>>> 
>>>>> """
>>>>> WSGI config for BalkanCMS project.
>>>>> 
>>>>> It exposes the WSGI callable as a module-level variable named 
>>>>> ``application``.
>>>>> 
>>>>> For more information on this file, see
>>>>> https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/ 
>>>>> <https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/>
>>>>> """
>>>>> 
>>>>> import os
>>>>> import sys
>>>>> 
>>>>> sys.path.insert(0, 
>>>>> os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))
>>>>> sys.path.insert(0, 
>>>>> os.path.abspath(os.path.join(os.path.dirname(__file__), "../")))
>>>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BalkanCMS.settings")
>>>>> 
>>>>> from django.core.wsgi import get_wsgi_application
>>>>> application = get_wsgi_application()
>>>>> 
>>>>> settings.py
>>>>> 
>>>>> DEBUG = True (tried with False too, but get the same error)
>>>>> 
>>>>> TEMPLATE_DEBUG = True
>>>>> 
>>>>> ALLOWED_HOSTS = ['*',]
>>>>> 
>>>>> I can access the app through manage.py runserver without problems
>>>>> 
>>>>> Apache version info:
>>>>> Server version: Apache/2.2.22 (Ubuntu)
>>>>> Server built:   Jul 24 2015 17:25:42
>>>>> Server's Module Magic Number: 20051115:30
>>>>> Server loaded:  APR 1.4.6, APR-Util 1.3.12
>>>>> Compiled using: APR 1.4.6, APR-Util 1.3.12
>>>>> Architecture:   64-bit
>>>>> Server MPM:     Prefork
>>>>>   threaded:     no
>>>>>     forked:     yes (variable process count)
>>>>> Server compiled with....
>>>>>  -D APACHE_MPM_DIR="server/mpm/prefork"
>>>>>  -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=128
>>>>>  -D HTTPD_ROOT="/etc/apache2"
>>>>>  -D SUEXEC_BIN="/usr/lib/apache2/suexec"
>>>>>  -D DEFAULT_PIDLOG="/var/run/apache2.pid"
>>>>>  -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
>>>>>  -D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
>>>>>  -D DEFAULT_ERRORLOG="logs/error_log"
>>>>>  -D AP_TYPES_CONFIG_FILE="mime.types"
>>>>>  -D SERVER_CONFIG_FILE="apache2.conf"
>>>>> 
>>>>> mod_wsgi version
>>>>> ii  libapache2-mod-wsgi                   3.3-4ubuntu0.2                  
>>>>>       Python WSGI adapter module for Apache
>>>>> 
>>>>> Python version: 2.7.3
>>>>> 
>>>>> -- 
>>>>> 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 modwsgi+u...@ <>googlegroups.com <http://googlegroups.com/>.
>>>>> To post to this group, send email to mod...@ <>googlegroups.com 
>>>>> <http://googlegroups.com/>.
>>>>> Visit this group at http://groups.google.com/group/modwsgi 
>>>>> <http://groups.google.com/group/modwsgi>.
>>>>> For more options, visit https://groups.google.com/d/optout 
>>>>> <https://groups.google.com/d/optout>.
>>>> 
>>>> 
>>>> -- 
>>>> 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 post to this group, send email to [email protected] <>.
>>>> Visit this group at http://groups.google.com/group/modwsgi 
>>>> <http://groups.google.com/group/modwsgi>.
>>>> For more options, visit https://groups.google.com/d/optout 
>>>> <https://groups.google.com/d/optout>.
>>> 
>>> 
>>> -- 
>>> 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] <javascript:>.
>>> To post to this group, send email to [email protected] <javascript:>.
>>> Visit this group at http://groups.google.com/group/modwsgi 
>>> <http://groups.google.com/group/modwsgi>.
>>> For more options, visit https://groups.google.com/d/optout 
>>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "modwsgi" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/modwsgi/YFMbpUIZ3Kg/unsubscribe 
>> <https://groups.google.com/d/topic/modwsgi/YFMbpUIZ3Kg/unsubscribe>.
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected] <javascript:>.
>> To post to this group, send email to [email protected] <javascript:>.
>> Visit this group at http://groups.google.com/group/modwsgi 
>> <http://groups.google.com/group/modwsgi>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> 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] <javascript:>.
>> To post to this group, send email to [email protected] <javascript:>.
>> Visit this group at http://groups.google.com/group/modwsgi 
>> <http://groups.google.com/group/modwsgi>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> 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 post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at http://groups.google.com/group/modwsgi 
> <http://groups.google.com/group/modwsgi>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
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 post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to