在我这里,
我的django项目文件夹位于 /home/PROJECT_NAME
我安装好的nginx下的nginx.conf文件在 /etc/nginx/nginx.conf
1.关于nginx
nginx的作用是监听0.0.0.0:80,然后将请求转发给127.0.0.1:8000
首先安装nginx
pip3 install nginx
在项目文件夹下面新建conf文件 /home/PROJECT_NAME/django_nginx.conf
并在里面写入配置如下:
server {
# 端口和域名
listen 80;
server_name 0.0.0.0;
# 日志
access_log /home/PROJECT_NAME/nginx_logs/nginx.access.log;
error_log /home/PROJECT_NAME/nginx_logs/nginx.error.log;
# static 和 media 的地址
location /static {
root /home/PROJECT_NAME;
}
# gunicorn 中生成的文件的地址
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000;
}
}
注意文件 nginx_logs/nginx.access.log; 和 nginx_logs/nginx.error.log; 请在目录下手动创建,否则可能后面nginx启动会报错。
安装nginx并配置完django_nginx之后,进入nginx文件夹(每个服务器文件夹可能不一样)
cd /etc/nginx
ls
找到nginx.cong文件并打开
并在配置中http的括号中加入include如下并保存:
include /home/PROJECT_NAME/*.conf;
2.关于gunicorn
pip3 install gunicorn
安装好gunicorn之后,进入项目文件夹 /home/PROJECT_NAME,并且该文件夹下面建立文件gunicorn.conf.py,/home/PROJECT_NAME/gunicorn.conf.py,再改文件中加入配置如下:
# gunicorn.conf
# coding:utf-8
import multiprocessing
# 并行工作进程数, int,cpu数量*2+1 推荐进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 指定每个进程开启的线程数
threads = 3
# 绑定的ip与端口
bind = '127.0.0.1:8000'
# 设置守护进程,将进程交给supervisor管理
daemon = 'false'
# 工作模式协程,默认的是sync模式
worker_class = 'gevent'
# 设置最大并发量(每个worker处理请求的工作线程数,正整数,默认为1)
worker_connections = 2000
# 最大客户端并发数量,默认情况下这个值为1000。此设置将影响gevent和eventlet工作模式
max_requests = 2000
# 设置进程文件目录
pidfile = '/home/PROJECT_NAME/gunicorn.pid'
# 设置访问日志和错误信息日志路径
accesslog = '/home/PROJECT_NAME/gunicorn_acess.log'
errorlog = '/home/PROJECT_NAME/gunicorn_error.log'
# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
loglevel = 'info'
# 设置gunicorn访问日志格式,错误日志无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
# 监听队列
backlog = 512
#进程名
proc_name = 'gunicorn_process'
# 设置超时时间120s,默认为30s。按自己的需求进行设置timeout = 120
timeout = 120
# 超时重启
graceful_timeout = 300
# 在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。
keepalive = 3
# HTTP请求行的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。
# 值是0~8190的数字。此参数可以防止任何DDOS攻击
limit_request_line = 5120
# 限制HTTP请求中请求头字段的数量。
# 此字段用于限制请求头字段的数量以防止DDOS攻击,与limit-request-field-size一起使用可以提高安全性。
# 默认情况下,这个值为100,这个值不能超过32768
limit_request_fields = 101
# 限制HTTP请求中请求头的大小,默认情况下这个值为8190。
# 值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制
limit_request_field_size = 8190
# 设置gunicorn使用的python虚拟环境
pythonpath='/usr/bin/python3.10'
# 环境变量
raw_env = 'APE_API_ENV=PRO'
配置里面的pythonpath部分,请按照自己的python执行地址来配置。
3.启动服务器
完成以上的下载和配置之后,就是分别启动gunicorn和nginx的时候了。
首先进入 /home/PROJECT_NAME,在这个文件夹下输入命令
gunicorn -c gunicorn.conf.py PROJECT_NAME.wsgi:application
看到terminal卡住那就是启动成功了,然后在启动nginx
nginx
然后去你的浏览器输入服务器公网ip,以及 http:://{服务器地址}/admin 试试吧!
gunicorn+nginx+django的配置是挺简单的,最主要的是弄清楚nginx和gunicorn分别监听什么ip和什么端口,整个流程是nginx获取请求并转发给gunicorn,gunicorn启动wsgi来运行django线程。