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和UWSGI

WSGI(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切换到各种环境(开发环境、测试环境、生产环境)