Apache + mod_uwsgi + Django + AWS ELB on centos6 - django

I have a problem with Django application under Apache and mod_uwsgi behind Elastic Load Balancer.
Application work fine when accessing by IP or Domain Name, but if i setting ELB in front of it, Django Application stop working, i have only static files(which server by apache) and 502 BAD GATEWAY error in browser and no errors at all on the server, when trying to access Django application.
UWSGI config:
[uwsgi]
socket = /tmp/uwsgi.sock
pidfile = /var/run/uwsgi.pid
Httpd Config:
<Location / >
SetHandler uwsgi-handler
uWSGISocket /tmp/uwsgi.sock
</Location>
<Location /static >
SetHandler default-handler
</Location>
<Location /static/admin/ >
SetHandler default-handler
</Location>
<Location /media >
SetHandler default-handler
</Location>
<Location /downloads/ >
SetHandler default-handler
</Location>
<Directory /home/www/sources/my_project/project/static >
Order deny,allow
Allow from All
</Directory>
#The rest directories also declared

Replaced mod_uwsgi with mod_proxy_uwsgi - works better

Related

How to allow jetty server status info for only localhost

Apache can let this configuration with these codes
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from my-ip-address:no-port#
</Location>
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from my-ip-address-no-port
</Location>
How can I do that in Jetty ?
For example, in jetty-http.xml , this code disable to see server version
<Set name="sendServerVersion">false</Set>
Jetty version is
9.2.15.v20160210

Using iRedMail with a django site on the same server

I am trying to create a small django site and use iRedMail for e-mail. I installed iRedMail first, and ensured that it worked. I could go to both www.domain.com/iredadmin and www.domain.com/mail and have it work perfectly. My next step was to install my django site and configure Apache. Unfortunately, this caused my django site to try and handle /mail/ and /iredadmin/. I've been fidgeting with the config for a few hours now and have no idea what to do. Here are the settings:
apache2.conf:
# Defaults...
WSGIPythonPath /path/to/website.com/website
sites-enabled/website.com:
<VirtualHost *:80>
ServerName website.in
ServerAlias www.website.in
ErrorLog ${APACHE_LOG_DIR}/error.log
Alias /static /path/to/website.com/website/static
Alias /media /path/to/website.com/website/media
Alias /mail /usr/share/apache2/roundcubemail/
Alias /admin /usr/share/apache2/iredadmin/
<Directory /usr/share/apache2/roundcubemail/>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /path/to/website.com/website/website.wsgi
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE website.settings
PythonDebug Off
PythonPath "['/path/to/website.com/website/']+sys.path"
</Location>
<Directory /path/to/website.com/website>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
<Directory /path/to/website.com/website/static>
Order allow,deny
Allow from all
</Directory>
<Location /static/>
SetHandler None
</Location>
<Directory /path/to/website.com/website/media>
Order allow,deny
Allow from all
</Directory>
<Location /media/>
SetHandler None
</Location>
</VirtualHost>
The django website displays fine, although I have been getting internal server errors.
You are trying to use both mod_wsgi and mod_python to handle the Django site at the same time, with mod_python overriding mod_wsgi. Choose one of the other. Since mod_python is no longer developed or supported and support for it in Django deprecated, probably not a good option to keep using it.
The next thing which is wrong is:
Alias /mail /usr/share/apache2/roundcubemail/
Alias /admin /usr/share/apache2/iredadmin/
Remove the trailing slashes:
Alias /mail /usr/share/apache2/roundcubemail
Alias /admin /usr/share/apache2/iredadmin
Even then it will still not work, because when using mod_python you have to tell mod_python not to handle those paths.
<Location /mail/>
SetHandler None
</Location>
<Location /admin/>
SetHandler None
</Location>
A further problem you may have is that /admin is usually used for the Django admin interface and you are overriding that.

How can I tell Apache to serve these files for a Django app?

I have this configuration in at the end of my httpd.conf:
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myapp.settings
PythonOption django.root /
PythonDebug On
PythonPath "['/my/path] + sys.path"
</Location>
This allows my application to startup, but the static files are not being served. I was thinking of adding something like this:
<Location "/site_media">
# what to add here?
</Location>
And tell Apache to serve files from /site_media/... from /my/path/myapp/media. However, I cannot find a way to make the connection between /site_media and the actual path to my media directory. Could you guide me?
EDIT: I added this to httpd.conf:
Alias /site_media /my/path/myapp/media
<Directory /my/path/myapp/media>
Order allow,deny
Allow from all
</Directory>
<Location "/site_media">
</Location>
But, Apache still gives me 404 errors. I also tried to add a SetHandler None inside the /site_media/ location element, but I still receive the same 404 error codes.
Alias, but read the full section.

How do i run Django and phpmyadmin on apache webserver on ubuntu

How do i run Django and phpmyadmin on apache webserver. I used localhost/phpmyadmin and it worked but after i configured Django on localhost/admin, phpmyadmin is not working i get an error page from Django saying the URL is not in urls.py. is there a way to run Django on port 81(httpd.conf) so that it will not conflict with phpmyadmin, or is there something else i am missing.I use mod_python module.This is my httpd.conf file when i change the location "/" to location "/home/projects/" Phpmyadmin works but Django fails and viceversa
<location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE hana.settings
PythonPath "['/home/projects/', '/home/projects/mysite', '/home/projects/mysite/mysite'] + sys.path"
</location>
<location "/admin-media">
SetHandler None
</location>
You can run them both on same port. Just add these lines to your apache config after WSGIAlias directive:
Alias /phphmyadmin /sys/path/to/phpmyadmin
<Location /phphmyadmin>
SetHandler None
</Location>
You can also run them on different ports.
Listen 80
Listen 81
NameVirtualHost *:80
NameVirtualHost *:81
<VirtualHost *:81>
django-config
</VirtualHost>
<VirtualHost *:80>
phph-my-admin-configs
</VirtualHost>

Apache/Django subdomains problem

Now I have apache configuration which works only with localhost domain (http://localhost/).
Alias /media/ "/ścieżka/do/instalacji/django/contrib/admin/media/"
Alias /site_media/ "/ścieżka/do/plikow/site_media/"
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonPath "['/thomas/django_projects/project'] + sys.path"
PythonDebug On
</Location>
<Location "/site_media">
SetHandler none
</Location>
How can I make it working for some subdomains like pl.localhost or uk.localhost? This subdomains should display the same page what domain (localhost).
Second question: It is possible change default localhost address (http://localhost/) to (http://localhost.com/) or (http://www.localhost.com/) or something else?