Reputation: 980
I have created a django project called "yo" in my /home/ubuntu/test directory.
These are my nginx files:
nginx/sites-available/yo
server {
listen 80;
server_name 52.89.220.11;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/test/yo/static;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/home/ubuntu/test/yo/yo.sock;
}
}
nginx/sites-enabled/yo_nginx.conf:
# mysite_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
# server unix:///home/Ubuntu/test/yo/yo.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name 52.89.220.11; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
# location /media {
# alias /path/to/your/mysite/media; # your Django project's media files - amend as required
# }
#location /static {
# alias /path/to/your/mysite/static; # your Django project's static files - amend as required
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /home/ubuntu/test/yo/uwsgi_params; # the uwsgi_params file you installed
}
}
/home/ubuntu/test/yo/uwsgi_params:
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
There are my files along with their url. When i go to the domain_name on port 80, i get 502 bad gateway instead of django success page. Please help.
Upvotes: 2
Views: 2007
Reputation:
First install required applications. sudo apt-get install nginx uwsgi uwsgi-plugin-python python-virtualenv Versions of packages that will be used:
Nginx
Uwsgi
Virtualenv
Django
Virtualenv.
I store my project in ~/projects. Now I'm creating python virtual environment for my project and I'm installing Django.
cd ~/projects/
virtualenv example.com
cd example.com
source bin/activate
pip install django
django-admin.py startproject project
Nginx configuration. IMHO, by default, nginx is configured for basic tasks. I won't change this configuration in this entry. Configuration files are stored in
/etc/nginx/sites-available. Go to this directory and create a new file.
cd /etc/nginx/sites-available
vim example.com It's example configuration.
server {
listen 80;
server_name eample.com,www.example.com;
access_log /var/log/nginx/eample.com_access.log;
error_log /var/log/nginx/example.com_error.log;
location / {
uwsgi_pass unix:///tmp/example.com.sock;
include uwsgi_params;
}
location /media/ {
alias /home/eshlox/projects/example.com/project/project/media/;
}
location /static/ {
alias /home/eshlox/projects/example.com/project/project/static/;
}
}
We must create symlink to enable this.
cd /etc/nginx/sites-enabled
ln -s ../sites-available/example.com .
Uwsgi. Like with Nginx.. configuration files are stored in /etc/uwsgi/apps-available. Go to this directory and create a new file.
cd /etc/uwsgi/apps-available
vim example.com.ini
Edit example.com.ini [uwsgi]
vhost = true
plugins = python
socket = /tmp/example.com.sock
master = true
enable-threads = true
processes = 2
wsgi-file = /home/eshlox/projects/example.com/project/project/wsgi.py
virtualenv = /home/eshlox/projects/example.com
chdir = /home/eshlox/projects/example.com/project
touch-reload = /home/eshlox/projects/example.com/project/reload
Enable this.
cd /etc/uwsgi/apps-enabled/
ln -s ../apps-available/example.com.ini .
That's all. Now, run this services.
sudo service nginx start
sudo service uwsgi start
Upvotes: 2
Reputation: 4068
nginx/sites-enabled/yo_nginx.conf
nginx/sites-available/yo
is not read by nginx - only files ending in .conf
and located in nginx/sites-enabled/
are read in default nginx configuration.uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=664
tells uwsgi to listen on unix socket, your upstream django
block should be modified accordingly.That should get rid of the 502 error.
upstream django {
server unix:///home/ubuntu/test/yo/mysite.sock; # for a file socket, check if the path is correct
# server 127.0.0.1:8001; # for a web port socket
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name 52.89.220.11; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
# location /media {
# alias /path/to/your/mysite/media; # your Django project's media files - amend as required
# }
# location /static {
# alias /path/to/your/mysite/static; # your Django project's static files - amend as required
# }
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /home/ubuntu/test/yo/uwsgi_params; # the uwsgi_params file you installed
}
}
Upvotes: 1