1. 程式人生 > >Nginx + uWSGI 部署Django站點

Nginx + uWSGI 部署Django站點

安裝和配置正常人都會,不用多說了

使用pip install uwsgi   yum install nginx

這裡寫圖片描述

1.使用nginx -t 檢視nginx.conf配置檔案的路徑:

配置檔案的結構如下:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
}

http {
    ......
}

nginx.conf 配置了主要的工作功能,include允許從後面的地址中找到配置檔案,這樣可以讓主配置檔案看起來更加精簡,但是多層套用include也不推薦,讓程式碼不易讀。從預設的配置檔案可以看出,/etc/nginx/conf.d/裡所有的配置檔案和/etc/nginx/sites-enalbed/裡的配置檔案都會在一開始被載入。

HTTP模組:全域性配置

HTTP 模組會處理所有來自於網路的HTTP請求,這是Nginx的大門。
重點說下/etc/nginx/sites-enalbed/這個目錄,它可以讓不同的虛擬域名分開來。一般都是通過軟連線將配置檔案連線進這個目錄,很容易修改,ngnix提供了一個配置模版:

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com

Server模組:虛擬域名的配置

在/etc/nginx/sites-enalbed/下配置的格式:

server {
    listen 80
    root /usr/share/nginx/html;

    server_name localhost;

    location / {

    }
}

server 模組是使用者修改量最大的地方。對於每一個虛擬域名都可以有不同的配置檔案。/usr/share/nginx/html這個路徑現在已經是Nginx預設存放靜態檔案的路徑了,不需要再配置。

listen: 用來監聽埠
server_name: 自己網站的域名

是否可以使用不有效的域名呢?
完全可以,在區域網中,是一個很好的辦法。

log: log檔案,HTTP模組已經設定過,在server模組裡可以更細緻。

access_log logs/example.access.log;
access_log /srv/www/example.com/logs/access.log;
建議使用完全路徑,相對路徑是與現在的路徑下部分匹配的,不好控制。

location:檔案系統配置

location設定可以讓伺服器去應答一些要伺服器資源的請求。

注意字串的匹配是最佳匹配,Nginx會選擇匹配的最好的location。更復雜的匹配情況請參照官方檔案。

部署一個Nginx的最小Web結構

實踐是檢驗真理的唯一標準,這裡部署一個Nginx的最小結構,看看Nginx能不能正常工作。

linux 新建使用者名稱用於部署Nginx並賦予許可權.

visudo

新增許可權:

username    ALL=(ALL) ALL

將nginx.conf使用者名稱修改為當前使用者。
在當前使用者的根目錄下建立如下結構:

mysite:
    - mysite.conf
    - www
    - media
        -test.png   
    - log

最簡單的目標就是通過ip訪問網站裡的靜態內容。簡單的配置下,注意使用絕對路徑:

server {
    listen 8000;
    server_name mysite.com
    charset utf_8;

    access_log /home/username/mysite/log/access.log;
    error_log /home/username/mysite/log/error_log;

    location /media/ {
        alias /home/username/mysite/media/;
    }

}

命令列軟連線到Nginx

sudo ln -s /home/username/mysite/mysite.conf /etc/nginx/sites-enabled/

常見的錯誤

403 forbidden
這裡就要注意下使用者名稱了,很多時候登入一臺主機使用者是root,而Nginx使用者不是root,所以忽略了使用者名稱的部署多會遇到這個問題。

可以將Nginx的使用者名稱改為root,這樣風險會很大。
網站靜態內容部署在當前使用者目錄下,如列子所示。
在/usr/share/nginx/html下部署靜態檔案或軟連線到網站目錄。
404 notfound
一般出現這個問題是目錄的配置出現問題,使用絕對路徑可解決

除錯方法

最好的辦法就是log檔案了,每次的請求,錯誤記錄都會非常詳細。

理解Django部署結構

djangoe結構
每個環節都要理解
到現在為止,已經可以分別用Nginx和uWSGI掛起伺服器了。說明這兩個部分都是通的:

web-server
web-uWSGI-Python
用uWSGI掛起Django:

uwsgi --http :8000 --module mysite.wsgi
這裡sWSGI會找到 mysite下的wsgi的配置檔案,即mysite/wsgi.py如果看到Django的“it worked!”資訊,則說明Django被成功掛起。

web-uWSGI-Django
通過socket連線Nginx和uWSGI
socket中文翻譯為套接字,它的作用就像一個聯結器,比方說把兩段水管連線起來,每段管子都有自己不同的編號,下面就來試驗下套接字的作用。
帶socket的Nginx配置多了這個部分:

upstream django {
    # server unit:///path/to/yourmysite/mysite.sock;
    server 127.0.0.1:8022; #for a webport socket
}
這是要說明監聽來自8022埠的請求,8022口做什麼了呢?

uwsgi --socket :8022 --wsgi-file test.py
8022掛起了最先的python測試檔案,如果有GET請求,則返回hello world。Nginx則設定為監聽8023埠。通過socket,有檢測到8023口的外部請求,則交給8022埠去處理,這就是socket的作用,非常靈活。也說明了這一套結構都通了:

Web-Nginx-Socket-uWSGI-Python
Django sockect
upstream django {
    server unit:///path/to/yourmysite/mysite.sock;
    # server 127.0.0.1:8022; #for a webport socket
}
重啟Nginx,掛起uWSGI:

uwsgi --socket mysite.sock --wsgi-file test.py
在當前專案下可以看到生成了空的檔案mysite.sock,2023口測試通過。

最後拉起整個Django專案:

uwsgi --socket mysite.sock --module mysite.wsgi
看到Django工作介面,完成,Done!


Web-Nginx-Socket-uWSGI-Python
常見錯誤
connect() to unix:mysite.sock failed (2: No such file or directory)
基本是路徑設定問題,upstrem和socket都要使用絕對路徑。
connect() to uunix:mysite.sock failed (13: Permission denied)
新增socket許可權:

uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=664 # (more sensible)

相關推薦

Nginx + uWSGI 部署Django站點

安裝和配置正常人都會,不用多說了 使用pip install uwsgi yum install nginx 1.使用nginx -t 檢視nginx.conf配置檔案的路徑: 配置檔案的結構如下: user www-data; work

django+nginx+uwsgi部署web站點

uwsgi+nginx+django環境:django:1.8.16 python:2.7.13pip:2.7uwsgi:2.0.15project路徑: /opt/cmdb/Uwsgi的安裝配置1、安裝python2.7 (省略安裝過程)2、安裝pip2.7 (省略安裝過程)3、安裝uwsgi(註意:要用

結合Nginx+Uwsgi部署Django項目

stat enable sed 能力 資料 ioerror 直接 water djang 大致想法以及背景: 剛開始創建Django項目,可以通過runserver命令更方便地調試程序,但是如果當一個項目完成了之後,需要部署到真正的環境,就需要考慮其穩定性。之前在寫畢設的

Nginx+Uwsgi部署Django專案

一、uwsgi介紹 uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI伺服器進行交換。 1、 WSGI / uwsgi / uWSGI WSGI是一種Web伺服器閘道器介面。它是一個Web伺服

使用Nginx+uWSGI部署Django專案

1.linux安裝python3環境 參考連結:https://www.cnblogs.com/zzqit/p/10087680.html 2.安裝uwsgi pip3 install uwsgi ln -s /usr/local/python3/bin/uwsgi /usr/local/bin

使用Nginx+uWSGI部署Django項目

djang 重啟 訪問 ams art pes python stop var 1.linux安裝python3環境 參考鏈接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安裝uwsgi pip3 install uws

nginx+uwsgi部署django提高併發的一些步驟

部署環境 ubuntu16.4 python3.X 虛擬環境(virtualenv或直接anaconda下conda環境也行) 一個可以執行的django專案 nginx uwsgi 第一步:安裝所需要的軟體包 1、python3.5、

從零開始搭建個人網站(6)nginx+uWSGI部署Django專案(上)

  Django雖然自帶一個Server,但只能作為開發時測試使用,我們需要一個可以穩定而持續的伺服器對網站進行部署,比如Apache, Nginx, lighttpd等,本篇將利用nginx和uWSGI部署Django網站專案。 前言 n

Django學習筆記五:通過nginx+uwsgi部署Django專案(暫時靜態檔案沒有部署上去)

概念 Nginx:是一款面向效能設計的HTTP伺服器,相較於Apache、lighttpd具有佔有記憶體少,穩定性高等優勢 uwsgi::是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是

跨過Nginx上基於uWSGI部署Django項目的坑

sse djiango weight http 自帶 true 自己的 eve setting 先說說他們的關系,Nginx和uWSGI都是Web服務器,Nginx負責靜態內容,uWSGI負責Python這樣的動態內容,二者配合共同提供Web服務以實現提高效率和負載均衡等目

Django+Nginx+uWSGI部署

3.5 退出 後臺運行 nbsp 前端 ups python gin 使用 一.介紹 Django的部署有多種方式,采用Nginx+uWSGI的方式是最常見的一種方式。在這種方式中,將Nginx作為服務器前端,接收Web的所有請求,統一管理請求。Nginx自己處理所有靜態

centos7下部署Djangonginx+uWSGI+Python3+Django)

sbin socket `` onf upload SQ fig 目錄 down 部署代碼後uWSGI需要重新啟動,關閉系統防火墻或者開放端口 系統版本:CentOS7.0 Python版本:Python3.6.3 Django版本:2.0.5 uWSGI版本:2.0

Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)

發生 manage virtual 反向代理服務器 centos 開源 -h sts mage 項目部署教程 在線演示 1.1.原理介紹 django 一個基於python的開源web框架 uwsgi 一是一個web服務器,也可以當做中間件 nginx 常用高

使用supervisor管理nginxuwsgi部署django項目

服務器 sig ogr star top uwsgi etc 執行 編輯 使用yum install supervisor ,該命令不會產出配置文件 需要執行下條命令: [root@VM_0_17_centos ~]# echo_supervisord_conf

centos+django+nginx+uwsgi 部署手記

1.安裝anaconda配置相關python環境 2.uwsgi配置 (1)安裝uwsgi pip install uwsgi Exception: you need a C compiler to build uWSGI yum install -y gcc gcc-c++

Django部署(Centos7+nginx+uwsgi+python3+django)

開發之路,羊腸九曲,荊棘密佈,幸得高人指點,前輩填坑,一路謹小慎微,終得工程圓滿;其間填坑之經驗,開路之歷程,皆為精華,不可棄之;記錄於此,以便事後回顧,亦想於有相關開發疑惑之同學做參考之用,文中如若有錯,懇請雅正,不勝感激。 環境 系統版本 centos7 p

nginx 基於uwsgi部署Django

1.安裝nginx yum install -y nginx(需要epel源) 2.安裝環境 可以考慮使用虛擬化環境,本處不再使用 3.安裝uwsgi yum groupinstall "Development tools" yum install zlib-devel bzip2-devel pc

uwsgi+nginx+Ubuntu部署Django專案(阿里雲)

如果使用預設的python   首先安裝程式需要的包apt-get install python-devapt-get install python-pipapt-get install net-toolsapt-get install lsof安裝資料庫apt-get in

nginx基於uwsgi部署Django

location set sys mys 目錄 max zlib min pin 1.安裝nginx yum install -y nginx(需要epel源) 2.安裝uwsgi yum groupinstall "Development tools"

uwsgi部署django項目—報內部錯誤

reads 查看 cnblogs work soc pre -- 機器 執行命令 在django項目目錄下建立uwsgi.ini文件: [uwsgi] #使用nginx連接時使用 #socket=127.0.0.1:8080 #直接做web服務器使用 http=127.0.