最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Nginx+uWsgi實現(xiàn)Python的Django框架站點動靜分離

 更新時間:2016年03月21日 16:04:21   作者:啃先生  
這篇文章主要介紹了使用Nginx+uWsgi實現(xiàn)Python的Django框架站點動靜分離的部署實例,即靜態(tài)由Nginx處理而Python頁面由Django自帶的HTTP服務器處理,需要的朋友可以參考下

由于:

Django處理靜態(tài)文件不太友好;
以后有可能需要處理php或者其他資源的請求;

所以考慮結合nginx,使用nignx做它擅長的路由分發(fā)功能;同時做動靜分離,即Http請求統(tǒng)一由Nginx進行分發(fā),靜態(tài)文件由Nginx處理,并返回給客戶端;而動態(tài)的請求,則分發(fā)到uWsgi,由uWsgi再分發(fā)給Django進行處理。即客戶端 <-> nginx <-> socket <-> uwsgi <-> Django

一、環(huán)境

系統(tǒng):centOS 6

  • python: 2.7(注意:Django要在2.7版本或以上的python來 )
  • nginx
  • uswgi

所以,安裝前,先在控制臺輸入python —version查看當前python的默認版本,如果在2.7以下,則修改默認版本。(詳見附錄)

二、安裝nginx、uWsgi

安裝

nginxsudo yum install nginx

安裝

pipsudo yum install python-pip

安裝

uWsgisudo pip uwsgi


三、測試nginx、uWsgi
1. 測試nginx啟動測試nginx,看是否安裝成功啟動 sudo service nginx start然后在瀏覽器中,輸入ip地址,看是否出現(xiàn)nginx的歡迎頁面,出現(xiàn)則說明安裝成功
2. 測試uWsgi在服務器上做任意目錄下(一般在home下的某一目錄),新建test.py,如下:

# test.pydef 
application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

啟動以Http方式訪問的uWsgi,在test.py同一目錄下,輸入如下命令行(8001是監(jiān)聽的端口,可以改成你想要的端口)

uwsgi --http :8001 --wsgi-file test.py

然后在瀏覽器中,輸入ip地址:8001,看是否響應hello world,是則說明安裝成功
P.S. 由于開始時,uwsgi的安裝使用了錯誤的python版本,所以在我的服務器上,uwsgi正確地可執(zhí)行命令暫時是:/usr/src/download/uwsgi-2.0.10/uwsgi即完整的命令行是(本文所有的uwsgi命令同此):/usr/src/download/uwsgi-2.0.10/uwsgi --http :8001 --wsgi-file test.py
--http :8001 --wsgi-file test.py至此,uwsgi和nginx安裝成功。接下來把nginx、uwsgi、django關聯(lián)起來。在它們的協(xié)作之下,達到我們想要的目標。

四、連接Django和uWsgi
如上uWsgi的測試那樣,uWsgi監(jiān)聽8001端口,并把請求分發(fā)給test.py,python會執(zhí)行這個文件,如果我們把test.py分給Django的入口文件,那么就實現(xiàn)了Django和uWsgi的連接。所以,要做的事情有兩步:

在項目目錄下創(chuàng)建wsgi.py文件
啟動uWsgi,使用它的wsgi-file指向wsgi.py

wsgi.py內(nèi)容如下:

"""
WSGI config for WHPAIWechat project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""

import osfrom django.core.wsgi import 
get_wsgi_applicationos.environ.setdefault("DJANGO_SETTINGS_MODULE", "WHPAIWechat.settings")
application = get_wsgi_application()

啟動以Http方式訪問uWsgiuwsgi --http :8000 --chdir /home/jiayandev/WHPAIWechat/ --wsgi-file WHPAIWechat/wsgi.py
瀏覽器訪問 ip地址:8000,加上必要的路由,即可訪問之前寫好的python程序:例如[http://112.74.73.31:8000/wechat/call]
P.S. 你是否關注到,啟動uwsgi即可,而無需再啟動Django了?

五、連接uWsgi和nginx
接下來,打通 uWsgi和 nginx之間的連接,它們是通過socket來連接的。第四節(jié)所講的鏈接 swgi和Django,我們用瀏覽器訪問是能得到正確的響應的,說明連接成功。那么只要在nginx上,實現(xiàn)某些規(guī)則下,把前端的請求轉發(fā)到此端口即可。要做的事情非常簡單,即配置nginx的配置文件即可,一般在 /etc/nginx/conf.d/default.conf中。這里,我只設置幾條簡單的規(guī)則

url包含.css、.js等服務器特定目錄,設置根目錄
以上都不匹配的的訪問分發(fā)到uwsgi上的, nginx轉發(fā)給uswgi處理

更多規(guī)則可以視業(yè)務情況而定,完整的配置如下:

upstream django {
  server 127.0.0.1:8000; # 注意8000是上述uwsgi監(jiān)聽的端口
}
server {
  listen    80 default_server;
  server_name _;

  #charset koi8-r;

  #access_log logs/host.access.log main;

  # Load configuration files for the default server block.
  include /etc/nginx/default.d/*.conf;

  location = /404.html {
    root  /usr/share/nginx/html;
  }

  # redirect server error pages to the static page /50x.html
  #
  error_page  500 502 503 504 /50x.html;
  location = /50x.html {
    root  /usr/share/nginx/html;
  }

  location ~ \.html$ {
        root /usr/share/nginx/html/front;
        index index.html index.htm;
  }

   location ~ \.(png|jpg|jpeg|css|img|js|flv|swf|download|eot|svg|ttf|woff|woff2|otf)$ {
        root /usr/share/nginx/html/front;
  }


  # 以上都不匹配的的訪問分發(fā)到uwsgi上
  location / {
    include    /etc/nginx/uwsgi_params; #詳細看下文
    uwsgi_pass   django;
  }

  * # PHP分到 9000端口**
  #
  #location ~ \.php$ {
  #  root      html;
  #  fastcgi_pass  127.0.0.1:9000;
  #  fastcgi_index index.php;
  #  fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  #  include    fastcgi_params;
  #}*
}

同時,uswgi_param內(nèi)容如下,照抄即可

uwsgi_param QUERY_STRING    $query_string;
uwsgi_param REQUEST_METHOD   $request_method;
uwsgi_param CONTENT_TYPE    $content_type;
uwsgi_param CONTENT_LENGTH   $content_length;

uwsgi_param REQUEST_URI    $request_uri;
uwsgi_param PATH_INFO     $document_uri;
uwsgi_param DOCUMENT_ROOT   $document_root;
uwsgi_param SERVER_PROTOCOL  $server_protocol;

uwsgi_param REMOTE_ADDR    $remote_addr;
uwsgi_param REMOTE_PORT    $remote_port;
uwsgi_param SERVER_PORT    $server_port;
uwsgi_param SERVER_NAME    $server_name;

配置完成后,重啟或者reload nginx配置即可生效
重啟:

sudo service nginx restart

reload:

sudo service nginx reload

然后直接訪問,看看有什么不一樣:
http://youIP/front/index.html
http://youIP/statics/index.html
http://youIP/(加上路由信息),例如 http://112.74.73.31/wechat/call
我們這里主要先關注訪問django,如果http://112.74.73.31/wechat/call返回的信息跟第四節(jié)的一樣,說明nginx和uwsgi也連接起來了,至此,nginx、uwsgi、django順利連接完成。

六、優(yōu)化uwsgi的啟動
第三節(jié)、第四節(jié)介紹的啟動uwsgi服務時,我們都是使用命令行的方式啟動和設置參數(shù)的,這樣不好記,有可能會忘記參數(shù) 等等。這里介紹另一種設置參數(shù)的方式,即用配置文件記錄uwsgi的參數(shù),啟動時,從配置文件里加載參數(shù)。參數(shù)如下

#WHPAIWechat_uwsgi.ini[uwsgi]
socket = 127.0.0.1:8000
chdir = /home/jiayandev/WHPAIWechat/
wsgi-file = WHPAIWechat/wsgi.py
processes = 4
threads = 2
master=True #設置此參數(shù),有一個主進程
pidfile= pidfile/project-master.pid #主進程id寫入文件里
vacuum=True #退出時,清理環(huán)境
daemonize = uwsgi.log #守護進程的方式運行,log日志存在此log文件里

啟動uwsgi命令變成uwsgi WHPAIWechat_uwsgi.ini

相關文章

  • Pygame實戰(zhàn)練習之飛機大戰(zhàn)游戲

    Pygame實戰(zhàn)練習之飛機大戰(zhàn)游戲

    飛機大戰(zhàn)想必是很多人童年時期的經(jīng)典游戲,我們依舊能記得抱個老人機娛樂的場景,下面這篇文章主要給大家介紹了關于如何利用python寫一個簡單的飛機大戰(zhàn)小游戲的相關資料,需要的朋友可以參考下
    2021-09-09
  • 分析python請求數(shù)據(jù)

    分析python請求數(shù)據(jù)

    這篇文章我們給大家整理了關于python請求數(shù)據(jù)的相關知識點內(nèi)容,有興趣和需要的朋友們可以學習下。
    2018-08-08
  • 利用Python循環(huán)(包括while&for)各種打印九九乘法表的實例

    利用Python循環(huán)(包括while&for)各種打印九九乘法表的實例

    下面小編就為大家?guī)硪黄肞ython循環(huán)(包括while&for)各種打印九九乘法表的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望對大家有所幫助
    2017-11-11
  • python解析含有重復key的json方法

    python解析含有重復key的json方法

    今天小編就為大家分享一篇python解析含有重復key的json方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 利用Python pandas對Excel進行合并的方法示例

    利用Python pandas對Excel進行合并的方法示例

    這篇文章主要給大家介紹了關于利用Python pandas對Excel進行合并的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Python爬蟲之正則表達式的使用教程詳解

    Python爬蟲之正則表達式的使用教程詳解

    本文實例代碼相結合給大家詳細介紹了Python爬蟲之正則表達式的使用,包括參數(shù)介紹,最常規(guī)的匹配,匹配目標,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-10-10
  • python爬蟲框架feapder的使用簡介

    python爬蟲框架feapder的使用簡介

    這篇文章主要介紹了python爬蟲框架feapde的使用簡介,幫助大家更好的理解和學習使用python爬蟲,感興趣的朋友可以了解下
    2021-04-04
  • 詳解Python中string模塊除去Str還剩下什么

    詳解Python中string模塊除去Str還剩下什么

    這篇文章主要介紹了詳解Python中string模塊除去Str還剩下什么,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Python RabbitMQ消息隊列實現(xiàn)rpc

    Python RabbitMQ消息隊列實現(xiàn)rpc

    這篇文章主要介紹了python 之rabbitmq實現(xiàn)rpc,主要實現(xiàn)客戶端通過發(fā)送命令來調用服務端的某些服務,服務端把結果再返回給客戶端,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python tkinter實現(xiàn)下載進度條及抖音視頻去水印原理

    python tkinter實現(xiàn)下載進度條及抖音視頻去水印原理

    這篇文章主要介紹了python tkinter實現(xiàn)下載進度條及抖音視頻去水印原理,幫助大家更好的利用python,感興趣的朋友可以了解下
    2021-02-02

最新評論

榆林市| 巩留县| 广西| 阜城县| 阿图什市| 金堂县| 浦县| 广汉市| 金乡县| 广河县| 本溪市| 武平县| 广德县| 南陵县| 昔阳县| 阿克| 琼结县| 仙桃市| 福州市| 武安市| 合阳县| 新野县| 黎川县| 报价| 和政县| 仙居县| 灵石县| 沾化县| 九江市| 新竹县| 乐陵市| 东乡族自治县| 临猗县| 扶绥县| 萝北县| 商丘市| 贵定县| 化德县| 沅江市| 杂多县| 武清区|