當前位置:首頁 » 編程語言 » nginxpythondjango

nginxpythondjango

發布時間: 2023-08-28 10:31:00

⑴ 如何用Nginx部署Django

如果你在windows上開發的django項目。部署的話,需要分三步。
第一步:在linux下下載python用的依賴包,搭建python環境。將windows下的項目復制到linux下,使用django自帶服務進行啟動。
第二步:下載uwsgi模塊並且編寫配置文件來替代django自帶的服務模塊。
第三步:下載nginx包,編譯安裝。然後創建配置文件,配置nginx啟動django項目的信息。然後訪問即可。

⑵ Nginx+Python 怎麼搞才好

介紹NGINX和Python如何配合使用
Python以易用,有趣而出名,它讓軟體開發變得簡單,據說運行性能也高於其他腳本語言(php最新版本PHP 7的性能好像可以與Python一較高下)
每一個人都希望自己的網站或應用可以運行得更快。但是每一個網站在大流量和流量激增時都容易遇到性能問題,甚至當機,業務繁忙時,這種情況會更加糟糕。其實無論流量是穩定增長,還是陡峭增長,所有網站都面臨性能和當機的困擾。

NGINX和NGINX插件的出現就是為了解決這個問題。他們通過三種不同的方式來改善網站性能:

1、web服務 – 最初開發NGINX是為了解決 C10K 問題 – 可以輕松支撐10,000或更多的並發連接。使用NGINX為你的Python應用提供web服務,可以讓你的網站運行更快,即便在小流量的情況下也有效果。當你的用戶成千上萬時,確定無疑,它可以提供更高的性能,更少的崩潰,以及更少的當機時間。你也可以使用NGINX提供靜態文件緩存或者微緩存服務,一個獨立的NGINX反向代理也是很好的選擇(見下一段)。

2、反向代理– 你可以在應用服務的前端用NGINX做反向代理。NGINX接收Web請求並分發到你的應用服務。這個「怪招」可以讓你的網站運行得更快,減少當機,消費更少的服務資源,而且可以提高安全性。你也可以在反向代理伺服器上緩存靜態資源(非常高效),添加靜態內容的微緩存,以減少應用自身的負載,等等。

3、為多個應用服務提供動態均衡 – 通過布署反向代理服務。通過多應用服務並行運行和NGINX或者NGINX插件來做流量負載均衡。通過這種布署,根據流量需要,增長穩定性和運行時間需要,你可以很輕松地在線擴展網站性能。如果你需要讓給定用戶的會話在同一個服務上,你只需要配置負載均衡以支持會話持久化。

不管是為你的Python應用提供網站服務,還是做反向代理服務,還是做負載均衡,或者三者都用,NGINX和NGINX插件都會給你帶來優勢。

這是本系列(由兩部分組成)中的第一篇文章,將會介紹五個提升Python應用性能的技巧,包括如何使用NGINX或NGINX插件提供web服務,如何實現靜態文件的緩存,如何為動態內容做微緩存。在第二部分,我們將介紹如果用NGINX或NGINX插件提供反向代理服務,以及如何為多個應用服務提供負載均衡。

技巧 1– 定位Python性能瓶頸
有兩種截然不同的情況會讓你的Python應用遇到性能問題– 第一,每天有海量用戶;第二,高負載。大部分網站長都不需要擔心性能問題,因為他們的負載很小,根據我們的拙見,他們應該努力降低響應時間。將響應時間控制在毫秒級是一個非常困難且不被關注的工作。但可以讓我們的用戶體驗更好,業績更優秀。

但是這篇博文和剩下的第二部分,將關注每個人都確實關注的場景:當網站繁忙時可能會出現的性能問題,如性能大幅下降和當機。還有黑客模擬大量用戶攻擊造成的流量激增,同時提高網站性能也是處理攻擊的重要步驟。

像Apache HTTP Server這樣的系統會為每個用戶分配一定數量的內存,隨著用戶的不斷增加,物理內存不堪重負。伺服器開始使用磁碟的交換分區,性能直線下降,性能問題和當機接踵而至。這篇博文中所介紹的遷移到NGINX,有助於解決這一問題。

Python特別容易出現內存相關的性能問題,因為與其他腳本語言相比,Python通常是使用更多的內存來執行任務(所以執行速度快)。所以在相同條件下,與用其他語言寫的應用相比,你的Python應用更容易在少量用戶的情況下而「絆倒」。

優化你的應用對解決問題會有所幫助,但要解決流量相關的性能問題,這通常不是最好最快的方式。這篇博文及剩下的第二部分,將介紹一種最好並且最快的方式。在實施這些措施之後,再採取一切方法優化你的應用,或者使用微服務架構重寫。

技巧 2 – 選擇單服務或者微服務布署
小網站在單個伺服器上就可以運行得很好。大的網站需要多個伺服器。但如果你處於中間地帶–或者你的網站從一個小網站變成一個大網站– 你可以做一些有趣的選擇。

如果你使用單機布署,大流量和瀏覽激增會給你帶來很大的風險。你的擴展手段非常有限,無外乎優化你的應用,把web服務切換到NGINX,使用一個更大更快的伺服器,或者使用內容分發網路(CDN)。所有這些可選項的實施都耗時耗錢,而且在實施過程中還有引入bug的風險。

另外一個很顯然的風險是單機布署存在單點故障問題 – 很多問題可以導致你的站點掛掉,而且沒有快速簡單的解決方案。

使用NGINX做為應用的代理服務

如果你把服務切換成NGINX並且使用單機布署,你可以自由地選擇使用開源的NGINX或者NGINX插件。NGINX包括企業級支持和一些擴展功能。像實時活動監測這樣的擴展功能是支持單機布署的。如果做為反向代理,採用分布式布署,你可以使用其他NGINX插件,如負載均衡和會話持久化。

有很多事情都要考慮周詳,除非你確定你的網站在未來很長時間內都是一個小網站,不需要關心當機問題,否則,你要明白,單機布署存在很多風險。分布式布署比較易於擴展 – 單點故障可以通過工程解決,性能可以按需調整,可以快速擴充伺服器能力。

技巧 3 – 使用NGINX替換你的Web服務
在Web時代的早期,Apache就是web服務的同義詞。但NGINX自2000年出現以來,迅速流行開來;現在已經是排名第一的web服務,被1,000, 10,000多個網站和世界上最繁忙的100,000多個網站使用。

NGINX最初是為了解決C10K問題而開發 – 在給定內存預算下支持10,000+並發。其他web服務需要為每個連接分配內存塊,所以他們會耗盡物理內存,當數以千記的用戶在同一時間訪問一個網站,它會變慢甚至崩潰。NGINX處理器可以單獨處理一個請求,也可以優雅地擴展,同時處理多個用戶。(這可以很好地解決額外問題,後面會詳述。)

一個高層NGINX架構圖如下所示。

NGINX 架構, 選自開源應用架構第二卷

在上圖,一個Python應用服務被布署在後端的應用服務塊中,如圖所示,它通過FastCGI被訪問。NGINX不「知道」怎麼運行Python,所以它需要一個網關連結需要的環境。FastCGI是一個被PHP,Pyhton和其他語言廣泛使用的介面。

但是,連結Python和NGINX的流行方案是網路服務網關介面(WSGI)。WSGI工作在多線程和多進程環境下,所以他兼容本文所提到的所有布署選項。

如果你將web服務遷移到NGINX,這里有一些有用的軟體:

Configuring gunicorn – 「Green Unicorn」是一個流行的WSGI服務,配合NGINX使用。
Configuring uWSGI – 另一個流行的WSGI服務,配合NGINX使用. uWSGI包含NGINX指令支持。
Using uWSGI, NGINX, and Django – 一個流行的Python web框架。

下面的代碼片斷將向你展示如何配置NGINX和uWSGI – 這個案例中的工程使用Python框架Django。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

http
{
...
upstream
django {
server
127.0.0.1:29000;
}

server
{
listen
80;
server_name
myapp.example.com;

root
/var/www/myapp/html;

location
/ {
index
index.html;
}

location
/static/
{
alias
/var/django/projects/myapp/static/;
}

location
/main {
include
/etc/nginx/uwsgi_params;
uwsgi_pass
django;

uwsgi_param
Host $host;
uwsgi_param
X-Real-IP $remote_addr;
uwsgi_param
X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param
X-Forwarded-Proto $http_x_forwarded_proto;
}
}
}

技巧 4 – 實現靜態文件緩存
緩存靜態內容包括:為不經常變更的文件保存副本 – 不經常是指數小時或者永遠 – 副本保存在其他位置而不是應用服務中。典型的靜態內容是網頁中經常用到的JPEG圖片。

緩存靜態文件是提升應用性能的常用手段,經常被用到:

1、用戶瀏覽器
2、互聯網提供商 – 從公司網路到互聯網提供商(ISP)
3、web服務, 也就是本文所講的

在web服務端實現靜態文件緩存有兩個好處:
1、為用戶提供快速服務 – NGINX 專門為靜態文件緩存做過優化,對靜態內容請求的處理比應用服務要快。
2、減少應用服務負載– 應用服務不需要處理已經緩存的靜態文件,已經由web服務接管。

緩存靜態文件在單伺服器上也可以很好的實現,但底層硬體資源仍然是由web服務和應用服務所共享。如果web服務要處理頻率的靜態文件訪問 – 甚至是海量 – 應用服務可以使用的硬體資源就會變少,一些功能可能就會變慢。

如果要支持瀏覽器緩存,需要正確設置靜態文件的頭部信息。如HTTPCache Control(特別是它的max age設置),Expires,和Entity標記。如果想深入了解,參見NGINX Plus的管理員指南:使用NGINX為uWSGI和Django提供應用網關

下面的NGINX配置代碼用來緩存靜態文件,包括JPEG文件,GIF文件,PNG文件,MP4文件,Powerpoint文件,和一些其他文件,請把www.example.com替換成你自己的網址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

server
{
#
substitute your web server's URL for

"www.example.com"
server_name
www.example.com;
root
/var/www/example.com/htdocs;
index
index.php;
access_log
/var/log/nginx/example.com.access.log;
error_log
/var/log/nginx/example.com.error.log;

location
/ {
try_files
$uri $uri/ /index.php?$args;
}

location
~ \.php$ {
try_files
$uri =404;
include
fastcgi_params;
#
substitute the socket, or address and port, of your Python server
fastcgi_pass
unix:/var/run/php5-fpm.sock;
#fastcgi_pass
127.0.0.1:9000;
}

location
~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg
|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid
|midi|wav|bmp|rtf)$
{
expires
max;
log_not_found
off;
access_log
off;
}
}

技巧 5 – 實現微服務
微緩存可以很明顯的大幅提升Python, PHP和一些其他語言開發的應用服務性能,根據是否適合緩存,可以把網頁分成三類:

靜態文件 – 這類文件適合緩存,見技巧4所述。
動態,非個性化頁面 – 因為它們需要刷新,這些文件通常不適合做緩存。例如未登錄前的電商用戶所看到的頁面(見下一點) – 可用商品和推薦相似商品經常要發生改變,所以必須生成新頁面。但是,如果有另外一個用戶,在10毫秒之後發送同樣請求,將前一用戶看到的網頁緩存並發送給後一用戶就變得合情合理。
動態,個性化頁面 –這些不適合緩存,因為它們是針對具體用戶的,同一個用戶不希望兩次看到同一個個性化頁面。例如一個電商用戶登錄後的頁面不應該展示給另外一個用戶。

靜態文件和非個化性動態內容可以緩存

微緩存適用於上面提到的第二類頁面–動態,非個性化頁面。「微」是指很短的時間。如果你的網站在一秒內要多次生成同一個頁面,如果你把這個頁面只緩存一秒,並不影響該頁面的刷新。但這個短暫的緩存可以極大的降低應用服務的負載,特別是流量較大時。將原來在一個緩存區間內,同一內容生成10,或者20,甚至100次,調整為只生成一次並緩存,為其他用戶提供緩存內容。

這個效果是很神奇的。一個服務如果一秒鍾要處理大量請求會變得很慢,但如果只處理一個請求,就會變得很快。(包括任何個性化頁面)。我們自己的Owen Garrett有一篇博客對微服務的優勢做了詳情介紹,裡面還有配置代碼。主要要修改的地方是把代理緩存過期時間設為一秒,只需要幾行配置代碼就可以搞定。

1
2
3
4
5
6

proxy_cache_path
/tmp/cache keys_zone=cache:10m levels=1:2

inactive=600s max_size=100m;
server
{
proxy_cache
cache;
proxy_cache_valid
200

1s;
...
}

更多配置樣例,參見Tyler Hicks Wright關於Python和uWSGI如何使用NGINX的博客。

總結
在第一部分,我們回顧了一下在單機環境下提高Python應用性能的解決方案,還有緩存的使用,在單機情況下緩存可以應用於反向代理伺服器或者獨立緩存服務(緩存比獨立服務性能更好)。在下一部分,我們將會介紹分布式環境下的性能提升方案。

如果你想在應用中使用更多的NGINX Plus特性,如實時事件監測,在線修改配置,你可以馬上開通30天免費試用,或者聯系我們,可以獲得一個真實例子。

⑶ 想學Python自動化運維,怎麼學

現在市面上的自動化運維崗位主要技能要求是:Python、Django、Flask、Linux、Shell、Docker、Nginx,這些在傳智播客的課程裡面都會講到,3天課程主要是講Shell編程,還有Linux四劍客等高級命令,自動化運維主要是開發運維平台,也就是說側重點在開發,市面上很多企業的運維平台都是用Django、Flask框架開發的,你們的師兄師姐有很多現在在公司裡面做自動化運維的。

熱點內容
12123六位密碼是多少 發布:2025-02-04 11:34:43 瀏覽:797
奧賽編程課 發布:2025-02-04 11:33:59 瀏覽:375
無法打開共享文件夾 發布:2025-02-04 11:29:50 瀏覽:635
電腦配置有哪些方面要求 發布:2025-02-04 11:27:38 瀏覽:525
安卓手機的米加大學什麼時候更新 發布:2025-02-04 11:26:39 瀏覽:705
長城哈弗f5潮版有哪些配置 發布:2025-02-04 11:24:22 瀏覽:540
編程兩階段 發布:2025-02-04 11:23:00 瀏覽:154
倒鉤編程 發布:2025-02-04 11:13:48 瀏覽:469
記事本如何加密 發布:2025-02-04 11:13:37 瀏覽:119
電腦無法連接後台伺服器 發布:2025-02-04 11:13:35 瀏覽:476