uWSGI+Nginx+Django安裝和配置
WSGI是為python語言定義的通用閘道器介面,它承擔python web框架(django、flask、web.py等)和web伺服器(nginx、apache、lighttpd等)之間的中間層。
瀏覽器 chrome、firefox、ie等
|
web伺服器 nginx、apache等
|
閘道器介面 CGI、FastCGI、WSGI等
|
Python(程式、Web框架) Django、Flask、Tornado等
python中自帶的wsgiref就是一種wsgi介面的標準實現,但是,由於100%使用python實現等原因,導致wsgiref實在過於緩慢,只能用於測試和學習。生產環境中我們需要使用效能更高的伺服器,目前常用的wsgi伺服器有:uWSGI、Gunicorn、twisted.web。
1 uWSGI的安裝
uWSGI是用C語言寫的高效能WSGI伺服器,安裝uWSGI前我們需要安裝Python和C編譯器(GCC)。推薦使用python包管理器pip安裝uWSGI。
#安裝最新穩定版
pip install uWSGI
#也可以安裝長期支援版(LTS版本)
#pip install http://projects.unbit.it/downloads/uwsgi-lts.tar.gz
在ubuntu下可以使用apt-get來安裝
apt-get install uwsgi
在fedora、redhat、centos下使用yum安裝
yum groupinstall "Development Tools"
yum install python
編譯安裝,從github下載uwsgi程式碼,cd到目錄下
python uwsgiconfig.py --build
2 測試uwsgi是否安裝成功
在終端中輸入以下命令檢視uwsgi的版本號,如果輸出正常,說明uswgi已安裝成功
$ uwsgi --version
2.0.11.1
我們可以編寫一個簡單的wsgi應用來測試uwsgi是否被安裝成功,首先建立一個test.py檔案:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
#return ["Hello World"] # python2
執行uwsgi:
uwsgi --http :8000 --wsgi-file test.py
引數中,http :8000表示使用http協議,埠號為8000,wigi-file則表示要執行的wsgi應用程式檔案。uwsgi執行後開啟瀏覽器,訪問http://127.0.0.1:8000/ ,或者是相應伺服器地址的8000埠,就可以看到hello world 頁面了。
上面的例子中,我們用瀏覽器直接訪問了uwsgi執行的python程式(只有一個入口函式的wsgi測試應用test.py),其訪問結構如下所示。
瀏覽器 <-> uWSGI <-> Python
上述方式執行uWSGI服務的過程中,可以使用CTRL+C即可停止服務,在後續的章節中會講到自動管理和部署。
3 nginx和django的配置
nginx和django的安裝不是本文的重點,故在此略去,只討論配置部分。在這裡,我們要實現的效果如下:
瀏覽器 <-> nginx <-> uWSGI <-> Django(python)
uwsgi_params 配置檔案
uWSGI使用的協議不完全是標準的WSGI協議,我們需要從Github下載uwsgi_paraments配置檔案,並將該檔案拷貝到專案路徑中(例如:/user/home/pengquanxin/projects/mysite1/)。
Nginx伺服器配置
接下來,要配置nginx伺服器和uWSGI互通,可以使用unix套接字方式和TCP埠方式。在nginx配置資料夾(/etc/naginx/site-enabled 或 /usr/local/etc/nginx/sites-enabled)中新建網站的配置檔案mystie_nginx.conf,輸入以下內容:
# mysite_nginx.conf
# nginx需要連線的上游
upstream django {
server unix:///path/to/your/mysite/mysite.sock; # 使用unix套接字
#server 127.0.0.1:8001; # 使用TCP埠請註釋上一行,並取消本行註釋,這裡的埠指的是跑uwsgi的埠
}
# nginx伺服器配置
server {
# 監聽埠
listen 80;
# 域名
server_name .example.com;
# 編碼
charset utf-8;
# 最大上傳大小
client_max_body_size 75M;
# Django 的media路徑
location /media {
alias /path/to/your/mysite/media;
}
# 靜態檔案路徑
location /static {
alias /path/to/your/mysite/static;
}
# 將動態請求轉發到uwsgi跑的django程式
location / {
uwsgi_pass django;
include /path/to/your/mysite/uwsgi_params; # 從github上下載的uwsgi_params 檔案路徑
}
}
你也可以把這個配置檔案放在專案路徑中,然後建立一個連結到nginx配置資料夾:
sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
部署靜態檔案
在部署伺服器之前,需要先將Django的靜態檔案部署到靜態資料夾中,首先,編輯django網站的settings.py檔案
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
然後,執行以下命令
python manage.py collectstatic
4 啟動服務
在啟動nginx之前,我們需要先啟動uWSGI,進入專案目錄然後輸入以下命令,在這裡我們使用unix套接字方式:
#注:django1.6 前的版本需要手動新增wsgi.py
uwsgi --socket mysite.sock
如果nginx和uwsgi跑在同一臺伺服器上,使用unix套接字就可以了,unix套接字方式效能要高很多,但不能跨機器訪問。當nginx和uWSGI不在一臺伺服器上時,就需要使用TCP埠方式(別忘了更改nginx配置檔案,取消相應註釋):
uwsgi --socket :8001 --module mysite.wsgi --chmod-socket=664
接下來,啟動nginx伺服器,就可以訪問django站點了。
5 使用ini配置檔案跑uWSGI
到這裡,我們已經把nginx+uWSGI+Django跑起來了,但uWSGI的引數比較多的時候,每次都要輸入非常麻煩,這時,我們可以在django專案目錄下建立一個mysite.uwsgi.ini
[uwsgi]
# 專案根目錄路徑(full path)
chdir = /path/to/your/project
# Django的 wsgi 檔案
module = mysite.wsgi
# virtualenv目錄 (full path)
home = /path/to/virtualenv
master = true
# 最大工作程序數(CPU密集型建議設為CPU核心數,IO密集型建議設為CPU核心數的兩倍)
processes = 16
# unix套接字檔案路徑
socket = /path/to/your/project/mysite.sock
# socket檔案許可權
# chmod-socket = 664
# 退出時清空環境
vacuum = true
然後,直接根據配置檔案執行uwsgi即可:
uwsgi --ini mysite.uwsgi.ini
6 管理uwsgi
Emperor模式
uWSGI的Epreror模式可以用來管理機器上部署的uwsgi服務,在這種模式下,會有一個特殊的程序(皇帝)對其它部署的服務(諸侯)進行監視。我們將所有配置檔案(ini或xml檔案,如上一節中的mysite.uwsgi.ini)統一放到一個資料夾(如:/etc/uwsgi/vassals)中,然後啟動Emperor模式:
uwsgi --emperor /etc/uwsgi/vassals
這樣,就會自動讀取資料夾中的配置檔案,並自動監控這些uwsgi服務: - 檢測資料夾中有新的配置檔案時,會啟動新的uwsgi服務例項 - 檢測到一個配置檔案發生改變,會自動重啟該服務 - 檢測到一個配置檔案被移除,則自動停止該服務 - 如果一個服務死了(諸侯),皇帝程序會重啟該服務 - 如果監控程序(皇帝)死了,所有服務(諸侯)都會停止
用systemd管理uwsgi服務
配合Eperor模式,在centos、fedora、archlinux中,我們可以用systemd來管理uwsgi,首先,建立一個systemd service檔案(/etc/systemd/system/emperor.uwsgi.service)
[Unit]
Description=uWSGI Emperor
After=syslog.target
[Service]
ExecStart=/root/uwsgi/uwsgi --emperor /etc/uwsgi/vassals
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
這樣我們就可以用systemd來管理uwsgi服務了。啟動服務:
$ systemctl start emperor.uwsgi.service
查詢服務執行狀態:
$ systemctl status emperor.uwsgi.service
停止服務
systemctl stop emperor.uwsgi.service
linux系統中,還有一種通用的方法,就是在init.d 或 rc.d 中加入啟動指令碼,這種方式不夠智慧,而且網上資料很多,在這裡暫不討論。
7 常用引數和選項
- chdir 專案目錄
- home virtualenv目錄(如沒有執行virtualenv虛擬環境,則無需設定)
- socket 套接字檔案或TCP套接字,例如:site1.uwsgi.sock 或 127.0.0.1:8000
- uid 使用者id
- gid 使用者組id
- processes 工作程序數
- harakiri 程序超過該時間未響應就重啟該程序(預設單位為秒)
- module 要啟動的wsgi模組入口,如:mysite.wsgi:application
- ini 指定ini配置檔案
- xml 指定xml配置檔案(與ini類似)
- file 指定要執行的wsgi程式檔案,如:test.py
- emperor Emperor模式
- so-keepalive 開啟TCP KEEPALIVE(unix套接字方式下無效)
- vacuum 退出時清空環境
相關推薦
uWSGI+Nginx+Django安裝和配置
WSGI是為python語言定義的通用閘道器介面,它承擔python web框架(django、flask、web.py等)和web伺服器(nginx、apache、lighttpd等)之間的中間層。 瀏覽器 chrome、firefox、ie等
nginx concat module 安裝和配置
-m 安裝和配置 文件類型 ext 增加 .html csdn taobao read 簡介 nginx_concat_module 是淘寶研發的針對 nginx 的文件合並模塊,主要用於合並前端代碼減少 http 請求數。如果你的應用環境中部署了 nginx,那麽可以考
基於nginx和tengine的tcp反向代理,負載均衡 安裝和配置
zip http 端口 arc -s pro 進入 iteye obj 先下載nginx_tcp_proxy_module模塊。 wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/mast
Nginx 之 Nginx安裝和配置文件簡要介紹
安裝 配置文件 1 概述本文主要介紹了nginx的兩種安裝方法,通過yum和編譯安裝,同時對安裝後的配置文件的語法和格式進行了簡要的介紹2 nginx的安裝2.1 yum安裝nginx在光盤自帶的base源裏沒有,需要通過官方路徑或者是epel源中安裝.官方:http://nginx.org/pack
windows下安裝和配置nginx
過去 啟動 win 直接 端口號 本地 註意 環境 安裝 下載nginx 到官網下載window版的nginx http://nginx.org/ 配置環境變量 解壓到本地的某個路徑下, 打開cmd窗口,cd到nginx的目錄下 這裏要註意cd的時候
nginx安裝和配置
clu remote list server bin get 6.2 pro stub 安裝參照:http://www.runoob.com/linux/nginx-install-setup.html 配置參照:https://www.cnblogs.com/Miss-m
CentOS&.NET Core初試-3-Nginx的安裝和配置
新建 集群 防火墻 解決 http服務器 head nec def rem Nginx簡介 ??Nginx是一個免費的,開源的,高性能的HTTP服務器和反向代理,以及IMAP / POP3代理服務器。 ??Nginx以其高性能,穩定性,豐富的功能集,簡單的配置和低資源消耗而
windows下的nginx安裝和配置及與tomcat關聯配置記錄
1. 官方中文說明:http://wiki.nginx.org/NginxChs 或者http://nginx.org/ 下載:當前穩定版: Nginx 1.0.5 | Nginx/windows 1.0.5 (更新記錄) (2011年7月19日) 我們下
Nginx Linux系統下的安裝和配置應用
Nginx 安裝配置 Nginx("engine x")是一款是由俄羅斯的程式設計師Igor Sysoev所開發高效能的 Web和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 在高連線併發的情況下,Nginx是Apache伺服器
nginx和mycat在Windows系統中的安裝和配置
nginx在Windows上的搭建 1.解壓Windows安裝包到D:\program files(x86) 2.配置檔案 開啟nginx安裝目錄找到conf資料夾,開啟nginx.conf 配置訪問節點 upstream tomcat1
Nginx 之一 伺服器的安裝部署(一): LInux 環境下 Nginx 伺服器的安裝和基本配置
一、編譯和安裝前的準備工作 本部落格依賴環境: Linux Ubuntu 16.04 1.1 足夠的磁碟空間 能夠裝得下 Nginx 的軟體包和安裝檔案, 這個基本都能滿足。 1.2 需要的工具 為了編譯 Nginx 原始碼, 需要安裝標準的 GCC 編譯器。
django-allauth的安裝和配置
文章轉載於:https://mp.weixin.qq.com/s/IWOqbp5ZUuLPkMt25ylgPQ django-allauth是最受歡迎的管理使用者登入與註冊的第三方Django安裝包。django-allauth支援本地和第三方賬號(Github,百度、微博、微信等等。。),集成
windows10系統nginx和ftp安裝和配置
1、windows10系統下nginx的安裝 下載網址:http://nginx.org/en/download.html 本人選擇的是nginx-1.14.0.zip 首先將其解壓在自己想要放的位置,我放在了D:/nginx資料夾下 然後在cmd
Ubuntu18.04安裝和配置Django,並實現簡單示例
oct ati 文件 djang set tle 問題 不能 all 一、前言(系統,django介紹,window、mac、linux簡單區別) Django是python開發過程最重要的web框架。因為在看的Django教學視頻是在mac下安裝的,我自己用的是Lin
Linux系統下Nginx的安裝和配置
系統環境:centos7 64位 Nginx介紹 1)什麼是Nginx Nginx是一款高效能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師Igor Sysoev所開發,官方測試n
【nginx】Nginx的安裝和配置
Nginx的安裝和配置 6.2.1 使用Nginx的必備軟體 如果要使用Nginx的常用功能,那麼首先需要確保該作業系統上至少安裝如下軟體: 6.2.1.1 gcc、g++編譯器 ubuntu平臺線上安裝指令: sudo apt-get install gcc sudo a
Nginx安裝和配置(轉)
3 Nginx安裝 3.1 安裝前的準備 1)準備 pcre-8.12.tar.gz。該檔案為正則表示式庫。讓nginx支援rewrite需要安裝這個庫。 2) 準備 nginx-1.5.0.tar.gz。該檔案為nginx的linux版本
nginx安裝和配置反向代理
1 下載nginx 2 安裝gcc # yum -y install gcc-c++ 3 安裝 pcre # yum -y install pcre pcre-devel 4 安裝 zlib # yum -y install zlib zlib-devel 5
010 Linux 下通過yum、apt、dnf方式安裝和配置Nginx伺服器
一、安裝 Centos系統 1、安裝Nginx源。 Centos7下:#rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
如何在CentOS 7上安裝和配置Nginx
1.安裝CentOS 7 EPEL倉庫 sudo yum install epel-release 2.安裝Nginx 現在Nginx儲存庫已經安裝在您的伺服器上,使用以下yum命令安裝Nginx : sudo yum install