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

来源:互联网 发布:新版淘宝怎么充话费 编辑:程序博客网 时间:2024/06/14 05:51

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 startroot@ubuntu:/# /etc/init.d/nginx stoproot@ubuntu:/# /etc/init.d/nginx restart

或者使用service

root@ubuntu:/# sudo service nginx startroot@ubuntu:/# sudo service nginx stoproot@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 settingssocket = :8000 # ------------------------指定8000端口# the base directory (full path)chdir = /home/workspace/GWS # ------------项目的目录# Django s wsgi filemodule = GWS.wsgi # ---------GWS子目录下wsgi.py 是自动生成的# process-related settings# mastermaster = true# maximum number of worker processesprocesses = 4# ... with appropriate permissions - may be needed# chmod-socket = 664# clear environment on exitvacuum  =  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端口~)

这里写图片描述

这里写图片描述

原创粉丝点击