如何在Linux上使用Nginx和Gunicorn托管Django应用

介绍

托管 Django Web 应用程序相当简单,虽然它比标准的 PHP 应用程序更复杂一些。 让 Web 服务器对接 Django 的方法有很多。 Gunicorn 就是其中最简单的一个。

Gunicorn(Green Unicorn 的缩写)在你的 Web 服务器 Django 之间作为中间服务器使用,在这里,Web 服务器就是 Nginx。 Gunicorn 服务于应用程序,而 Nginx 处理静态内容。

Gunicorn

安装

使用 Pip 安装 Gunicorn 是超级简单的。 如果你已经使用 virtualenv 搭建好了你的 Django 项目,那么你就有了 Pip,并且应该熟悉 Pip 的工作方式。 所以,在你的 virtualenv 中安装 Gunicorn。


  1. $ pip install gunicorn 

配置

Gunicorn 最有吸引力的一个地方就是它的配置非常简单。处理配置最好的方法就是在 Django 项目的根目录下创建一个名叫 Gunicorn 的文件夹。然后在该文件夹内,创建一个配置文件。

在本篇教程中,配置文件名称是 gunicorn-conf.py。在该文件中,创建类似于下面的配置:


  1. import multiprocessing 
  2. bind = 'unix:///tmp/gunicorn1.sock' 
  3. workers = multiprocessing.cpu_count() * 2 + 1 
  4. reload = True 
  5. daemon = True 

在上述配置的情况下,Gunicorn 会在 /tmp/ 目录下创建一个名为 gunicorn1.sock 的 Unix 套接字。 还会启动一些工作进程,进程数量相当于 CPU 内核数量的 2 倍。 它还会自动重新加载并作为守护进程运行。

运行

Gunicorn 的运行命令有点长,指定了一些附加的配置项。 最重要的部分是将 Gunicorn 指向你项目的 .wsgi 文件。


  1. gunicorn -c gunicorn/gunicorn-conf.py -D --error-logfile gunicorn/error.log yourproject.wsgi 

上面的命令应该从项目的根目录运行。 -c 选项告诉 Gunicorn 使用你创建的配置文件。 -D 再次指定 gunicorn 为守护进程。 最后一部分指定 Gunicorn 的错误日志文件在你创建 Gunicorn 文件夹中的位置。 命令结束部分就是为 Gunicorn 指定 .wsgi 文件的位置。

Nginx

现在 Gunicorn 配置好了并且已经开始运行了,你可以设置 Nginx 连接它,为你的静态文件提供服务。 本指南假定你已经配置好了 Nginx,而且你通过它托管的站点使用了单独的 server 块。 它还将包括一些 SSL 信息。

如果你想知道如何让你的网站获得免费的 SSL 证书,请查看我们的 Let'sEncrypt 指南。


  1. # 连接到 Gunicorn 
  2. upstream yourproject-gunicorn { 
  3.     server unix:/tmp/gunicorn1.sock fail_timeout=0; 
  4. # 将未加密的流量重定向到加密的网站 
  5. server { 
  6.     listen       80; 
  7.     server_name  yourwebsite.com; 
  8.     return       301 https://yourwebsite.com$request_uri; 
  9. # 主服务块 
  10. server { 
  11.     # 设置监听的端口,指定监听的域名 
  12.     listen 443 default ssl; 
  13.     client_max_body_size 4G; 
  14.     server_name yourwebsite.com; 
  15.     # 指定日志位置 
  16.     access_log /var/log/nginx/yourwebsite.access_log main; 
  17.     error_log /var/log/nginx/yourwebsite.error_log info; 
  18.     # 告诉 nginx 你的 ssl 证书 
  19.     ssl on; 
  20.     ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem; 
  21.     ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem; 
  22.     # 设置根目录 
  23.     root /var/www/yourvirtualenv/yourproject; 
  24.     # 为 Nginx 指定静态文件路径 
  25.     location /static/ { 
  26.         # Autoindex the files to make them browsable if you want 
  27.         autoindex on; 
  28.         # The location of your files 
  29.         alias /var/www/yourvirtualenv/yourproject/static/; 
  30.         # Set up caching for your static files 
  31.         expires 1M; 
  32.         access_log off; 
  33.         add_header Cache-Control "public"; 
  34.         proxy_ignore_headers "Set-Cookie"; 
  35.     } 
  36.     # 为 Nginx 指定你上传文件的路径 
  37.     location /media/ { 
  38.         Autoindex if you want 
  39.         autoindex on; 
  40.         # The location of your uploaded files 
  41.         alias /var/www/yourvirtualenv/yourproject/media/; 
  42.         # Set up aching for your uploaded files 
  43.         expires 1M; 
  44.         access_log off; 
  45.         add_header Cache-Control "public"; 
  46.         proxy_ignore_headers "Set-Cookie"; 
  47.     } 
  48.     location / { 
  49.         # Try your static files first, then redirect to Gunicorn 
  50.         try_files $uri @proxy_to_app; 
  51.     } 
  52.     # 将请求传递给 Gunicorn 
  53.     location @proxy_to_app { 
  54.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  55.         proxy_set_header Host $http_host; 
  56.         proxy_redirect off; 
  57.         proxy_pass   http://njc-gunicorn; 
  58.     } 
  59.     # 缓存 HTML、XML 和 JSON 
  60.     location ~* \.(html?|xml|json)$ { 
  61.         expires 1h; 
  62.     } 
  63.     # 缓存所有其他的静态资源 
  64.     location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff2)$ { 
  65.         expires 1M; 
  66.         access_log off; 
  67.         add_header Cache-Control "public"; 
  68.         proxy_ignore_headers "Set-Cookie"; 
  69.     } 

配置文件有点长,但是还可以更长一些。其中重点是指向 Gunicorn 的 upstream 块以及将流量传递给 Gunicorn 的 location 块。大多数其他的配置项都是可选,但是你应该按照一定的形式来配置。配置中的注释应该可以帮助你了解具体细节。

保存文件之后,你可以重启 Nginx,让修改的配置生效。


  1. # systemctl restart nginx 

一旦 Nginx 在线生效,你的站点就可以通过域名访问了。

结语

如果你想深入研究,Nginx 可以做很多事情。但是,上面提供的配置是一个很好的开始,并且你可以用于实践中。 如果你见惯了 Apache 和臃肿的 PHP 应用程序,像这样的服务器配置的速度应该是一个惊喜。

作者:Nick Congleton

来源:51CTO

时间: 2024-09-28 16:04:20

如何在Linux上使用Nginx和Gunicorn托管Django应用的相关文章

在 Linux 上使用 Nginx 和 Gunicorn 托管 Django 应用

介绍 托管 Django Web 应用程序相当简单,虽然它比标准的 PHP 应用程序更复杂一些. 让 Web 服务器对接 Django 的方法有很多. Gunicorn 就是其中最简单的一个. Gunicorn(Green Unicorn 的缩写)在你的 Web 服务器 Django 之间作为中间服务器使用,在这里,Web 服务器就是 Nginx. Gunicorn 服务于应用程序,而 Nginx 处理静态内容. Gunicorn 安装 使用 Pip 安装 Gunicorn 是超级简单的. 如果

Linux上配置Nginx+PHP5(FastCGI)

原为地址:http://www.laruence.com/2009/07/28/1030.html Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理.负载平衡.其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新. 因此我打算用其替代Apache应用于Linux服务器上.但是Nginx并不支持cgi方式运行,原因是可以减少因此带

LFCS 系列第一讲:如何在 Linux 上使用 GNU sed 等命令来创建、编辑和操作文件

LFCS 系列第一讲:如何在 Linux 上使用 GNU sed 等命令来创建.编辑和操作文件 Linux 基金会宣布了一个全新的 LFCS(Linux 基金会认证系统管理员Linux Foundation Certified Sysadmin)认证计划.这一计划旨在帮助遍布全世界的人们获得其在处理 Linux 系统管理任务上能力的认证.这些能力包括支持运行的系统服务,以及第一手的故障诊断.分析,以及为工程师团队在升级时提供明智的决策. Linux 基金会认证系统管理员--第一讲 请观看下面关于

如何在Linux上使用命令行管理密码

如何在Linux上使用命令行管理密码 在基于密码的认证在网络盛行的今天,你可能需要或者已经使用了某种密码管理工具来跟踪管理你正在使用的所有密码.有各种各样的在线或离线服务或者软件工具用于完成此类事情,而这些工具因复杂程度.用户界面或者目标环境(如企业或终端用户)的不同而各不相同.例如,有一些是为终端用户开发基于图形化的密码管理器,如KeePass(X). 对于那些不想要依赖图形化进行密码管理的用户,笔者将会讲述如何在命令行下使用 pass来管理密码,这是一个简单的用于命令行管理密码的工具. 该密

如何在linux上分享你shell命令的输出

如何在linux上分享你shell命令的输出 前段时间我发布了一篇关于shelr.tv这个网站的文章,它提供一个服务允许你从网站上直接分享你的终端记录. 现在shelr.tv这个网站似乎关闭了,然后我四处寻找是否有类似的网站,于是我发现了commands.com. 从它的主页上来看,它的服务和其他网站提供的服务是类似的,因此让我们来测试它. 步骤 1 – 在网站上注册 只需要注册一个新的 用户名/密码,或者直接使用你的github账户快速登录. 步骤 2 – 下载安装monitor程序 Moni

如何在 Linux 上使用 Gmail SMTP 服务器发送邮件通知

如何在 Linux 上使用 Gmail SMTP 服务器发送邮件通知 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息.邮件信息可能是邮件简报.状态更新(如 Cachet).监控警报(如 Monit).磁盘时间(如 RAID mdadm)等等.当你要建立自己的 邮件发送服务器 传递信息时 ,你可以替代使用一个免费的公共 SMTP 服务器,从而避免遭受维护之苦. 谷歌的 Gmail 服务就是最可靠的 免费 SMTP 服务器 之一.想要从应用中发送邮件通知,你仅需在应用中

puppet如何在linux上部署

问题描述 puppet如何在linux上部署 我是个新的菜鸟,我也在csdn上看了好多puppet在linux上怎么部署,写的不够详细, 所以才在这上面求助. 解决方案 http://jingyan.baidu.com/article/14bd256e29fd0dbb6c261244.html 解决方案二: puppet 部署在linux部署hornetq为系统服务Linux+nodejs+mongodb 环境部署

如何在Linux上构建 RAID 10阵列

如何在Linux上构建 RAID 10阵列 RAID 10阵列(又名RAID 1+0 或先镜像后分区)通过结合RAID 0 (读写操作在多个磁盘上同时并行执行)和RAID 1(数据被完全相同地写入到两个或更多的磁盘)两者的特点实现高性能和高容错性的磁盘I/O. 这篇文章会指导你如何使用五块相同的8GB磁盘来组成一个软件RAID 10阵列.因为组成一个RAID 10阵列至少需要4块磁盘(比如,两个镜像各有一对分区组合),而且需要添加一块额外的备用磁盘以防某块主要的磁盘出错.本文也会分享一些工具,在

Linux 有问必答:如何在 Linux 上安装 Node.js

Linux 有问必答:如何在 Linux 上安装 Node.js 问题: 如何在你的 Linux 发行版上安装 Node.js? Node.js 是建立在谷歌的 V8 JavaScript 引擎服务器端的软件平台上.在构建高性能的服务器端应用程序上,Node.js 在 JavaScript 中已是首选方案.是什么让使用 Node.js 库和应用程序的庞大生态系统来开发服务器后台变得如此流行.Node.js 自带一个被称为 npm 的命令行工具可以让你轻松地安装它,进行版本控制并使用 npm 的在