• nginx 学习 不断更新


    nginx 常用全局变量

    $uri: 当前请求的uri,不带参数
    $request_uri: 请求的uri,带完整参数
    $host: http请求报文中host首部,如果没有则以处理此请求的虚拟主机的主机名代替
    $hostname: nginx服务运行在主机的主机名
    $remote_addr: 客户端IP
    $remote_port: 客户端端口
    $remote_user: 使用用户认证时客户端用户输入的用户名
    $request_filename: 用户请求中的URI经过本地root或alias转换后映射的本地文件路径
    $request_method: 请求方法, GET POST PUT
    $server_addr: 服务器地址
    $server_name: 服务器名称
    $server_port: 服务器端口
    $server_protocol: 服务器向客户端发送响应时的协议, 如http/1.1 http/1.0
    $scheme:在请求中使用scheme, 如http://xxx.com中的http
    $http_HEADER: 匹配请求报文中指定的HEADER
    $http_host: 匹配请求报文中的host首部
    $document_root: 当前请求映射到的root配置
    
    安装tbnginx源码编译安装:
        大型外呼软件 下载到/opt/1。 下载nginx 所需编译环境
        yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
         2. 下载nginx源码包 百度搜索淘宝nginx 即可找到nginx下载地址
            wget -c  http://tengine.taobao.org/download/tengine-2.3.1.tar.gz
         3.  解压源码包
            tar -zxvf  tengine-2.3.1.tar.gz
          4   进入源码文件
             ./cofigure  --profix=/opt/tengine231
             make && make install 
          5  配置环境变量
              编辑  vim  /etc/profile   PATH = ''
                或者 软连接设置都可以
          6 nginx 就启动了 占用80端口 
          7 ps -ef  或者 netstat -tunlp 查看是否运行

    nginx的目录结构:
    • conf 存放nginx所有配置文件的目录,主要nginx.conf
    • html 存放nginx默认站点的目录,如index.html、error.html等
    • logs 存放nginx默认日志的目录,如error.log access.log
    • sbin 存放nginx主命令的目录,sbin/nginx
     -s signal     : send signal to a master process: stop, quit, reopen, reload
    
    nginx 的启动  nginx 
    
    nginx -s reload 平滑重启
    
    nignx -s stop 停止服务
    
    
    nginx -s quit 退出服务
    
    nginx -s  reopen 重新打开服务

    nginx  配置:

    user www;                       #Nginx进程所使用的用户
    worker_processes 1;             #Nginx运行的work进程数量(建议与CPU数量一致或auto)
    error_log /log/nginx/error.log  #Nginx错误日志存放路径
    pid /var/run/nginx.pid          #Nginx服务运行后产生的pid进程号
    -------------------------
    
    events事件模块
    
    events {            
        worker_connections  //每个worker进程支持的最大连接数 最好是65535
        use epool;          //事件驱动模型, epoll默认  # epool高可用i/o模型
    }
    
    ------------------------------------
    
    主要的:
    http内核模块
    
    //公共的配置定义在http{}
    http {  //http层开始
    ...    
         # 配置日志(全局)
        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;
        access_log  "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G"  main;
    
        //使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
        'server' {
            listen       80;        //监听端口, 默认80
            server_name  localhost; //提供服务的域名或主机名
            access_log host.access.log  //访问日志
            //控制网站访问路径
            'location' / {
                root   /usr/share/nginx/html;   //存放网站代码路径
                index  index.html index.htm;    //服务器返回的默认页面文件
            }
            //指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
            error_page   500 502 503 504  /50x.html;
        }
        ...
        //第二个虚拟主机配置
        'server' {
        ...
        }
        
        include /etc/nginx/conf.d/*.conf;  //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
    
    }   //http层结束
    
    -----------------------

    虚拟主机

    基于端口的虚拟主机(监听不同的端口)
    通过不同的端口来区分不同的虚拟主机,一般用作企业内部网站,不对外直接提供服务的后台,例如www.pythonav.cn:9000
    
    
    基于域名的虚拟主机(server_name 域名)
    通过不同的域名区分不同的虚拟主机,是企业应用最广的虚拟主机。
    
    
    基于IP的虚拟主机(server_name  IP地址)
    通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定VIP

     检测状态:

    location /status {
            #开启nginx状态功能
                 stub_status on;
    }        

    记得平滑重启

    压测

    通过ab压测命令检测
    
    yum -y install httpd-tools
    
    -n requests #执行的请求数,即一共发起多少请求。
    
    -c concurrency #请求并发数。
    
    -k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。
    
    ab -kc 1000 -n 100000 http://192.168.119.10/

    日志:

    控制日志的参数
    
    log_format    记录日志的格式,可定义多种格式
    accsss_log    指定日志文件的路径以及格式
    
      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;

    对应参数解析:

    $remote_addr    记录客户端ip
    $remote_user    远程用户,没有就是 “-”
    $time_local    对应[14/Aug/2018:18:46:52 +0800]
    $request     对应请求信息"GET /favicon.ico HTTP/1.1"
    $status      状态码
    $body_bytes_sent  571字节 请求体的大小
    $http_referer  对应“-”  由于是直接输入浏览器就是 -
    $http_user_agent  客户端身份信息
    $http_x_forwarded_for  记录客户端的来源真实ip 97.64.34.118

    日志格式配置定义

    log_format是日志关键字参数,不能变
    main是日志格式指定的标签,记录日志时通过main标签选择指定的格式。 
    限制ip或ip段访问
    禁止访问/av/底下的资源
    
    location /av {
    deny 122.71.240.254;
    #alias /opt/nginx1-12/html/av;
    allow 10.1.1.0/16;  
    }

    nginx 匹配优先级:

    匹配符 匹配规则 优先级
    =    精确匹配    1
    ^~    以某个字符串开头    2
    ~    区分大小写的正则匹配    3
    ~*    不区分大小写的正则匹配    4
    !~    区分大小写不匹配的正则    5
    !~*    不区分大小写不匹配的正则    6
    /    通用匹配,任何请求都会匹配到    7

    nginx语法之root和alias区别实战

    nginx指定文件路径有root和alias两种方法
    区别在方法和作用域:
    
    方法:
    
    root
    语法  root  路径;
    默认值 root   html;
    配置块  http{}   server {}   location{}
    
    alias
    语法: alias  路径
    配置块  location{}
    
    
    root和alias区别在nginx如何解释location后面的url,这会使得两者分别以不同的方式讲请求映射到服务器文件上
    
    root参数是root路径+location位置
    
    root实例:
    
        location ^~ /av {
            root /data/av;   注意这里可有可无结尾的   /
        }
    请求url是pythonav.cn/av/index.html时
    web服务器会返回服务器上的/data/av/av/index.html
    
    root实例2:
    location ~* .*.(jpg|gif|png|js|css)$ {  # 不区分大小写
           root  /data/av/;
    }
    
    请求url是pythonav.cn/girl.gif时
    web服务器会返回服务器上的/data/av/girl.gif
    
    
    
    
    alias实例:
    alias参数是使用alias路径替换location路径
    alias是一个目录的别名
    注意alias必须有 "/"  结束!
    alias只能位于location块中
    
    
    请求url是pythonav.cn/av/index.html时
    
    location ^~ /av {
        alias /data/static/;
    }
    web服务器会返回服务器上的/data/static/index.html
     

    https://www.xuliangwei.com/bgx/1005.html

    https://github.com/baishancloud/nginx-development-guide/blob/master/zh.md

  • 相关阅读:
    Gym101630A Archery Tournament
    BZOJ2588 Count on a tree
    Redis主从复制
    Redis事务
    Redis持久化RDB和AOF
    设计模式之代理模式
    Spring AOP(面向切面编程)
    基于TCP和UDP的Socket通信
    Ajax无法访问回调函数seccess问题
    SpringBoot Ajax跨域问题(session共享问题)
  • 原文地址:https://www.cnblogs.com/niehaidong111/p/10696233.html
Copyright © 2020-2023  润新知