在Linux机器上配置NUD
博文實(shí)踐操作平臺(tái):
ubuntu10.10
?? 如果說要簡(jiǎn)單的部署基于Django框架的web服務(wù),大抵apache+mod_python就夠了。但是apache+fastcig部署的模式由于自身的局限性,使得這種部署方式只適用于并發(fā)量少的性能要求較低的服務(wù)。現(xiàn)在市場(chǎng)上比較流行的另一種呢?從一定程度上說,它可以解決apache+mod_python這種方式的部分缺陷。這就是nginx+uwsgi+Django.
?? 如果說你已經(jīng)了解NUD的好處,并打算從頭開始學(xué)習(xí)它,那么我的分享可能值得你一試。
?? 我還是先來簡(jiǎn)單講一下NUD個(gè)各部分之間的關(guān)系吧;
NGINX:這是一個(gè)可以獨(dú)立運(yùn)行的web服務(wù)器。它上面不僅可以跑web服務(wù),而且還可以跑mail或者其他服務(wù)(沒試驗(yàn)配置過)。上網(wǎng)收一下你就會(huì)知道。NGNIX會(huì)有諸多好的性能。在這兒NGINX就是一個(gè)簡(jiǎn)單的web服務(wù)器。注意:他不是tomcat那樣是個(gè)容器,它不是容器!!!至于它的特殊之處我后面會(huì)說;
UWSGI:uwsgi是CGI的一種。也是可以獨(dú)立運(yùn)行的。自然是一種類CGI,那么自然他能給處理我們的請(qǐng)求。并啟動(dòng)DJango框架。
DJango:開發(fā)框架。
三者之間的關(guān)系是怎么樣的呢?
首先,服務(wù)器跑著nginx,ugwsi(它們都是獨(dú)立運(yùn)行的嘛,裝上就可以啟動(dòng)了)。如果你已經(jīng)配置NUD了。當(dāng)這兩個(gè)服務(wù)啟動(dòng)的時(shí)候。基于Django開發(fā)的APP將被UWSGI服務(wù)Hood住。當(dāng)一個(gè)請(qǐng)求到達(dá)Nginx的時(shí)候。nginx接受該請(qǐng)求。并在我們的配置文件中找到請(qǐng)求的URI是要被轉(zhuǎn)向UWSGI服務(wù)。那么這個(gè)服務(wù)將被格式化后轉(zhuǎn)到UWSGI了。
UWSGI收到該格式化的請(qǐng)求后呢? 它將會(huì)啟動(dòng)新的進(jìn)程(有可能是進(jìn)程池里面調(diào)度一個(gè))去解析我們的請(qǐng)求。
UWSgI在啟動(dòng)的時(shí)候,它會(huì)監(jiān)聽在本地的某個(gè)端口,可能是UNIX套接字。負(fù)責(zé)接受Nginx轉(zhuǎn)過來的請(qǐng)求。那么為什么還要使用nginx呢,單端運(yùn)行uwsgi不行嗎?這肯定是不行的。首先,nginx可以為我們提供它的很多優(yōu)秀的性能。比如說抵消后,高并發(fā),以及良好的負(fù)載均衡性能。其次,uwsgi是類CGI的一種,他接受的是標(biāo)準(zhǔn)的請(qǐng)求格式,它不能直接接受我們發(fā)出的HTTP請(qǐng)求。
大概了解的一下原理,下面就是一些基本的配置:
首先要配置的是uwsgi,這里需要?jiǎng)?chuàng)建uwsgi的配置文件,在django的根目錄添加一個(gè).xml文件,可以命名為config.xml.寫入如下內(nèi)容:
<?xml versiong="1.0" encodong:"utf-8"?>
<uwsgi>
? <socket>127.0.0.1:9999</socket>
? <module>wsgi</module>
</uwsgi>
其中127.0.0.1:9999是uwsgi啟動(dòng)是監(jiān)聽的地址。這兒是本機(jī)的9999端口。
Module就是app中需要給出的官員怎么讓uwsgi來hook住django app;
我現(xiàn)在在同一目錄下面新建一個(gè)wsgi.py的文件。寫入如下Python代碼:
import os,sys
if not os.path.dirname(__file__) in sys.path[:1]:
??? sys.path.insert(0,os.path.dirname(__file__))
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
?
這里面,需要將app的settings全局配置模塊假如到PYTHON_PATH.一邊Py解釋器能夠找到。然后改腳本創(chuàng)建一個(gè)SGI處理器。當(dāng)我們啟動(dòng)UWSGI服務(wù)的時(shí)候?qū)⑽覀儎?chuàng)建的配置文件指定給服務(wù)進(jìn)程。那么UWSGI服務(wù)就能Hook住app了。
接下來配置nginx:
1,找到NGINX的配置我恩見nginx.conf,通過apt安裝的服務(wù)程序中,這個(gè)為文件位于:
/etc/nginx/nginx.conf
如果只是簡(jiǎn)單的使用,不做服務(wù)器性能優(yōu)化,不做負(fù)載均衡和其他高級(jí)操作。僅僅是使這個(gè)web跑起來。那么只需要在這個(gè)文件中加入一個(gè)虛擬主機(jī)配置節(jié)點(diǎn)就行了:
server{
??? listen 80;
??? index index.html
??? location /{
??????? uwsgi_pass 127.0.0.1:9999;
??????? include uwsgi_params;
??? }
}
需要說明一下,listen端口中,如果要對(duì)客戶端開放web服務(wù)。那么直接寫80即可。如果只對(duì)本機(jī)或者某機(jī)器開發(fā)。那么需要這樣ip:port
index 不用講了是索引
location 節(jié)點(diǎn)是告訴我們這么處理特定的請(qǐng)求。本配置例子中對(duì)所有80端口的請(qǐng)求都會(huì)轉(zhuǎn)向uwsgi服務(wù)。127.0.0.1:9999就是我在congfig.xml中的配置地址了。
?
最后就是這樣啟動(dòng)服務(wù)了:
1,啟動(dòng)uwsgi服務(wù),運(yùn)行如下命令:
uwsgi -x config.xml文件的路徑--絕度路徑
?
2,啟動(dòng)nginx,運(yùn)行如下命令:
nginx
或者 service nginx start
完畢!
轉(zhuǎn)載于:https://blog.51cto.com/nimbleit/789446
總結(jié)
以上是生活随笔為你收集整理的在Linux机器上配置NUD的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: /boot/grub/grub.conf
- 下一篇: python参数中的*和**