在进行项目开发和项目测试时,我们多数只有一个服务器,一个域名,如何在一个服务器上,一个域名上,通过不同的端口访问django项目呢?
它其实是通过本地监听不同的端口,然后nginx也监听不同的端口,然后把对应的请求转发到对应的项目上
django采用uwsgi+nginx进行项目部署。
1、配置nginx
http{
upstream kyzs {#项目1的代号
server 127.0.0.1:8080;项目1的端口为8080
}
upstream deyu{#项目2的代号
server 127.0.0.1:8081;#项目2的端口为8081
}
#两个不同的server,只要监听不同的端口即可
server {
listen 443 ssl;
server_name www.studyfu.com;
access_log /var/log/nginx/nginx-uwsgi.log;
charset utf-8;
ssl_certificate /etc/nginx/ssl/studyfu.pem;
ssl_certificate_key /etc/nginx/ssl/studyfu.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location /{# 在这儿http://后面跟上前面的代号即可转发到kyzs的请求
proxy_pass http://kyzs;
}
location /media/{
alias /home/kyzs/media/;
}
location /static/{
#root /home/coll/;
#break;
root /home/centostest/;
# break;
#alias /home/kyzs/static1;
#alias /home/deployment/django_deployment/static/;
#alias /home/deployment/django_deployment/static;
}
}
#两个不同的server,只要监听不同的端口即可
server {
listen 9000 ssl;
server_name www.studyfu.com;
access_log /var/log/nginx/nginx-uwsgi.log;
charset utf-8;
ssl_certificate /etc/nginx/ssl/studyfu.pem;
ssl_certificate_key /etc/nginx/ssl/studyfu.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location /{# 在这儿http://后面跟上前面的代号即可转发到deyu的请求
proxy_pass http://deyu;
}
location /media/{
alias /home/deyu/media/;
}
location /static/{
#root /home/coll/;
#break;
root /home/centostest/;
# break;
#alias /home/kyzs/static1;
#alias /home/deployment/django_deployment/static/;
#alias /home/deployment/django_deployment/static;
}
}
}
配置结束之后:
nginx -s reload 重载(不提示出错就没啥问题)
.重新启动nginx :service nginx reload(提示出错,使用这个)
查看nginx状态:
service nginx status(success 或者activate绿色正常)
项目1 和项目2一样的步骤,它其实是通过本地监听不同的端口,然后nginx也监听不同的端口,然后把对应的请求转发到对应的项目上。
项目2的主目录下:新建文件夹log/ 、pid/、deyu-uwsgi.ini
deyu-uwsgi.ini 配置
[uwsgi]
chdir = /home/deyu #项目路径
module = deyu.wsgi #你的wsgi名称
http-socket = :8081 #监听的端口
master = True #下面是线程相关的
processes = 4
threads = 1
vacuum = true
#backend run uwsgi #不懂含义的话,查一查意思(log和pid需要提前创建)
daemonize = %(chdir)/log/uwsgi-8080.log
log-maxsize = 1024*1024*1024
pidfile = %(chdir)/pid/uwsgi-8080.pid#我当时为了方便没改,你改成8081
启动项目并监听本地8081端口:
uwsgi --ini deyu-uwsgi.ini
停止这个项目
uwsgi --stop pid/uwsgi-8080.pid
如果发现关不掉,找出进程,然后kill掉
方法1:找到uwsgi的进程,然后kill掉
ps -A|grep -i uwsgi
kill -9 xxxx(pid号码)
方法2:找到占用8081的进程,然后kill掉
lsof -i:8081
kill -9 xxxx(pid号码)