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服务器自有的协议,它用于定义传输信息的类型。

ssl

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

ssl

会发现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	

ssl

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

nginx教程

nginx环境搭建(1) nginx基础知识(2) nginx的安装 卸载(3) nginx的基本参数使用(4) nginx分析默认配置(5) nginx 虚拟主机配置(6) nginx 日志(7) nginx 模块(8) nginx 访问控制(9) nginx 静态资源web服务(10) nginx 缓存(11) nginx 跨域访问(12) nginx 防盗链(13) nginx 正向,反向代理配置(14) nginx 代理缓存配置(15) nginx websocket(16) nginx fastcgi(17) nginx 搭建wordPress博客(18) nginx Fastcgi缓存配置(19) nginx uwsgi反向代理(20) nginx 负载均衡(21) [深] nginx 动静分离(22) [深] nginx rewrite规则(23) [深] nginx 平滑升级 添加模块 调试(24) [深] nginx secure_link_module模块(25) [深] nginx geoip_module模块(26) [深] nginx https(27) [深] nginx与lua的开发(28) [架] nginx常见问题(29) [架] nginx性能优化(30) [架] nginx 安全(31) [架] nginx 反向代理gRpc(32)