zoukankan      html  css  js  c++  java
  • nginx 配置

     error_page code  [=code] URL | @name 根据http响应状态码来指明特别的错误页面

    可以在location中使用,

    location / {

     root /data/nginx;

       error_page 404 =200  /404.html;  在客户端访问不存在的页面应该显示404,但是做了自定义,页面请求结果为200.

    }

    nginx 捕获404

    在nginx.conf 配置文件中,写入location

    error_page 404 /404.html;
    location = /404.html {
    root /data/nginx/data/404/;
    }

    直接跳转到指定网页

    error_page   404  http://www.163.com;

    基于IP的访问控制

    allow

    deny

    例子:

    location / {

      root /data/nginx;

      allow 172.16.0.0/16;

      deny all;

    }

    openssl

    .pem 创建一个测试证书

    .key 创建私钥

    .csr  创建一个签署请求

    .crt  创建一个证书

    [root@localhost ~]# cd /etc/pki/CA

    [root@localhost CA]# (umask 077; openssl genrsa 2048> private/cakey.pem )

    生成一个自签证书

    openssl req -new -x509 -key provate/cakey.pem -days 3655 -out cacert.pem

    cd /data/nginx/ssl

    (umask 077; openssl  genrsa 1024 > httpd.key)

    openssl req -new -key httpd.key -out httpd.csr

    签署ca

    openssl ca in httpd.csr  -out httpd.csr -out httpd.crt

    显示状态页 

    stub_status {on|off}

    只能用在location中

     location /status {

        stub_status on;

        allow 172.16.0.0/24;

        deny all;

    }

    测试状态:

    curl   http://172.17.0.3/status

    Active   connections: 1    #当前所有处于打开状态的连接数:
    server accepts handled requests    #第一个数字,表示已经接受过的连接, 第二个,表示已经处理过的连接,第三个表示已经处理过的请求。
    1  1 1
    Reading: 0 Writing: 1 Waiting: 0   # Reading:  正处于接受请求状态的连接数。  writing: 请求已经接受完成,正处于处理请求或者发送响应的过程中的连接数

                                                        waiting: 保持连接模式。

    通配符

    location [ =|~|~*|^~] uri { ... }
    location @name { ... }
    功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理
    =:精确匹配
    ~:正则表达式模式匹配,匹配时区分字符大小写
    ~*:正则表达式模式匹配,匹配时忽略字符大小写
    ^~:只需要前半部分与uri匹配即可,不检查正则表达式

    匹配优先级:
    字符字面量最精确匹配、正则表达式检索(由多个时,由第一个匹配到的所处理),按字符字面量

    rewrite regex   replacement  flag(标志位); 重写

    例如:

     rewrite ^/images/(.*.jpg)$  /imgs/$1   break(标志位);

    访问jpg结尾的images文件夹 跳转到 imgs目录

    $1 表示原来访问的是什么,跳转后的 文件不变

    http://www.aa.com/images/a/b/c/d.jpg   ----> http://www.aa.com/imgs/a/b/c/d.jpg

    flag:

       last:  一旦此rewrite 规则重写完成后,就不会再被后面其他的rewrite规则进行处理,而是由 user ageent重新对重写后的URL再一次发起请求,并从从开始执行类似的过程

      break:  一旦此rewrite 规则重写完成后,由 user ageent重新对重写后的URL再一次发起请求,且不会再被当前localtion内的任何rewrite规则检查。

      redirect: 以302响应码(临时重定向) 返回新的URL;

      permanent 以301响应码(永久重定向) 返回新的URL;

    location / {

      rewrite ^/bbs/(*.)$   /form/$1  break;

        #rewrite ^/bbs/(*.)$  https://www.abc.com/bbs/$1  redirect;

    }

    if 上下文

       语法: if (条件) {

       ...... 

    适用环境:  server,  location

    条件:

          1. 变量名:   变量值为空串,或者以"0" 开始,则为false, 其他均为true

      2. 以变量为操作数构成的比较表达式,可以使用= != 比较操作符进行测试。

      3. 正则表达式的模式匹配操作

        ~: 区分大小写的模式匹配检查

        ~*:不区分大小写的模式匹配检查

        !~ 和 ~!*: 对上面两种取反

      4. 测试路径为文件可能性: -f , !-f

      5. 测试指定路径为目录的可能性 -d  !-d

      6. 测试文件的存在性: -e !-e

      7. 检查文件是否有执行权限: -x , !-x

    例如:

      if ($http_user_agent ~* MSIE) {

        rewrite ^(.*)$  /msie/$1 break;

    }

    防盗链

    location ~* .(jpg|gif|jpeg|png) {

      valid_referer none  blocked  www.abc.com;#定义合法的引用

      if ($invalid_referer) {

        rewrite  ^/  http://www.abc.com/404.html; 

      }  

    }

    其他配置相关:

    1. keepalive_timeout   长连接的超时时长,默认65s

    2. keepalive_requests: 在一个长连接上所能够允许请求的最大资源数;

    3. keepalive_disable [msie6|safari|noe] 指定类型的User Agent禁用长连接

    4. tcp_nodelay on|off    是否对长连接使用tcp_nodeloay功能

    5. client_header_timeourt 读取http请求报文首部的超时时长

    6. client_body_timeout  读取http请求报文body部分的超时时长

    7. send_timeout  发送响应报文的超时时长。

     跳转

    第一种方法

    if ( $http_x_forwarded_for ~ ^106.39.49.139|221.122.7.129) {
            return 301 https://www.cinyi.cn$request_uri;        
    }
    

     第二种方法

    #用变量的方式来间接实现
    set $flag 0;

    if ( $http_x_forwarded_for ~ ^106.39.49.139|221.122.7.129) {

          set $flag "${flag}1";
    }

    if ($flag = "01") {      

         return 301 https://www.cinyi.cn$request_uri;

    }

    当访问某个php应用时,我只想让ip地址为106.39.48.139访问,其他ip都跳转到另一个页面

    set  $ssl_80  '' ;


    if ( $request_uri ~* /abc/index.jsp ) { //客户端请求的完整请求路径
         set $ssl_80 A;
    }

    if ( $http_x_forwarded_for !~* ^106.39.49.139.* ) { //前端有负载均衡的客户端ip地址
          set $ssl_80 "${ssl_80}B";
    }

    if ( $ssl_80 = AB ) {
       #return 403;
          rewrite ^(.*)$ https://www.cinyi.com permanent;
    }

    $request_uri是客户端请求的完整路径
    $http_user_agent 是用户端发出请求的浏览器参数

    $args 请求中的参数值

    内置变量存放在  ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的。总而言之,这些变量代表着客户端请求头的内容,例如$http_user_agent, $http_cookie, 等等。下面是nginx支持的所有内置变量:
    
     
    
    $arg_name
    请求中的的参数名,即“?”后面的arg_name=arg_value形式的arg_name
    
    $args
    请求中的参数值
    
    $binary_remote_addr
    客户端地址的二进制形式, 固定长度为4个字节
    
    $body_bytes_sent
    传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的“%B”参数保持兼容
    
    $bytes_sent
    传输给客户端的字节数 (1.3.8, 1.2.5)
    
    $connection
    TCP连接的序列号 (1.3.8, 1.2.5)
    
    $connection_requests
    TCP连接当前的请求数量 (1.3.8, 1.2.5)
    
    $content_length
    “Content-Length” 请求头字段
    
    $content_type
    “Content-Type” 请求头字段
    
    $cookie_name
    cookie名称
    
    $document_root
    当前请求的文档根目录或别名
    
    $document_uri
    同 $uri
    
    $host
    优先级如下:HTTP请求行的主机名>”HOST”请求头字段>符合请求的服务器名
    
    $hostname
    主机名
    
    $http_name
    匹配任意请求头字段; 变量名中的后半部分“name”可以替换成任意请求头字段,如在配置文件中需要获取http请求头:“Accept-Language”,那么将“-”替换为下划线,大写字母替换为小写,形如:$http_accept_language即可。
    
    $https
    如果开启了SSL安全模式,值为“on”,否则为空字符串。
    
    $is_args
    如果请求中有参数,值为“?”,否则为空字符串。
    
    $limit_rate
    用于设置响应的速度限制,详见 limit_rate。
    
    $msec
    当前的Unix时间戳 (1.3.9, 1.2.6)
    
    $nginx_version
    nginx版本
    
    $pid
    工作进程的PID
    
    $pipe
    如果请求来自管道通信,值为“p”,否则为“.” (1.3.12, 1.2.7)
    
    $proxy_protocol_addr
    获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串。(1.5.12)
    
    $query_string
    同 $args
    
    $realpath_root
    当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径。
    
    $remote_addr
    客户端地址
    
    $remote_port
    客户端端口
    
    $remote_user
    用于HTTP基础认证服务的用户名
    
    $request
    代表客户端的请求地址
    
    $request_body
    客户端的请求主体
    此变量可在location中使用,将请求主体通过proxy_pass, fastcgi_pass, uwsgi_pass, 和 scgi_pass传递给下一级的代理服务器。
    
    $request_body_file
    将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off, uwsgi_pass_request_body off, or scgi_pass_request_body off 。
    
    $request_completion
    如果请求成功,值为”OK”,如果请求未完成或者请求不是一个范围请求的最后一部分,则为空。
    
    $request_filename
    当前连接请求的文件路径,由root或alias指令与URI请求生成。
    
    $request_length
    请求的长度 (包括请求的地址, http请求头和请求主体) (1.3.12, 1.2.7)
    
    $request_method
    HTTP请求方法,通常为“GET”或“POST”
    
    $request_time
    处理客户端请求使用的时间 (1.3.9, 1.2.6); 从读取客户端的第一个字节开始计时。
    
    $request_uri
    这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI,不包含主机名,例如:”/cnphp/test.php?arg=freemouse”。
    
    $scheme
    请求使用的Web协议, “http” 或 “https”
    
    $sent_http_name
    可以设置任意http响应头字段; 变量名中的后半部分“name”可以替换成任意响应头字段,如需要设置响应头Content-length,那么将“-”替换为下划线,大写字母替换为小写,形如:$sent_http_content_length 4096即可。
    
    $server_addr
    服务器端地址,需要注意的是:为了避免访问linux系统内核,应将ip地址提前设置在配置文件中。
    
    $server_name
    服务器名,www.cnphp.info
    
    $server_port
    服务器端口
    
    $server_protocol
    服务器的HTTP版本, 通常为 “HTTP/1.0” 或 “HTTP/1.1”
    
    $status
    HTTP响应代码 (1.3.2, 1.2.2)
    
    $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space
    客户端TCP连接的具体信息
    
    $time_iso8601
    服务器时间的ISO 8610格式 (1.3.12, 1.2.7)
    
    $time_local
    服务器时间(LOG Format 格式) (1.3.12, 1.2.7)
    
    $uri
    请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如”/foo/bar.html”。
  • 相关阅读:
    转:Metronic – 超赞!基于 Bootstrap 的响应式后台管理模板
    [km] 如何判断一个直播系统是否使用的是RTMP
    xshell5.0实现中键复制
    [转] 腾讯云直播OBS推流教程
    eclipse格式化代码快捷键失效
    JAVA注解@Interface基础知识
    MySQL按中文拼音排序
    Navicat连不上mysql8
    MySQL重置root密码
    CentOS7防火墙之firewalld
  • 原文地址:https://www.cnblogs.com/fengjian2016/p/6650374.html
Copyright © 2011-2022 走看看