uwsgi+Django实现域名访问

说明

项目采用quasar+Django前后端分离,Django只能通过IP+端口号的方式。因为没有用https协议加密,便不太关心。

今天有功能用到定位功能,但http协议只能提供低精度定位,完全不能满足要求,于是开始升级https。第一步就是实现Django的域名访问。

Django文档中提到可以用uwsgi来映射端口给nginx,尝试过后写文档记录下来。

uwsgi安装

系统环境centos7 python3.6

pip3 install -y uwsgi

遇到报错<***.h> 时,需要安装python对应的dev包后重新安装uwsgi

yum install python36-devel -y

测试 uwsgi 是否正常:

新建 test.py 文件,内容如下:

1
2
3
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"

然后在终端运行:

1
uwsgi --http :8001 --wsgi-file test.py

在浏览器内输入:ip:8001,查看是否有”Hello World”输出,若没有输出,请检查你的安装过程。

安装Django

把项目文件上传到所需目录,安装所需包即可

setting中关闭Debug

安装Nginx

安装过程略过,手动安装或用插件安装都可以,重点是Nginx配置部分

1
2
3
4
5
6
7
8
9
10
11
12
server
{
listen 80;
listen 443 ssl http2;
server_name 你的域名;
charset urf-8;
location / {
include uwsgi_params;

uwsgi_pass 127.0.0.1:8001; #8001对应uwsgi配置中的socket
}
}

uwsgi配置文件

新建一个uwsgi.ini文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[uwsgi]
projectname = APP名称,与项目文件夹同名的那个
base = 项目路径
# 我的项目目录
chdir = %(base)
# 指定项目的application
module = %(projectname).wsgi:application
# 进程个数
workers = 5
# 启用主进程
master = true
# 启用线程
enable-threads = true
# 设置自中断时间
harakiri = 30
# 设置缓冲
post-buffering = 4096
#pid文件保存路径 前提是自定义路径一定要存在
pidfile = 自定义路径/inner_manager.pid
# 设置日志目录
daemonize = /tmp/uwsgi.log
# 指定sock的文件路径,可以用端口或sock文件(Nginx监听的端口)
socket = 127.0.0.1:8001
# django开放的端口
stats = 127.0.0.1:800

测试

终端运行 :uwsgi -i uwsgi.ini

image-20210810143908780

出现第二行时,打开Nginx中绑定的域名测试 访问正常,如果访问不同查看端口是否打开

打开域名时显示Internal Server Error

说明配置文件有问题,查看控制台输出解决

结语

通过uwsgi绑定域名后,可以对网站进行https加密,加密后注意前端接口的地址和跨域问题。

uwsgi命令

配置完成后启动服务加载配置

1
uwsgi --ini uwsgi.ini

重载uwsgi配置文件

1
uwsgi --reload uwsgi.pid

停止uwsgi服务

1
uwsgi --stop uwsgi.pid

若使用stop不能完全停止进程可以用kill循环强行结束

1
for i in `ps axu |grep -vi 'grep'| grep "uwsgi" | awk '{print $2}'`;do kill -9 $i;done

参考文章

https://zhuanlan.zhihu.com/p/52225008

https://blog.csdn.net/weixin_34391445/article/details/92541369


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!