整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Centos6下利用nginx+uwsgi+flas

          Centos6下利用nginx+uwsgi+flash發布網站 下

          案二:利用nginx+uwsgi發布flask

          參考:https://www.cnblogs.com/vijayfly/p/6290773.html

          思路:修改uwsgi的ini配置文件,把http換為socket就可以了。Nginx的配置文件在/etc/nginx/config/config.d/下面。利用nginx監聽的9000端口http協議訪問,讓后利用socket協議,轉發到uwsgi監聽的8001端口上,讓后通信就可以了。

          兩個配置文件

          uwsig.ini文件

          [uwsgi]

          # manage.py文件所在目錄

          chdir=/root/flask

          callable=app

          # flask文件名

          wsgi-file=server5.py

          # 進程數

          processes=2

          # 使用5001端口

          socket=127.0.0.1:5001

          # 日志輸出目錄

          daemonize=/root/flask/flask.log

          pidfile=project-master.pid

          stats=127.0.0.1:9191

          default.conf文件

          server {

          listen 9000;

          server_name localhost;

          charset utf-8;

          access_log /root/flask/access.log;

          error_log /root/flask/error.log;

          client_max_body_size 100M;

          location / {

          include uwsgi_params;

          uwsgi_pass 127.0.0.1:5001;

          uwsgi_param UWSGI_PYHOME /usr/bin/python3;

          uwsgi_param UWSGI_CHDIR /root/flask;

          uwsgi_param UWSGI_SCRIPT server5:app;

          }

          }

          uwsgi uwsig.ini

          Service nginx start

          Service nginx retart #stop

          Killall -9 uwsig

          ps -ef|grep nginx

          ps -ef|grep uwsig

          netstat -tunlp|grep nginx

          netstat -tunlp|grep uwsig

          nginx的權限問題(13: Permission denied)解決辦法

          補充問題:有時啟動nginx,運行后有問題,查看log日志

          四、SELinux設置為開啟狀態(enabled)的原因。

          4.1、查看當前selinux的狀態。

          1. /usr/sbin/sestatus

          4.2、將SELINUX=enforcing 修改為 SELINUX=disabled 狀態。

          1. vi /etc/selinux/config

          2. #SELINUX=enforcing

          3. SELINUX=disabled

          4.3、重啟生效。reboot。

          1. reboot

          .安裝uwsgi

          ubuntu有uwsgi的ppa

          add-apt-repository ppa:stevecrozz/ppa
          apt-get update
          apt-get install uwsgi
          

          2. 用uwsgi代替mod_wsgi

          nginx的整體配置說來話長,我也不再羅嗦了,假設已經明白nginx的基本配置,那么uwsgi就類似這么配置:

          location / {
           include uwsgi_params
           uwsgi_pass 127.0.0.1:9090
          }
          

          這就是把所有url傳給9090端口的uwsgi協議程序來互動。

          再到project目錄建立myapp.py,使得application調用框架的wsgi接口,比如web.py就是

          ......
          app=web.application(urls, globals())
          application=app.wsgifunc()
          

          再比如django就是

          .......
          from django.core.handlers.wsgi import WSGIHandler
          application=WSGIHandler()
          

          然后運行uwsgi監聽9090,其中-w后跟模塊名,也就是剛才配置的myapp

          uwsgi -s :9090 -w myapp
          

          運行網站發現已經部署完成了。

          3. uwsgi的參數

          以上是單個project的最簡單化部署,uwsgi還是有很多令人稱贊的功能的,例如

          并發4個線程

          uwsgi -s :9090 -w myapp -p 4
          

          主控制線程+4個線程

          uwsgi -s :9090 -w myapp -M -p 4
          

          執行超過30秒的client直接放棄

          uwsgi -s :9090 -w myapp -M -p 4 -t 30
          

          限制內存空間128M

          uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128
          

          服務超過10000個req自動respawn

          uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000
          

          后臺運行等

          uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log
          

          4.為uwsgi配置多個站點

          為了讓多個站點共享一個uwsgi服務,必須把uwsgi運行成虛擬站點:去掉“-w myapp”加上”-vhost”

          uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost
          

          然后必須配置virtualenv,virtualenv是python的一個很有用的虛擬環境工具,這樣安裝

          apt-get install python-setuptools
          easy_install virtualenv
          

          然后設置一個/多個app基準環境

          virtualenv /var/www/myenv
          

          應用環境,在此環境下安裝的軟件僅在此環境下有效

          source /var/www/myenv/bin/activate
          pip install django
          pip install mako
          ...
          

          最后配置nginx,注意每個站點必須單獨占用一個server,同一server不同location定向到不同的應用不知為何總是失敗,我猜也算是一個bug。

           server {
           listen 80;
           server_name app1.mydomain.com;
           location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:9090;
           uwsgi_param UWSGI_PYHOME /var/www/myenv;
           uwsgi_param UWSGI_SCRIPT myapp1;
           uwsgi_param UWSGI_CHDIR /var/www/myappdir1;
           }
           }
           server {
           listen 80;
           server_name app2.mydomain.com;
           location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:9090;
           uwsgi_param UWSGI_PYHOME /var/www/myenv;
           uwsgi_param UWSGI_SCRIPT myapp2;
           uwsgi_param UWSGI_CHDIR /var/www/myappdir2;
           }
           }
          

          如此這般,重啟nginx服務,兩個站點就可以共用一個uwsgi服務了。

          5.實戰應用

          最初的設置完畢以后,再添加的應用,只需要在nginx里面進行少量修改,無需重啟uwsgi,就能立刻部署完畢。uwsgi自帶了基于django的監控uwsgi運行狀態的工具,就拿它來部署好了:

          server {

          listen 80;

          root /var/www/django1.23;

          index index.html index.htm;

          server_name test.uwsg.com;

          access_log /var/log/nginx/django.access.log;

          location /media/ {

          root /var/www/django;

          rewrite ^/media/(.*)$ / break;

          }

          location / {

          include uwsgi_params;

          uwsgi_pass 127.0.0.1:9090;

          uwsgi_param UWSGI_PYHOME /var/www/django;

          uwsgi_param UWSGI_CHDIR /var/www/django;

          uwsgi_param UWSGI_SCRIPT uwsgiadmin_wsgi;

          }

          }

          于是uwsgi的監控信息可以在http://test.uwsg.com 看到用戶名密碼都是admin。

          境:Cent7.5+Django2.1.2+uwsgi2.0.17+nginx1.12.2

          第一、uwsgi協議

          1.uwsgi協議說明

          uwsgi 是基于wsgi 協議的一個應用。wsgi 是網頁服務器網關接口協議,用來處理http request、response的消息。

          uwsgi 2.0.17 基于python2 下的pip install uwsgi 來安裝,可以通過xml或ini文件格式來做初始化配置。

          2.應用說明

          這里用ini配置。conf.ini內容如下:

          [uwsgi]
          socket=:8080
          chdir=/home/website/hourseWebSiteProject
          #wsgi-file=hourseWebSiteProject/wsgi.py
          module=hourseWebSiteProject.wsgi
          pidfile=pid.uwsgi
          master=true
          processes=4
          threads=2
          buffer-size=32768
          virtualenv=/home/website/ll_env
          daemonize=UWSGI.log
          vacuum=true
          

          socket=:8080 是用來配置nginx 服務器,用來建立socket通信的,如果單獨啟用測試運行django服務器,讓外網訪問設置為http=:8080 。指定任何地址可以訪問。

          chidir 用來指定Django的項目目錄。

          module 指定wsgi文件

          virtualenv 指定安裝的Python3 安裝的虛擬環境,運行uwsgi 協議應用是在虛擬環境目錄下進行的.

          命令:source ll_env/bin/activate

          /home/website/ll_env 為建立的虛擬環境目錄路徑,此處使用的是python3.5+django 2.0.7環境

          daemonize 指定uwsgi運行在后臺

          2.1 啟用uwsgi

          uwsgi --ini conf.ini
          #以上命令啟用uwsgi,用cat UWSGI.log 查看當前目錄下uwsgi生成的日志信息是什么
          netstat -ntlp 
          #此命令查看端口8080 隊友的uwsgi 服務是否啟用。
          

          2.3 關閉uwsgi

          (ll_env) [root@192 hourseWebSiteProject]# netstat -ntlp
          Active Internet connections (only servers)
          Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
          tcp 0 0 0.0.0.0:10022 0.0.0.0:* LISTEN 999/sshd 
          tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1641/nginx: master 
          tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1628/uwsgi 
          tcp6 0 0 :::10022 :::* LISTEN 999/sshd 
          tcp6 0 0 :::3306 :::* LISTEN 1037/mysqld 
          #查找到 uwsgi 的進程號PID 1628 用以下命令關閉
          kill -9 1628
          

          第二、nginx 服務器使用

          1. nginx介紹

          nginx是web應用中繼服務器用來轉發網頁請求,將網頁請求轉發為uwsgi 網關應用。

          當uwsgi配置啟動成功后,需要配置nginx。

          首先Django 項目的工程下的setting.py 下的DEBUG=True 。如果DEBUG 改為False ,Django 項目就不能自動索引Static靜態文件了,這個時候就通過nginx來提供靜態文件的目錄了,同時template 中的網頁模板中的引入文件路徑就要修改了。

          <script src="{%static 'lib/jquery.js'%}" type="text/javascript"> 此處我們配置的是static最為根目錄,

          所以改為<script src="/static/lib/jquery.js" type="text/javascript"/>

          在setting.py 中將DEBUG=True改為DEBUG=False。Django 就不再索引原有的靜態文件目錄了。

          在setting.py 底部添加STATIC_ROOT='/var/www' 。設置我們靜態文件存儲目錄,文件夾如果不存在就創建。

          然后用命令

          python3 manage.py collectstatic
          #此命令將項目和App 下所有的static目錄統一收集到STATIC_ROOT標識的目錄下
          

          2. nginx 應用

          2.1 nginx 使用

          nginx version: nginx/1.12.2

          此處版本是1.12.2 配置文件存放在/usr/local/nginx/conf/nginx.conf 路徑下

          修改nginx.conf 中的server 部分配置,內容如下:

          server {
           listen 80;
           #server_name localhost;
           server_name localhost 192.168.56.9;
           charset utf-8;
           #charset koi8-r;
           #access_log logs/host.access.log main;
           #location / {
           # root html;
           # index index.html index.htm;
           #}
           location /{
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8080;
           }
           location /static{
           alias /var/www;
           access_log off;
           }
          

          listen 監聽的是對外端口

          server_name 標識的是對外提供服務的主機地址,此處是192.168.56.9

          location / 根目錄是用來配置和uwsgi 通信,此處是本地同一臺主機,所以使用127.0.0.1用的是8080端口

          include uwsgi_param 用來啟用通信的一些配置參數。uwsgi_param在目錄/usr/local/nginx/conf/ 下

          location /static 用來配置靜態目錄,就是python3 manage collectstatic 收集的靜態文件目錄/var/www

          2.2 nginx 啟用

           nginx -c /usr/local/nginx/conf/nginx.conf
          

          指定特定的配置文件啟動

          (ll_env) [root@192 hourseWebSiteProject]# netstat -ntlp
          Active Internet connections (only servers)
          Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
          tcp 0 0 0.0.0.0:10022 0.0.0.0:* LISTEN 999/sshd 
          tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1641/nginx: master 
          tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1628/uwsgi 
          tcp6 0 0 :::10022 :::* LISTEN 999/sshd 
          tcp6 0 0 :::3306 :::* LISTEN 1037/mysqld 
          

          netstat -ntlp 命令可以查看到nginx進程使用的80端口,本地通信uwsgi 使用socket 8080 端口

          2.3 nginx 停止

          nginx -s stop
          

          </script>


          主站蜘蛛池模板: 成人在线视频一区| 国产精品一区不卡| 精品国产一区二区麻豆| 国产高清一区二区三区| 亚洲AV无码一区二区三区电影| 精品欧美一区二区在线观看 | 无码少妇精品一区二区免费动态| 无码国产精品一区二区免费3p| 中文字幕一区在线观看视频| 波多野结衣精品一区二区三区| 一区二区三区影院| 亚洲一区二区三区无码国产 | 香蕉久久AⅤ一区二区三区| 色狠狠一区二区三区香蕉蜜桃| 亚洲熟妇av一区| 一区二区三区日本电影| 国产激情无码一区二区| 好吊妞视频一区二区| 中文人妻av高清一区二区| 亚洲无码一区二区三区| AV天堂午夜精品一区| 国产电影一区二区| 精品国产日韩亚洲一区| 中文字幕一区日韩精品| 中文字幕一区二区三区精华液| 色噜噜狠狠一区二区三区| 国产精品亚洲高清一区二区| 久久精品免费一区二区| 东京热无码av一区二区| 亚洲av乱码中文一区二区三区 | 老湿机一区午夜精品免费福利| 亚洲日韩激情无码一区| 在线观看日韩一区| 无码人妻精品一区二区在线视频 | 国产精品高清一区二区三区不卡 | 亚洲一区二区无码偷拍| 中文字幕AV一区中文字幕天堂| 国模吧一区二区三区精品视频| 无码人妻精品一区二区| 国产精品亚洲综合一区| 无码人妻精品一区二区三区久久久|