Uwsgi和Nginx的区别:
1、 nginx是对外的服务器,外部浏览器通过url访问nginx,uwsgi是对内的服务器,主要是用来处理动态请求。
2、nginx接收到浏览器发送过来的http请求,将包进行解析,分析url; a.如果是静态文件请求就直接访问用户给nginx的静态文件,直接返回用户请求的静态文件,b.如果不是静态文件,而是一个动态请求,那么nginx就将请求转发给uwsgi。
Django_hosts:
如果要把两个域名解析到同一个Django目录下,则需要导入django_hosts包;
添加一个host.py文件:
from django_hosts import patterns, host host_patterns = patterns('path.to', host(r'www', "app1.urls", name='www'), host(r'admin', 'app2.urls', name='admin'), )
在settings.py文件中添加INSTALLED_APPS添加依赖:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app1', 'app2', 'django_hosts', ]
在MIDDLEWARE中添加两行命令,以及添加ROOT_HOSTCONF和DEFAUL_HOST:
MIDDLEWARE = [ 'django_hosts.middleware.HostsRequestMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django_hosts.middleware.HostsRequestMiddleware' ] ROOT_URLCONF = 'untitled.urls' ROOT_HOSTCONF = 'untitled.host' DEFAULT_HOST = 'www'
此时也要在ALLOWED_HOSTS中加入'*',保证所有网页都能访问。
Nginx和Uwsgi的配置:
除了设置django里面的路径以外,还需要配置uwsgi的配置:
[uwsgi]
# 项目目录
#chdir=/data/www/applite_web/app/
chdir=/data/www/applite_web/app/
# 指定项目的application
wsgi-file=applite_web/wsgi.py
# 指定sock的文件路径
socket=/data/uwsgi/uwsgi.sock
# 进程个数
workers=5
pidfile=/data/uwsgi/uwsgi.pid
# 指定IP端口
socket=127.0.0.1:8000
#http=127.0.0.1:8000
# 指定静态文件
static-map=/static=/data/www/applite_web/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/data/uwsgi/uwsgi.log
此时要配置nginx的server:
server {
listen 80 default;
server_name _;
return 500;
#root /data/www_test_com/;
#error_page 404 /index.html;
}
include /usr/local/nginx/conf/vhost/*.conf;
server {
listen 80;
server_name applite.senseagro.com;
index index.html inex.htm index.php;
root /data/www/applite_web/;
access_log /data/nginx_log/applite_access.log logmain;
rewrite_log on;
#error_page 404 /404.html;
location ~ \.(png|jpeg|bmp|jpg|js|css) {
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
uwsgi_param UWSGI_CHDIR /data/www/applite_web/app;
uwsgi_param UWSGI_SCRIPT applite_web.wsgi;
client_max_body_size 35m;
uwsgi_read_timeout 2;
}
错误信息汇总:
1、在启动uwsgi的时候,会发现找不到依赖包的情况,此时可以用fina / -name命令找到依赖包,并在/etc/profile文件中添加依赖:
PATH=/usr/local/mysql/bin:$PATH
export PATH
export PATH=/data/softwares/anaconda3/bin:$PATH
export LD_LIBRARY_PATH="/root/anaconda3/lib/"
2、如果是读不出ini的文件,则需要在配置文件头加一个[uwsgi]文件。
3、其他关于uwsgi和nginx的问题可以查看log文件,再百度google定位。
4、由于每次重启uwsgi需要查找具体uwsgi的进程id,并手动删除该ID号; 故需可以写一个shell脚本自动删除:
#!/bin/sh
ID=`ps aux|grep uwsgi|grep -v grep|awk '{print $2}'`
for id in $ID
do
kill $id
echo "killed $id"
done
其中ps aux显示进程号,grep是搜索工具,awk '{print $2}'是得出具体的ID号;