uwsgi + nginx多域名解析到django

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号;

 

 

 

 

 

 

 

 

发布了30 篇原创文章 · 获赞 8 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览