阅读:48
1.nginx支持静态文件处理性能更好, django uwsgi,默认不支持静态文件解析
2-nginx的负载均衡特性,让网站并发性更高
3.并且反向代理特性,用户访问80,即可访问到8000的应用
4.uwsgi支持多进程的方式,启动django,性能更高
5.nginx转发请求给uwsgi ,应该用uwsgI_pass,实现了uwsgi协议的请求转发
uwsgi --http :8088 --module crm.wsgi --py-autoreload=1
--http 指定用http协议
:8088 指定ob_crm启动的端口
-—module 指定django的wsgi.py的文件位置(绝对路径) 你的django项目第二层的目录名,下面的wsgi.py
—-py-autoreload=1 开启uwsgi的热加载功能
# 指定你的django启动在什么地址上,并且是什么协议
# 如果你用了nginx,进行反向代理,请用socket参数,用socket会导致无法直接访问,只能用nginx转发
socket=0.0.0.0:8000
# 如果你没用nginx反向代理,想要直接访问django用这个参数
http=0.0.0.0:8000
# 我的放在/opt 下
git clone https://gitee.com/yqmc/hun_pro.git
mkvirtualenv nginx_t1
查找虚拟环境的绝对路径,一会uwsgi配置的时候使用
workon nginx_t1
cdvirtualenv
pwd
# 我的虚拟环境位置,用你自己的位置,不然会包报错
/root/.virtualenvs/nginx_t1
pip3 install -r requirement.txt -i https://pypi.douban.com/simple
pip3 install uwsgi -i https://pypi.douban.com/simple
启动:
uwsgi --ini uwsgi.ini
停止:
uwsgi --stop uwsgi.pid
重启:
uwsgi --reload uwsgi.pid
# uwsgi.ini 配置
# mysite_uwsgi.ini file
[uwsgi]
# 填写你项目的绝对路径,第一层(你的项目位置)
chdir = /opt/hun_pro
# 找到django的那个wsgi.py文件(你的wsgi位置)
# 根据上面一条参数, hun_pro.wsgi
module = hun_pro.wsgi
#虚拟环境的绝对路径(你的虚拟环境位置)
home = /root/.virtualenvs/nginx_t1
# process-related settings
# master
master = true
# 根据你的cpu核数来定义这个参数,启动多少个进程
processes = 2
# 指定你的django启动在什么地址上,并且是什么协议
# 如果你用了nginx,进行反向代理,请用socket参数
#socket = 0.0.0.0:8000
# 如果你没用nginx反向代理,想要直接访问django用这个参数
http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
py-autoreload = 1
# 后台运行并记录日志
#daemonize = uwsgi.log
# pid
#pidfile = uwsgi.pid
# http + 前台启动启动
uwsgi --ini uwsgi.ini
# 访问 此时可以看到页面(ip换成你的IP)
http://10.0.0.129:8000
# 访问admin,会发现样式没有了,一会我们用nginx代理,就能解决
http://10.0.0.129:8000/admin/
# 用socket会导致无法直接访问,只能用nginx做反向代理,才能访问。因为协议不一样
socket=0.0.0.0:8000
用http启动,可以直接访问项目,会导致项目暴露,不安全
http=0.0.0.0:8000
socket = 0.0.0.0:8000
# 如果你没用nginx反向代理,想要直接访问django用这个参数
# http = 0.0.0.0:8000
# 后台运行并记录日志
daemonize = uwsgi.log
# pid
pidfile = uwsgi.pid
# uwsgi.ini 配置
# mysite_uwsgi.ini file
[uwsgi]
# 填写你项目的绝对路径,第一层(你的项目位置)
chdir = /opt/hun_pro
# 找到django的那个wsgi.py文件(你的wsgi位置)
# 根据上面一条参数, hun_pro.wsgi
module = hun_pro.wsgi
#虚拟环境的绝对路径(你的虚拟环境位置)
home = /root/.virtualenvs/nginx_t1
# process-related settings
# master
master = true
# 根据你的cpu核数来定义这个参数,启动多少个进程
processes = 2
# 指定你的django启动在什么地址上,并且是什么协议
# 如果你用了nginx,进行反向代理,请用socket参数
socket = 0.0.0.0:8000
# 如果你没用nginx反向代理,想要直接访问django用这个参数
#http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
py-autoreload = 1
# 后台运行并记录日志
daemonize = uwsgi.log
# pid
pidfile = uwsgi.pid
收集静态文件(我在settings.py中已经配置好了,路径是 STATIC_ROOT='/opt/static')
vim hun_pro/settings.py
# 把最后一行 STATIC_ROOT 的注释解开
STATIC_ROOT='/opt/static'
# 在manage.py处执行,下面的代码
python3 manage.py collectstatic
# socket + 后台启动
uwsgi --ini uwsgi.ini
# 会发现无法访问,socket启动,只能用nginx做反向代理,才可以启动
http://10.0.0.129:8000
server {
listen 80;
# 因为跑在了本地,所以localhost,如果跑在云服务器,换成相应的IP http://10.0.0.100/
server_name localhost;
#优先7,通用匹配,最低级匹配。所有的url都会进入这个路劲进行匹配,无论url是否正确,都会走
# 钩子,负载均衡的配置
upstream mydjango {
server 10.0.0.129:8000;
}
location / {
#
uwsgi_pass mydjango;
# 对应变量
include uwsgi_params;
}
}
server {
listen 80;
# 因为跑在了本地,所以localhost,如果跑在云服务器,换成相应的IP http://10.0.0.100/
# 静态文件请求的路径,http://10.0.0.129:8000/static/admin/css/login.css
server_name localhost;
location /static {
# root 网页根目录
# alias 别名
alias /opt/static;
}
}
#配置文件内容如下
# 进程数
worker_processes 1;
events {
worker_connections 1024;
}
# 核心代码
http {
include mime.types;
default_type application/octet-stream;
# 定义nginx访问日志的格式
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;
# 推图片等静态文件压缩,提升传输效率
gizp on;
#server被称为虚拟主机,可以有多个
# 钩子,负载均衡的配置
upstream mydjango {
server 10.0.0.129:8000;
}
# 主机
server {
listen 80;
# 因为跑在了本地,所以localhost,如果跑在云服务器,换成相应的IP http://10.0.0.100/
server_name localhost;
#优先7,通用匹配,最低级匹配。所有的url都会进入这个路劲进行匹配,无论url是否正确,都会走
location / {
uwsgi_pass mydjango;
# 对应变量
include uwsgi_params;
}
location /static {
# root 网页根目录
# alias 别名
alias /opt/static;
}
}
}
#配置文件内容如下
# 进程数
worker_processes 1;
events {
worker_connections 1024;
}
# 核心代码
http {
include mime.types;
default_type application/octet-stream;
# 定义nginx访问日志的格式
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;
# 推图片等静态文件压缩,提升传输效率
gizp on;
#server被称为虚拟主机,可以有多个
# 主机
server {
listen 80;
# 因为跑在了本地,所以localhost,如果跑在云服务器,换成相应的IP localhost<--->http://10.0.0.100/
server_name localhost;
#优先7,通用匹配,最低级匹配。所有的url都会进入这个路劲进行匹配,无论url是否正确,都会走
location / {
# 因为socket用0.0.0.0启动,0.0.0.0默认绑定所有网卡,用0.0.0.0/10.0.0.129/127.0.0.1都可以
uwsgi_pass 127.0.0.1:8000;
# 对应变量
include uwsgi_params;
}
location /static {
# root 网页根目录
# alias 别名
alias /opt/static;
}
}
}
常用命令
# 关闭防火请,不然nginx启动,无法访问
iptables -F
(1) 启动:
nginx
(2) 测试Nginx配置是否正确:
nginx -t
(3) 平滑重启,重新读取nginx配置文件
nginx -s reload
(4) 停止nginx:
nginx -s stop
# 访问 此时可以看到页面(ip换成你的IP)
http://10.0.0.129
# 访问admin,会发现样式有了
http://10.0.0.129/admin/