Nginx

作者: Y_B_T | 来源:发表于2019-09-29 20:00 被阅读0次

    liunx 下载nginx

    • 1、使用yum安装nginx需要包括Nginx的库,安装Nginx的库
    // 终端命令
    rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    
    • 2、安装nginx
    // 终端命令
    yum install nginx
    
    
    • 3、Nginx指令
    // 启动nginx
    service nginx start
    // 停止nginx
    service nginx stop
    // 重新启动nginx
    service nginx reload 
    
    • 4 nginx基本配置( nginx的注释是#而不是//)
    // 定义Nginx运行的用户和用户组,系统中必须有此用户,可以是nologin
    #user  nobody;
    // 动进程,通常设置成和cpu的数量相等
    worker_processes  1;
    
    // 全局错误日志及PID文件(默认是注释的)
    // 错误日志定义等级,[ debug | info | notice | warn | error | crit ]
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    #pid        logs/nginx.pid;
    
    
    events {
        // epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
        use   epoll;
        // 单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)
        worker_connections  1024;
    }
    
    
    http {
        // 设定mime类型,类型由mime.type文件定义
        include       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 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    
        sendfile        on;
        #tcp_nopush     on;
        
        // 连接超时时间
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        // 开启gzip压缩(默认是注释,使用的时候要打开)
        #gzip  on;
        #gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    
        #设定请求缓冲
        client_header_buffer_size    1k;
        large_client_header_buffers  4 4k;
        
        #包含其它配置文件,如自定义的虚拟主机
        include /etc/nginx/conf.d/*.conf
    }
    
    • 5、虚拟主机配置
    server {
            // 监听端口
            listen       8080;
            // 使用的 localhost 访问
            server_name  localhost;
    
            #charset koi8-r;
            
            // 设定本虚拟主机的访问日志
            #access_log  logs/host.access.log  main;
    
            location / {
                // 定义服务器的默认网站根目录位置
                root   /Users/jackteng/code/ouyangshiping;
                // 定义首页索引文件的名称
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
            
            // 定义错误提示页面
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            #静态文件,nginx自己处理
            location ~ ^/(images|javascript|js|css|flash|media|static)/ {
                root  /Users/jackteng/code/ouyangshiping;
            #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
                expires 30d;
            }
        }
    
    • 6、nginx的负载均衡和代理配置
    http {
        // 设定mime类型,类型由mime.type文件定义
        include       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 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    
        sendfile        on;
        #tcp_nopush     on;
        
        // 连接超时时间
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        // 开启gzip压缩(默认是注释,使用的时候要打开)
        #gzip  on;
        #gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    
        // 设定请求缓冲
        client_header_buffer_size    1k;
        large_client_header_buffers  4 4k;
        
        // 设定负载均衡的服务器列表
        upstream mysvr {
            // weigth参数表示权值,权值越高被分配到的几率越大
            server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口
            server 192.168.8.2x:80  weight=1;
            server 192.168.8.3x:80  weight=6;
        }
        upstream mysvr2 {
            // weigth参数表示权值,权值越高被分配到的几率越大
            server 192.168.8.x:80  weight=1;
            server 192.168.8.x:80  weight=6;
        }
    
        // 包含其它配置文件,如自定义的虚拟主机
        include /etc/nginx/conf.d/*.conf
    }
    
    • 7、第一个虚拟服务器
    server {
        // 监听192.168.8.x的80端口
        listen       80;
        server_name  localhost;
        // 对aspx后缀的进行负载均衡请求
        location ~ .*\.aspx$ {
              // 定义服务器的默认网站根目录位置
              root   //Users/jackteng/code/ouyangshiping;  
              // 定义首页索引文件的名称
              index index.php index.html index.htm;     
              // 请求转向mysvr
              proxy_pass  http://mysvr ; 
              // 定义的服务器列表
              // 以下是一些反向代理的配置.
              proxy_redirect off;
              // 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              // 允许客户端请求的最大单文件字节数
              client_max_body_size 10m;
              // 缓冲区代理缓冲用户端请求的最大字节数,
              client_body_buffer_size 128k;
              // nginx跟后端服务器连接超时时间(代理连接超时)
              proxy_connect_timeout 90;   
              // 后端服务器数据回传时间(代理发送超时)
              proxy_send_timeout 90;      
              // 连接成功后,后端服务器响应时间(代理接收超时)
              proxy_read_timeout 90;      
              // 设置代理服务器(nginx)保存用户头信息的缓冲区大小
              proxy_buffer_size 4k;        
              // proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
              proxy_buffers 4 32k;
              // 高负荷下缓冲大小(proxy_buffers*2)
              proxy_busy_buffers_size 64k;   
              // 设定缓存文件夹大小,大于这个值,将从upstream服务器传
              proxy_temp_file_write_size 64k;
        }
    }
    
    • nginx的location配置
    范例:location [=|~|~*|^~] /uri/ { ... }
    1)= 表示精确匹配,这个优先级也是最高的
    
    2)^~ 表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa 匹配到(注意是空格)
    
    3)~ 表示区分大小写的正则匹配
    
    4)~* 表示不区分大小写的正则匹配(和上面的唯一区别就是大小写)
    
    5)!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则
    
    6)/ 通用匹配,任何请求都会匹配到,默认匹配
    
    • 匹配的优先级
    优先级(=) > (^~) > (~|~*|!~|!~*) > (/)
    首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
    
    
    • 范例
    location  = / {
      # 精确匹配 / ,主机名后面不能带任何字符串
      [ configuration A ]
    }
    
    location  / {
      # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
      # 但是正则和最长字符串会优先匹配
      [ configuration B ]
    }
    
    location /documents/ {
      # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
      # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
      [ configuration C ]
    }
    
    location ~ /documents/Abc {
      # 匹配任何以 /documents/Abc 开头的地址,匹配符合以后,还要继续往下搜索
      # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
      [ configuration CC ]
    }
    
    location ^~ /images/ {
      # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
      [ configuration D ]
    }
    
    location ~* \.(gif|jpg|jpeg)$ {
      # 匹配所有以 gif,jpg或jpeg 结尾的请求
      # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
      [ configuration E ]
    }
    
    location /images/ {
      # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
      [ configuration F ]
    }
    
    location /images/abc {
      # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
      # F与G的放置顺序是没有关系的
      [ configuration G ]
    }
    
    location ~ /images/abc/ {
      # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
        [ configuration H ]
    }
    
    location ~* /js/.*/\.js
    
    • if指令与全局变量
    if判断指令
    语法为if(condition){...},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容:
        当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
        直接比较变量和内容时,使用=或!=
        
    ~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配
    -f和!-f用来判断是否存在文件
    -d和!-d用来判断是否存在目录
    -e和!-e用来判断是否存在文件或目录
    -x和!-x用来判断文件是否可执行
    
    • 范例
    if ($http_user_agent ~ MSIE) {
        rewrite ^(.*)$ /msie/$1 break;
    } //如果UA包含"MSIE",rewrite请求到/msid/目录下
    
    if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
        set $id $1;
     } //如果cookie匹配正则,设置变量$id等于正则引用部分
    
    if ($request_method = POST) {
        return 405;
    } //如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302
    
    if ($slow) {
        limit_rate 10k;
    } //限速,$slow可以通过 set 指令设置
    
    if (!-f $request_filename){
        break;
        proxy_pass  http://127.0.0.1;
    } //如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查
    
    if ($args ~ post=140){
        rewrite ^ http://example.com/ permanent;
    } //如果query string中包含"post=140",永久重定向到example.com
    
    location ~* \.(gif|jpg|png|swf|flv)$ {
        valid_referers none blocked www.jefflei.com www.leizhenfang.com;
        if ($invalid_referer) {
            return 404;
        } //防盗链
    }
    
    • 全局变量
    $args :             这个变量等于请求行中的参数,同$query_string
    $content_length :   请求头中的Content-length字段。
    $content_type :     请求头中的Content-Type字段。
    $document_root :    当前请求在root指令中指定的值。
    $host :             请求主机头字段,否则为服务器名称。
    $http_user_agent :  客户端agent信息
    $http_cookie :      客户端cookie信息
    $limit_rate :       这个变量可以限制连接速率。
    $request_method :   客户端请求的动作,通常为GET或POST。
    $remote_addr :      客户端的IP地址。
    $remote_port :      客户端的端口。
    $remote_user :      已经经过Auth Basic Module验证的用户名。
    $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
    $scheme :           HTTP方法(如http,https)。
    $server_protocol :  请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    $server_addr :      服务器地址,在完成一次系统调用后可以确定这个值。
    $server_name :      服务器名称。
    $server_port :      请求到达服务器的端口号。
    $request_uri :      包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
    $uri :              不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
    $document_uri :     与$uri相同。
    
    

    相关文章

      网友评论

          本文标题:Nginx

          本文链接:https://www.haomeiwen.com/subject/ujjqpctx.html