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

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

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


  1. # systemctl restart nginx

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

原文发布时间为:2017-04-15

本文来自合作伙伴“Linux中国”

时间: 2024-09-20 01:32:53

在 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方式运行,原因是可以减少因此带

Linux上用nginx搭建RTMP服务器

参考文章:https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/ 我的环境ubuntu 1. 安装编译 nginx 所需要的库 sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev 1 1 2. 下载 nginx-1.9.15.tar.gz wget http://ngin

Linux上搭建nginx,及简单配置

在上家公司都是运维安装nginx,到新公司后代码开发完成部署测试服务器要求自己装nginx,研究了好久安装好之后,到正式上线还要自己安装,索性把安装步骤自己记载下来(好大一部分都是在网站找的). 一,安装 1.选定源码目录 可以是任何目录,本文选定的是/usr/local/src cd/usr/local/src 2.安装PCRE库 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/下载最新的PCRE源码包,使用下面命令下载编译和安装PC

通过Docker在Linux上托管.NET Core

这篇文章基于我之前的文章 .NET Core 入门.首先,我把 RESTful API 从 .NET Core RC1 升级到了 .NET Core 1.0,然后,我增加了对 Docker 的支持并描述了如何在 Linux 生产环境里托管它. 我是首次接触 Docker 并且距离成为一名 Linux 高手还有很远的一段路程.因此,这里的很多想法是来自一个新手. 安装 按照 https://www.microsoft.com/net/core 上的介绍在你的电脑上安装 .NET Core .这将会

运行Asp.net应用程序在Linux上的3种托管方式

运行Asp.net应用程序在Linux上的3种托管方式   想要运行Asp.net应用程序在Linux上,我们有3种选择: 1.使用Apache作为Web服务器,使用mod_mono:http://www.mono-project.com/docs/web/mod_mono/2.使用Nginx作为Web服务器,使用FastCGI托管:http://www.mono-project.com/docs/web/fastcgi/3.使用XSP作为Web服务器,这是一个用C#写的轻量级简单的web se

php+mysql+nginx在linux上的环境部署

一直在linux上鼓捣,还没有完整在linux下配置过nginx服务器环境部署呢,这几天没什么事就部署了一下,遇到的问题也很多,现在把我的环境部署文档发出了,有什么问题大家可以一起讨论一下,希望大家采用后遇到问题多多沟通. 安装所需各种依赖包 sudo -s LANG=C yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 lib

新手指南:通过 Docker 在 Linux 上托管 .NET Core

我是首次接触 Docker 并且距离成为一名 Linux 高手还有很远的一段路程.因此,这里的很多想法是来自一个新手. 安装 按照 https://www.microsoft.com/net/core 上的介绍在你的电脑上安装 .NET Core .这将会同时在 Windows 上安装 dotnet 命令行工具以及最新的 Visual Studio 工具. 源代码 你可以直接到 GitHub 上找最到最新完整的源代码. 转换到 .NET CORE 1.0 自然地,当我考虑如何把 API 从 .N

Linux有问必答:nginx网络服务器上如何阻止特定用户代理(UA)

Linux有问必答:nginx网络服务器上如何阻止特定用户代理(UA) 问题: 我注意到有一些机器人经常访问我的nginx驱动的网站,并且进行一些攻击性的扫描,导致消耗掉了我的网络服务器的大量资源.我一直尝试着通过用户代理符串来阻挡这些机器人.我怎样才能在nginx网络服务器上阻挡掉特定的用户代理呢? 现代互联网滋生了大量各种各样的恶意机器人和网络爬虫,比如像恶意软件机器人.垃圾邮件程序或内容刮刀,这些恶意工具一直偷偷摸摸地扫描你的网站,干些诸如检测潜在网站漏洞.收获电子邮件地址,或者只是从你的