Linux入门笔记7. ubuntu上部署Nginx+uWSGI+Django
2017-08-03 11:02
661 查看
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 下使用命令安装Nginxapt-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 安装uwsgipip 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端口~)
相关文章推荐
- Ubuntu上通过nginx部署Django笔记
- 在Ubuntu上使用Nginx+uwsgi部署django
- Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
- Django Ubuntu部署:nginx + uWSGI配置
- python Django + uwsgi + nginx 在阿里云Ubuntu环境下的部署
- Ubuntu+nginx+uwsgi部署Django项目
- 从零开始在 Ubuntu 下部署 Nginx uWSGI Django 服务器
- Django学习笔记五:通过nginx+uwsgi部署Django项目(暂时静态文件没有部署上去)
- Ubuntu上通过nginx部署Django笔记
- Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
- Nginx+uWSGI+Django+Python在Linux上的部署
- uWSGI + Nginx 部署 Django 项目笔记
- ubuntu16.04使用nginx、uwsgi部署django应用
- Linux之Django+uwsgi+nginx部署
- Linux下uWSGI+NGINX部署Django+AngularJs
- nginx1.4.7+uwsgi+django1.9.2+gridfs 在ubuntu14.0.4上部署
- Nginx+uWSGI+Django在Ubuntu下的部署
- Ubuntu linux nginx + uwsgi + django 配置
- nginx+uwsgi在Ubuntu下部署django
- 基于nginx和uWSGI在Ubuntu上部署Django