其他

当前位置:首页 > 其他

nginx搭建基于python的web环境的实现步骤 - 其他

前言:在搭建开始前,我们先来梳理下web服务工作流程,先看下图:方案:在nginx和python应用之间加一层支持WSGI协议的web服务器。以后静态...

前言:

在搭建开始前,我们先来梳理下web服务工作流程,先看下图:

方案:

在nginx和python应用之间加一层支持WSGI协议的web服务器。以后静态文件由nginx进行处理,动态文件丢给WSGI服务器,然后WSGI服务器再丢给web框架处理。最理想的支持WSGI协议的web服务器就是uWSGI。

下面来详细介绍下搭建uWSGI服务器以及与nginx联动的方法:

1、安装uWSGI(支持WSGI的WEB服务器):

centos下python3.6安装uWSGI方法:

yum install -y gcc* pcre-devel openssl-devel python36-devel.x86_64pip3.6 install uwsgi

2、开启uWSGI服务

方式一:

uwsgi --http 192.168.31.123:80 --file teacher/wsgi.py --static-map=/static=static--http 监听IP端口--file 项目wsgi.py文件路径--static-map 静态文件路径

注意: 执行这条命令的时候:一定要在这个项目目录中~ 

方式二(使用配置文件):

vi uwsgi.ini:[uwsgi]# 监听端口(nginx采用反向代理模式时必填)http = 0.0.0.0:8888# 项目目录chdir=/opt/test/test1/# 启动uwsgi的用户名和用户组uid=rootgid=root# 指定项目的application(我猜是这里的“test1.wsgi”拼接上面的项目目录后,就将项目中的wsgi.py文件和uWSGI服务器关联起来了)module=test1.wsgi:application # 指定sock的文件路径(nginx采用本地模式时必填)socket=/opt/test/script/uwsgi.sock # 启用主进程master=true# 进程个数workers=5pidfile=/opt/test/script/uwsgi.pid# 自动移除unix Socket和pid文件当服务停止的时候vacuum=true# 序列化接受的内容,如果可能的话thunder-lock=true# 启用线程enable-threads=true # 设置自中断时间harakiri=30 # 设置缓冲post-buffering=4096 # 设置日志目录daemonize=/opt/test/script/uwsgi.log # 设置隔多久加载一次项目代码py-autoreload=1执行配置文件(注意:这里用什么账户执行的,以后渗透进来获取到的就是什么账户。所以这一步切忌不要用root执行。):  uwsgi --ini uwsgi.ini

彩蛋:

重启uWSGI进程: uwsgi --reload uwsgi.pid  # 代码做变更后uWSGI进程不会立即加载,此时可以重启一下uWSGI进程让它生效。。。是不是感觉有点坑,没事,可以在配置文件中设置py-autoreload关闭uWSGI进程: uwsgi --stop uwsgi.pid  

3、配置nginx

方式一(反向代理模式):

upstream uwsgi{ server 10.10.10.29:8888;} server { listen 80; server_name localhost;  #charset koi8-r; #access_log /var/log/nginx/host.access.log main;  location / { proxy_pass http://uwsgi; # 通过反向代理和uWSGI服务器关联 }}

方式二(本地模式):

server { listen 8080; server_name localhost;  #charset koi8-r; #access_log /var/log/nginx/host.access.log main;  location / { include uwsgi_params; # 指定nginx和uWSGI服务器的通信方式 uwsgi_connect_timeout 30; uwsgi_pass unix:/opt/test/script/uwsgi.sock; # 通过sock文件和uWSGI服务器关联! 因为nginx会去读取.sock文件,所以需要关闭selinux才行!!! }}

4、此时访问django的admin管理后台时,静态资源会调取失败。这时可以将该项目所有静态资源统一收集到一个文件夹下,然后由nginx统一去调取,真正做到动静分离(动的给uWSGI,静的由nginx直接调取):

在settings.py中加入:

TATIC_ROOT = os.path.join(BASE_DIR, 'static_file')

执行如下命令(搜集项目中所有静态文件至'static_file'目录):

python3.6 manage.py collectstatic --noinput

此时会在项目目录下生成一个'static_file'文件夹,内含admin和所有app涉及的静态文件 。

在nginx中配置静态文件路径(如果nginx和uWSGI不属同一台服务器可以使用反向代理的方式来调取静态文件):

location /static/ { alias /opt/test/test1/static_file/;}

此时就可以访问基于python后台的web网站了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持来客网。

相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

评论排行榜

热门标签