Linux入门笔记7. ubuntu上部署Nginx+uWSGI+Django

14 篇文章 0 订阅
7 篇文章 0 订阅

Linux入门笔记7. ubuntu上部署Nginx+uWSGI+Django

我们的目标就是实现这样的架构

Nginx对外提供端口8080,用户发出的请求必须通过8080端口提交给Nginx。随后Nginx将用户请求通过端口8000转交给uWSGI。再此过程中,Nginx充当一个反向代理的角色。

这里写图片描述

Nginx作为反向代理,对用户屏蔽了服务器的细节。所有用户发送的请求都会经过Nginx处理,再发送给目标服务器。因为对于用户而言,他无需知道是哪台服务器响应了他的请求,只需要知道自己的请求被处理了即可。使用Nginx做反向代理的好处在于:
1、安全,由于外部请求必须经由Nginx,避免了恶意程序直接攻击服务器
2、负载均衡,Nginx能够根据负载情况,将请求分配给不同的服务器,保证服务器的性能,常见的负载策略有:轮询、加权轮询、Ip hash等。详情请见Nginx配置详解
3、提高IO性能,一些静态文件的读取,可直接通过Nginx进行处理

1、安装Nginx

(1) 在ubuntu 下使用命令安装Nginx

apt-get install nginx

* nginx的启动、停止、重启*

root@ubuntu:/# /etc/init.d/nginx start
root@ubuntu:/# /etc/init.d/nginx stop
root@ubuntu:/# /etc/init.d/nginx restart

或者使用service

root@ubuntu:/# sudo service nginx start
root@ubuntu:/# sudo service nginx stop
root@ubuntu:/# sudo service nginx restart

(2) 接下来修改Nginx的配置文件。在我的服务器上,Nginx配置文件在/etc/nginx/nginx.conf中,同时在配置文件中,引用了其他目录的文件,结构如下图所示:

这里写图片描述

首先看etc/nginx/nginx.conf文件,使用vim打开文件,命令如下:

root@ubuntu:/# vim /etc/nginx/nginx.conf

/etc/nginx/nginx.conf 文件内容如下(省略被注释的部分):

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings ----------------------在此可以配置图片压缩
    ##

    gzip on;
    gzip_disable "msie6";
    gzip_min_length 1k;

    gzip_vary off;
    # gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/jpeg;

    ##
    # Virtual Host Configs
    ##

    ###################################################
    # -----------------注意下面这两行代码,引用了其他目录下的文件,
    # 很多发行版为了方便管理,在nginx.conf底部加了一条include /etc/nginx/sites-enabled/*.conf
    # /etc/nginx/conf.d/*.conf ,在我的服务器上,这个目录下为空
    # /etc/nginx/sites-enabled/* 在我的服务器上,这个目录下有一个文件:default
    ###################################################
    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-enabled/default 文件的内容如下(省略被注释的部分):

server {
    listen 8080 default_server;  # -----------------------------监听8080端口
    listen [::]:8080 default_server ipv6only=on;

    #root /usr/share/nginx/html;
    #index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name 127.0.0.1; # ----------------------------------服务器的IP地址
    charset utf-8;


    # Django mdedia
    location /media {
        alias /home/workspace/GWS/media;
    }

    location /static {
        alias /home/workspace/GWS/static; # ----------------django静态文件的位置
    }

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000; # ---------------------------配置uWSGI的端口
    }
}

修改完Nginx的配置文件后,使用下面的命令检查配置文件是否有错误,出现以下提示说明配置文件没有问题

nginx -t

这里写图片描述

注:
在我的服务器上, 还存在一个目录/etc/nginx/sites-available,它和sites-enabled的区别在于:
available保存所有的配置,包括不启用的站点,启用时需要将.conf软连接到enabled(使用命令ln)。而enabled只保存启用的站点的配置。简单点讲:enabled可以看做available的一个子集, available同时包括enabled中启用的站点的配置和不启用的配置。

2、安装uWSGI

使用pip 安装uwsgi

pip install uwsgi

测试uwsgi安装是否成功,我们新建一个test.py文件,内容如下:

# 接收任意请求,并返回一个字符串"Hello world"
def application(env, start_response):
    start_response('200 OK', [('Content-Type', 'test/html')])
    return [b"Hello world"]

使用下面的命令运行该文件,然后访问127.0.0.1:8001。按照网上的资料,在浏览器上我们能看到Hello World。但是在我的实际测试中,访问127.0.0.1:8001会下载一个文件,文件内容正是Hello World。此处求大神指导。

uwsgi --http :8001 --wsgi-file test.py

————————————–以下是引用——————————————–
常用选项:
http : 协议类型和端口号
processes : 开启的进程数量
workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)
chdir : 指定运行目录(chdir to specified directory before apps loading)
wsgi-file : 载入wsgi-file(load .wsgi file)
stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)
threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)
master : 允许主进程存在(enable master process)
daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。
pidfile : 指定pid文件的位置,记录主进程的pid号。
vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

此处参考:
http://www.cnblogs.com/fnng/p/5268633.html
http://www.jianshu.com/p/e6ff4a28ab5a

————————————–引用结束———————————————-

3、部署Django

首先来看一下Django项目的最终的结构:

这里写图片描述

GWS子目录下wsgi.py 是自动生成的,我们只需要新建一个GWS_uwsgi.ini配置文件就好。

touch GWS_uwsgi.ini

GWS_uwsgi.ini文件的内容如下:

# GWS_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8000 # ------------------------指定8000端口

# the base directory (full path)
chdir = /home/workspace/GWS # ------------项目的目录

# Django s wsgi file
module = GWS.wsgi # ---------GWS子目录下wsgi.py 是自动生成的

# process-related settings
# master
master = true

# maximum number of worker processes
processes = 4

# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum  =  true

 这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。(参考自http://www.cnblogs.com/fnng/p/5268633.html

  接下来,切换到GWS项目目录下,通过uwsgi命令读取GWS_uwsgi.ini文件启动项目。

uwsgi --ini myweb_uwsgi.ini 

这里写图片描述

由于我之前已经启动项目了,所以提示 (:8000)端口被占用

最后,重启Nginx,访问127.0.0.1:8080,看看效果吧。(注意URL栏,访问的是我们的8080端口~)

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值