我是靠谱客的博主 糟糕西牛,这篇文章主要介绍【第3.5期】nginx+uwsgi+flask访问公网ip+端口+路径前情回顾本节目标uwsgi搭建HTTP网站,现在分享给大家,希望可以做个参考。

文章目录

  • 前情回顾
  • 本节目标
    • 主要任务
  • uwsgi搭建HTTP网站
    • uwsgi + python
      • 1. 配置环境
      • 2. 命令行输入
    • uwsgi + flask + python
      • 1. 配置环境
      • 2. 新建uwsgi.ini与.py文件及配置中其他文件
        • ⚠️注意:
      • 3. 初始化uwsgi.ini
      • uWSGI常用的命令
      • Q:那--http 和 --socket 这两个选项究竟有何不同呢?
    • uwsgi + nginx + flask + python
      • 写在前面
      • 1. 配置环境
      • 2.上一part中py文件的修改(也可以不改)
      • 3.配置文件nginx.conf
      • 4.uwsgi.ini的修改
      • 5. 在安全组里添加6112端口
      • 6.启动nginx
      • 运行结果
      • 正式搭建nginx+uwsgi工程

前情回顾

【第3.25期】nginx、uwsgi、flask、django的关系

本节目标

本节主要内容是进入云服务器端,并顺利完成访问公网ip+端口+路径功能(HTTP)
(我是笨???? ^ ^l|

主要任务

【flask+宝塔】我在云服务器上,想做一个https协议的“https://域名:端口号”这样的网站,最好是在宝塔面板上设置
https://ask.csdn.net/questions/7646927

在3.25期提到的,只用uwsgi也能完成服务器搭建

uwsgi搭建HTTP网站

首先,记得开放对应端口的安全组
⚠️本文已经在安全组开放端口"6111"

uwsgi + python

1. 配置环境

通过virtualenv配置环境

pip3 install --upgrade virtualenv
# 创建文件夹
mkdir csdnV3
cd csdnV3
# 创建虚拟环境
virtualenv -p python3 venv
# 进入虚拟环境
source venb/bin/activate
# 安装依赖
pip3 install --default-timeout=1000 uwsgi -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip3 install --default-timeout=1000 flask -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

测试效果:

python3 test1.py

可以正常运行即可

2. 命令行输入

运行简单的uWSGI程序,用于测试uWSGI,这里走的是HTTP链接:

直接在命令行输入:

uwsgi --http :6111 --wsgi-file test1.py

http :6111: 使用http协议,端口6111
wsgi-file test1.py: 加载指定的文件,test1.py
(若使用其他端口需要配置安全组)

附代码

test1.py

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3

这个时候,访问公网ip:6111会输出helloworld
实战请看下一期~


uwsgi + flask + python

开放方法参考

微信小程序+nginx+php+mysql实现数据库管理【第3.25期】nginx、uwsgi、flask、django的关系

1. 配置环境

通过virtualenv配置环境

2. 新建uwsgi.ini与.py文件及配置中其他文件

需要配置uwsgi.ini

⚠️注意:

当你没用nginx,调试项目的时候,使用http形式
http = 公网ip:8000
基于socket链接运行时,只有与nginx结合的时候,才使用socket形式
socket = 公网ip:8000


有注释版

[uwsgi]  # 一定要写这个标题,不然识别不到
chdir=/www/wwwroot/test # 工程目录
home=/www/wwwroot/test/.env # 虚拟环境目录
module=test  # 启动flask应用的文件名,不用加.py
# wsgi-file = test.py # 与上一行功能相近
callable=app # 应用名,与我们hell
master=true
processes=2 # worker的进程个数
chmod-socket=666
logfile-chmod=644
procname-prefix-spaced=test # uwsgi的进程名称前缀,启动后可通过ps -ef | grep test查找到这个进程
py-autoreload=1 # py文件修改,自动加载,也就是设置热启动了
http=0.0.0.0:6111 # 监听端口,测试时使用

vacuum=true # 退出uwsgi是否清理中间文件,包含pid、sock和status文件
socket=%(chdir)/uwsgi/uwsgi.sock # socket文件,配置nginx时候使用
stats=%(chdir)/uwsgi/uwsgi.status # status文件,可以查看uwsgi的运行状态
pidfile=%(chdir)/uwsgi/uwsgi.pid # pid文件,通过该文件可以控制uwsgi的重启和停止
daemonize=%(chdir)/uwsgi/uwsgi.log # 设置后台模式,然后将日志输出到uwsgi.log。当调试时,可先注释掉此内容

无注释版

[uwsgi]
chdir=/www/wwwroot/test
home=/www/wwwroot/test/.env
module=test
# wsgi-file = test.py
callable=app
master=true
processes=2
chmod-socket=666
logfile-chmod=644
procname-prefix-spaced=test
py-autoreload=1
http=0.0.0.0:6111

vacuum=true
socket=%(chdir)/uwsgi/uwsgi.sock
stats=%(chdir)/uwsgi/uwsgi.status
pidfile=%(chdir)/uwsgi/uwsgi.pid
daemonize=%(chdir)/uwsgi/uwsgi.log

其他文件(根据uwsgi中最后四行确定)

mkdir uwsgi
cd uwsgi
touch uwsgi.sock
touch uwsgi.status
touch uwsgi.pid
touch uwsgi.log

test.py

from flask import Flask

app = Flask(__name__)

@app.route("/helloWorld")
def helloWorld():
    return "Hello World"
    
@app.route("/")
def hiWorld():
    return "Hi World"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=6111, debug=True)

3. 初始化uwsgi.ini

uwsgi --ini uwsgi.ini

效果如下图:
在这里插入图片描述

完成之后,查看当前正在运行的uwsgi进程:

ps -ef | grep 【关键词】

在这里插入图片描述

最好test.py和uwsgi.ini中的端口数要一样
虽然理论上test.py的端口不影响
在这一步卡了很长时间!


uWSGI常用的命令

如下:

uwsgi --ini uwsgi.ini             # 启动
uwsgi --reload uwsgi/uwsgi.pid          # 重启
uwsgi --stop uwsgi/uwsgi.pid            # 关闭

参考文章

flask重录制版本❀
Python 使用uwsgi部署flask项目
使用uwsgi + flask部署web应用
flask框架使用uWSGI部署服务

Q:那–http 和 --socket 这两个选项究竟有何不同呢?

为什么出现这种思考呢?就是我用–socket 启动了uWSGI之后,通过浏览器并不能访问。这是因为,–socket使用的协议并不是http/https。

flask + nginx + uWSGI部署


uwsgi + nginx + flask + python

写在前面

项目部署:nginx+uwsgi+flask:
在这里插入图片描述

参照博主小兮风的这篇文章,在我入门时给了我很大帮助

flask重录制版本
以及他在B站上传的视频
flask部署 ngnix+uwsgi+flask搭建网站

nginx也是一个服务器,可以分配不同的uwsgi【个人理解】

对于nginx.conf的结构,可以在网上找到很多教程
大概常用的是location/【重定向】“ssl相关配置【域名】”
注意区分uwsgi_pass和socket
"重定向"和"反向代理"是什么意思? 我认为重定向指的是 原.py文件端口可以被改变 这一点 (不保真)

1. 配置环境

通过virtualenv配置环境

2.上一part中py文件的修改(也可以不改)

主要是加一个分路径,以及为了验证,可以把main中的端口号换成一个没有配安全组的
在这里插入图片描述

3.配置文件nginx.conf

  1. 把nginx文件夹下的conf文件夹下的nginx.conf复制到当前文件夹下
    可通过下图中的文件找到
    在这里插入图片描述
    使用最初的配置文件
cp /usr/local/nginx/conf/nginx.conf ./
  1. 添加如下字段
 location /111 {  # 此处的"/111"必须要和.py里一致!
            include uwsgi_params;
            # proxy_pass http://0.0.0.0:6111;  # 用不了,An error occurred
            # proxy_pass http://【公网IP】:6111;  # 用不了,An error occurred
            uwsgi_pass 0.0.0.0:6111;  # 可以使用,记得配置uwsgi.ini两处改动
            # uwsgi_pass 【公网IP】:6111;  # 可以使用,记得配置uwsgi.ini两处改动
            # uwsgi_pass unix:/root/hitsz/uwsgi_useless/uwsgi/uwsgi.sock;
            # 测试了一下,下面三行注释掉好像也能跑,但是最好加上
            uwsgi_param UWSGI_PYHOME /root/hitsz/rubbish_uwsgi;  # 虚拟环境所在文件夹
            uwsgi_param UWSGI_CHDIR /root/hitsz/uwsgi_useless;  # 主文件夹
            uwsgi_param UWSGI_SCRIPT test:app;  # 左test:test.py 右app:test.py里Flask的对象
        }

⚠️此处的"/111"必须要和.py里一致!

同时,修改如下字段
在这里插入图片描述
server_name处是公网ip【使用https协议时,还有域名】

思考:这时候会被重定向到6112还是6111(还是上面说无关紧要的6119)端口?

回答:只有6112! 这才是重定向嘛~

同时,复制两个文件到当前文件夹:(不然运行时会报错,include的时候改成绝对路径也行)

cd 当前路径
cp /usr/local/nginx/conf/uwsgi_params ./
cp /usr/local/nginx/conf/mime.types ./

4.uwsgi.ini的修改

(修改3处;注释掉http,注释掉socket,重新添加socket)
socket处的端口需要和nginx.conf中相对应
在这里插入图片描述

5. 在安全组里添加6112端口

在这里插入图片描述

6.启动nginx

在启动前,请确保杀死全部nginx/uwsgi进程(详细方法见下期)
在这里插入图片描述
命令大全

nginx -c XXX.conf
启动:以自定义的conf启动nginx文件

nginx -s reload
重启:重启nginx

nginx -s stop
停止:停止nginx

1.启动uwsgi

uwsgi --ini 【自定义.ini文件】

若已经开启uwsgi需要重启,可 kill 进程

2.启动nginx

nginx -c 【自定义.conf文件】

若已经开启nginx需要重启,可改用

nginx -c 【自定义.conf文件】 -s reload

或者 kill 进程

配置过程中可能遇到的问题如图:(解决方法也如图
在这里插入图片描述

运行结果

见下期

回头看一下nginx.conf文件:在这里插入图片描述
只有这两个location,当只输入端口号时,进入index.html nginx的欢迎界面;遇到"/111"时,进入下面的location /111/别的是404(404界面在下面注释那里也有写,可以解注释看看效果)
在这里插入图片描述
欢迎界面


正式搭建nginx+uwsgi工程

  1. 启动uwsgi
uwsgi --ini uwsgi.ini

最好通过ps -ef | grep uWSGI指令,保证所有的uwsgi没有启动;nginx也是

  1. 启动nginx
    熟练运用nginx -c 【自定义.conf文件】nginx -s stop nginx -s reload功能(可以叠加,-c -s同时使用)

  2. 效果验收:
    输入公网IP:nginx端口(6112)/111查看效果,应该与上一版一致。


以上是http协议,关于https协议还需要ssl证书等内容,等第【3.75期】解答
连续搞了两天,终于把寒假期间坐大牢的东西搞明白了
前几期写的东西有点乱,之后还要整理(立flag????

最后

以上就是糟糕西牛最近收集整理的关于【第3.5期】nginx+uwsgi+flask访问公网ip+端口+路径前情回顾本节目标uwsgi搭建HTTP网站的全部内容,更多相关【第3内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部