手记

nginx uwsgi反向代理(20)

获取全套nginx教程,请访问瓦力博客

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。fastcgi应用于php语言,
uwsgi应用于Python语言。

WSGI

WSGI是一种WEB服务器网关接口。 是一个Web服务器(如nginx)与应用服务器(如uWSGI)通信的一种规范(协议)。

在生产环境中使用WSGI作为python web的服务器。Python Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛接受。WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行。

uWSGI

uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uWSGI代码完全用C编写,效率高、性能稳定。

uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型。

1.安装基础环境

安装系统基础包

yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++  openssl-devel -y

安装mysql支持

yum install mysqld mysql-devel

获取phthon源码包

到官方网站,下载最新python源码包

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz

解压安装

tar -xvf Python-3.6.2.tgz
cd Python-3.6.2/
./configure --prefix=/opt/python3.6
make
make install
echo "export PATH=/opt/python3.6/bin:\$PATH" > /etc/profile.d/python.sh


echo $PATH
which python
mkdir ~/.python-eggs
chmod +w ~/.python-eggs
echo "export PATH=/opt/python3.6/bin:\$PATH" > /etc/profile.d/python.sh

export PATH=/opt/python3.6/bin:$PATH

python3 -V

安装django

/opt/python3.6/bin/pip3 install django

查看是否安装成功

cd /opt/python3.6/bin/  

是否存在django-admin.py这个文件,存在说明安装成功

安装uwsgi

/opt/python3.6/bin/pip3  install uwsgi
cd /opt/python3.6/bin/  

是否存在uwsgi这个文件,存在说明安装成功

2.启动uwsgi

服务目录

/opt/app/
|-code7/
   |-demo  #这些不需要手动创建,由/opt/python3.6/bin/django-admin.py  startproject demo自动生成
      |-demo
         |-__init__.py
         |-settings.py
         |-urls.py
         |-wsgi.py	
   |-manage.py	
|-conf/
   |-uwsig.ini

/opt/app创建code7conf文件夹。

cd code7
/opt/python3.6/bin/django-admin.py  startproject demo  #用django-admin.py创建一个demo项目

由于启动时需要普通用户启动

useradd uwsgi #创建一个普通用户

uwsig.ini

[uwsgi]
socket = 127.0.0.1:9005
#chdir = /opt/app/code7/demo
workers = 2 
max-requests = 1000
buffer-size = 30000
pidfile = /var/run/uwsgi/uwsgi.pid
daemonize = /var/log/uwsgi.log

由于需要对/var/run/uwsgi/目录进行写入操作

chown -R uwsgi /var/run/uwsgi/

切换普通用户

su - uwsgi
cd /opt/app/conf

启动uwsgi之前需要确保uwsgi没有被启动

ps -ef | grep uwsgi
kill -9 'pid'  #如果检查有启动,需要杀死进程
/opt/python3.6/bin/uwsgi --ini /opt/app/conf/uwsgi.init  #启动uwsgi

如果有错误,请查看日/var/log/uwsgi.log。小菜第一次也没有启动起来,报的是uwsgi用户没有权限,还有就是不存在/var/run/uwsgi/uwsgi.pid文件,如果不存在/var/run/uwsgi/uwsgi.pid
文件就先切到root用户创建,然后在做后面的步骤。

如果成功了,检查一下9005端口是否被监听

ss -luntp | grep 9005

3.nginx配置

服务目录

/etc/nginx/conf.d
|-uwsgi.conf

uwsgi.conf

server {
    listen       80; 
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;

    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:9005;
        uwsgi_param UWSGI_SCRIPT demo.wsgi;
        uwsgi_param UWSGI_CHDIR /opt/app/code7/demo;
        index  index.html index.htm;
        client_max_body_size 35m;
    } 
}

检查语法并重启

nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf

重启nginx后输入域名http://walidream.com

会发现django报了一个错误,需要将我们的域名添加进白名单

vim /opt/app/code7/demo/demo/settings.py
/ALLOWED_HOSTS = #查找到ALLOWED_HOSTS,将我们的域名添加进白名单

将之前的django进程关闭

ps -ef |grep uwsgi

/opt/python3.6/bin/uwsgi --ini /opt/app/conf/uwsgi.init进程杀死掉

kill -9 'pid'

之后再重启django

/opt/python3.6/bin/uwsgi --ini /opt/app/conf/uwsgi.init	

出现欢迎界面就说明我们配置好了。

0人推荐
随时随地看视频
慕课网APP