知识点六 Nginx 和 uwsgi
Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器,它是在BSD-like协议下发行。 由俄罗斯的程序设计师lgor Sysoev所开发,其特点是占有内存少,并发能力强。据alexa的统计, 在排名前1000的网站中有38.8%正在使用它,居于其他同类软件之首。目前在国内,淘宝、腾讯、 百度、新浪、网易等大厂都在使用中。 Nginx的特点 1、高并发响应,官方介绍nginx处理静态 文件并发可达到5w/s,实际经过优化达到更高并发处理能力 epoll、非阻塞模型 2、内存、cpu占用率低 3、支持fastcgi、wsgi 4、支持虚拟主机 (把一台机器能虚拟成多个独立的网站,完全独立,互不干扰) 5、配置简洁、上手容易 6、支持ssl 常用的web服务器 Apache httpd 微软 IIS Lighttpd Tomcat/Resin Node.js Uwsgi --- 处理python yum和编译方式安装nginx 一、通过yum安装 yum install epel-release -y ---------nginx的依赖 yum install nginx -y 启动、停止、重启 service nginx start service nginx stop service nginx reload 二、源码编译安装 yum install -y make libtool gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel wget -nc http://nginx.org/download/nginx-1.14.0.tar.gz tar -zxvf nginx-1.14.0.tar.gz cd nginx-1.14.0 ./configure --prefix=/apps/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre make make install /apps/nginx/sbin/nginx -V nginx的配置文件位置 /apps/nginx/conf/nginx.conf nginx启动及启动中常见问题 语法检测 /apps/nginx/sbin/nginx –t 启动nginx /apps/nginx/sbin/nginx 重启nginx /apps/nginx/sbin/nginx –s reload 启动nginx后,在浏览器输入服务器的ip地址,可以看到欢迎界面。 常见问题 1、报错 nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 端口被占用,查看被占端口命令 ss -nalp|grep 80 2、如果无法访问欢迎界面,如何排查? 三步走 查看是否有nginx进程 ps aux |grep nginx 查看是否有监听端口 ss -nalp|grep 80 查看本机是否连同端口 telnet ip 80 http、进程、端口相关命令 命令行的浏览器 curl http://www.baidu.com curl -I http://baidu.com 查看http header信息 curl http://taobao.com -I –L 追随重定向 curl –d “a=100” http://test.com 发送post数据 最常用的状态码 请求成功 永久重定向 临时重定向 不存在的页面 没有权限 服务内部错误 ↓ ↓ ↓ ↓ ↓ ↓ 200 301 302 404 403 500 进程和端口 查看指定的进程 ps aux |grep 进程名 终止本机上的进程 kill 进程号 或者kill -9 pid 查看机器上的监听端口 netstat –lnp|grep redis 或者ss –ltn 测试端口是否能够连通 telnet ip port Nginx配置文件讲解 http { server { listen 80; server_name localhost; -----配域名 location / { root html; root是设置文档目录,来告诉路由去html中,尽量用绝对路径 index index.html index.htm; } access_log logs/access.log main; } include /apps/nginx/conf.d/*.conf; } server模块包含在http模块里面,是nginx重要的配置模块,包含如下指令 listen 指定监听的端口,默认是80 server_name 指定域名 location 用来匹配url的 ※ ※ ※ root指定你的代码文件存放路径,可以放在server模块内也可以放在location内,可以写绝对路径,也可以写相对路径,建议用绝对路径 ※ ※ ※ index 指定主页文件 access_log 用来记录每次访问的日志存放位置,可以放在http模块里面也可以放在server模块里面 include 当有多个域名需要配置,可以每个域名单独存放在文件中,然后通过include引入 nginx location语法介绍 location [ = | ~ | ^~ ] uri { ... } = :精确匹配(必须全部相等) ※ ※ ※ ~ :正则表达式匹配 ※ ※ ※ ^~ :匹配以某个uri开头 1.location 是在 server 块中配置。 2.可以根据不同的 URI 使用不同的配置(location 中配置),来处理不同的请求。 3.location 是有顺序的,会被第一个匹配的location 处理。 location 越精确,越被优先匹配 常用的location location / { } location ~ /static/ { root /webroot/static/; } location ~* \.(gif|jpg|png|css|js) { root /webroot/res/; expires 30d; } 图解WSGI和UWSGIWSGI(Web Server Gateway Interface),定义了web服务器(nginx、apache、iis等)和 web应用( 或者将web框架,flask、django等)之间的接口规范。 也就是说,只要 web服务器和 web应用都遵守WSGI协议,那么 他们就能相互组合、通信。 uwsgi可以看做是实现了wsgi协议和http协议的应用程序,利用uWIGS可以使我们的web应用得到更强的并发能力 2种方式安装部署uwsgi 一、yum方式,需要先安装epel (推荐方式) yum install epel-release -y yum install uwsgi –y uwsgi的配置文件 /etc/uwsgi.ini 二、源码编译安装 # 可以去pypi,搜索uwsgi下载: wget https://files.pythonhosted.org/packages/98/b2/19b34b20662d111f7d2f926cdf10e13381761dd7dbd10666b9076cbdcd22/uwsgi-2.0.17.tar.gz # 安装命令如下: tar xvzf uwsgi-2.0.17.tar.gz cd uwsgi-2.0.17 make 三。 Pip3 install uwsgi uwsgi配置详解 [uwsgi] uid = www gid = www pidfile = /tmp/uwsgi.pid #项目目录 chdir=/data/BBS #指定项目的application,及入口文件 module=BBS.wsgi:application # 指定监听端口 http=0.0.0.0:9090 #进程个数 workers=5 # 启用主进程 master=true # 自动移除unix Socket和pid文件当服务停止的时候 vacuum=true # 设置日志目录 daemonize=/var/log/uwsgi.log uwsgi常用命令 uwsig常用命令 # 通过配置文件启动 uwsgi --ini uwsgi.ini # 会生成两个文件 PID文件 他是标识这个程序所处的状态 SOCK文件 他是用来和其他程序通信的 # 停止uwsgi uwsgi --stop uwsgi.pid # 重载配置 uwsgi --reload uwsgi.ini nginx结合uwsgi配置 server { listen 80; server_name localhost; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9090; //必须和uwsgi中的设置一致 } location /static { root /data/BBS/; } } 部署一个BBS项目 步骤 mkdir /data rz #上传bbs.tar包 tar –xvf BBS.tar cd BBS sh BBS/init.sh #安装mysql;用migrate初始化数据库 chown www.www –R BBS #给uwsgi的启动用户对项目文件能够有读写的权限 动静分离 日常大的项目,需要先在settings里面配置STATIC_ROOT,然后用collectstatic把各个app 和中间件的静态文件收集起来,然后通过nginx配置location来访问静态文件 python3 manage.py collectstatic 理解windows的hosts文件 Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与 其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自 动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再 将网址提交DNS域名解析服务器进行IP地址的解析。 路径:C:\Windows\System32\Drivers\etc\hosts 一句话:hosts就是优先于dns做域名解析的 用途:通过hosts切换到各种环境(开发环境、测试环境、生产环境)