在Django项目跟目录,即manage.py文件同级目录下(当然目录是可以随意的),增加uwsgi.ini文件
[uwsgi]
#项目目录
chdir=/home/PythonProjects/cash_software/
#指定项目的application
wsgi-file=cash/wsgi.py
#指定sock的文件路径
socket=/home/PythonProjects/script/uwsgi.sock
#进程个数
workers=5
pidfile=/home/PythonProjects/script/uwsgi.pid
#指定IP端口
http=0.0.0.0:20000
#指定静态文件
static-map=/static=/home/PythonProjects/cash_software/statics
#启动uwsgi的用户名和用户组
uid=root
gid=root
#启用主进程
master=true
#自动移除unix socket和pid文件当服务停止的时候
vacuum=true
#徐丽华接受的内容,如果可能的话
thunder-lock=true
#启用线程
enable-threads=true
#设置自中断时间
harakiri=30
#设置缓冲
post-buffering=4096
#设置日志目录
daemonize=/home/PythonProjects/script/uwsgi.log
在网上找到的很多没有使用wsgi-file配置,而是module=project_name.wsgi:application,但是启动后访问日志中会报:no python application found, check your startup logs for errors。没有找到APP的错误
nginx使用
nginx命令行参数
-c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。
-t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
-v 显示 nginx 的版本。
-V 显示 nginx 的版本,编译器版本和配置参数。
nginx 启动、停止、重启命令
-
nginx启动
sudo /usr/local/nginx/nginx (nginx二进制文件绝对路径,可以根据自己安装路径实际决定) -
nginx从容停止命令,等所有请求结束后关闭服务
ps -ef |grep nginx
kill -QUIT nginx主进程号 -
nginx 快速停止命令,立刻关闭nginx进程
ps -ef |grep nginx
kill -TERM nginx主进程号 -
如果以上命令不管用,可以强制停止
kill -9 nginx主进程号
nginx重启命令
nginx重启可以分成几种类型
- 简单型,先关闭进程,修改你的配置后,重启进程。
kill -QUITcat /usr/local/nginx/nginx.pid
sudo /usr/local/nginx/nginx - 重新加载配置文件,不重启进程,不会停止处理请求
- 平滑更新nginx二进制,不会停止处理请求
使用信号加载新的配置
Nginx 支持几个信号,能在它运行时控制其操作。其中最普通的是 15 ,用来中止运行的进程:
而最有趣的是能平滑改变 nginx 配置的选项(请注意,在重载前,要先测试一下配置文件):
当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),成功的话,就应用新的配置文件(例如:重新打开日志文件或监听的套接 字)。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。 如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。
nginx配置
user root; #这里改成root,因为默认nginx用户可能没有权限访问你的静态文件
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /home/PythonProjects/cash_software/config/nginx.pid;
events {
worker_connections 1024;
}
http {
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 10086;
server_name 47.104.201.10; # 公网IP或者域名
charset utf-8;
access_log /home/PythonProjects/cash_software/logs/host.access.log main;
# max upload size
client_max_body_size 100M;
# Django media
location /media {
alias /home/PythonProjects/cash_software/media;
}
location /static {
alias /home/PythonProjects/cash_software/statics;
}
location / {
include /usr/local/nginx/conf/uwsgi_params;
# uwsgi_pass 127.0.0.1:20000
uwsgi_connect_timeout 30;
uwsgi_pass unix:/home/PythonProjects/cash_software/config/uwsgi.sock;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
启动Nginx+uWsgi
#!/bin/bash
basepath=$(cd `dirname $0`; pwd)
if [ -f "$basepath/config/uwsgi.pid" ]; then
uwsgi --stop $basepath/config/uwsgi.pid
fi
uwsgi --ini $basepath/config/uwsgi.ini
if [ -f "$basepath/config/nginx.pid" ]; then
pid=$(cat $basepath/config/nginx.pid)
kill -QUIT $pid
fi
nginx -c $basepath/config/nginx.conf
部署多个应用
一个Nginx中,可以同时运行多个应用,不一定是Python的应用。我们期望通过不同的路径来路由不同的应用,因此就不能像上例那样直接修改根目录的配置。假设我们希望通过”http://localhost/myapp”来访问我们的应用,首先要在Nginx的配置文件中,加入下面的内容:
location /myapp {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /myapp;
uwsgi_pass 127.0.0.1:3031;
}
这里我们定义了一个uWSGI参数”SCRIPT_NAME”,值为应用的路径”/myapp”。接下来,在uWSGI的启动配置中,去掉”wsgi-file”项,并加上:
[uwsgi]
…
mount=/myapp=server.py
manage-script-name=true
“mount”参数表示将”/myapp”地址路由到”server.py”中,”manage-script-name”参数表示启用之前在Nginx里配置的”SCRIPT_NAME”参数。再次重启Nginx和uWSGI,你就可以通过”http://localhost/myapp”来访问应用了。
uwsgi自动/手动重载
在默认设置下,uwsgi本身不会立即加载修改后的文件,这是为了效率起见。如果你有修改代码后需要立即在服务器上reload的需求,则在uwsgi的ini文件中加入如下修改(不建议):
py-autoreload = 1
正确手动重载uwsgi和代码的方式
首先,确保你uwsgi的ini配置文件有自动生成pidfile。
pidfile = /path/to/your/uwsgi.pid
然后,在你的uwsgi.pid的目录下执行:
uwsgi --reload uwsgi.pid
至此,修改后的代码已经被重载,并且生效了。
共同学习,写下你的评论
评论加载中...
作者其他优质文章