Nginx从入门到掌握【(第2节

Nginx从入门到掌握【(第2节,第1张

Nginx从入门到掌握【(第2节(共3节)】


目录:

  • nginx作为web服务器使用的配置。

  • 与网络连接相关的配置:


    文本:

    一、nginx作为web服务器使用的配置。

    1。http配置段:

    语法:http{...}
    默认值:—
    上下文:main

    Http{}:由ngx_http_core_module模块引入;

    文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#http

    2。服务器配置段:

    语法:服务器{...}
    默认:—
    上下文:http

    服务器{}:由ngx_http_core_module模块引入;

    文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#server

    3。位置配置段:

    语法:location[=|~|~*|^~]uri{...}
    位置@名称{...}
    默认值:—
    上下文:服务器,位置

    位置{}:由ngx_http_core_module模块引入;

    4。配置框架:

    http {      upstream {           ...         }       server {              location {                       root "/path/to/somedir";                    ...             } # 类似于httpd中的<Location>,用于定义URL与本地文件系统的映射关系;           一个server里面可以指定多个location;          location URL {                       if ... {                              ...                      }               }         } # 每个server类似于httpd中的一个<VirtualHost>;            server {                ...          }   }

    注意:

  • Http相关的指令只能放在http、server、location、upstream和if上下文中,但有些指令只应用在这五个上下文中的某些上下文中;

  • 为了方便区分和管理各个服务器段,通常会引用“includeFILE_PATH”;

    示例:

    http {     ...      include server.conf; //此处配置文件server.conf使用的是相对路径,是相对于根路径/usr/local/nginx而言的; }

    3。配置说明:

    1)服务器{};
    角色:定义虚拟主机

    server {      listen 8080;       server_name www.yangbin.com;       root "/Web/html";  }

    听听

    角色:指定监听的地址和端口;

    listen ADDRESS[:PORT] listen PORT;

    3)服务器名称名称[...];
    角色:可以跟多个主机,名字也可以用正则表达式(~)或通配符:(~开头为)
    匹配规则:
    (1)先检查精确匹配;
    (2)左通配符匹配检查:*.yangbin.com
    (3)右通配符匹配检查:如mail。*
    (4)正则表达式匹配检查:如~。*\.杨斌\。com$
    (

    示例:

    server {     server_name www.yangbin.com; }       server {     server_name *.yangbin.com; }      server {     server_name mail.*;  }

    4)根路径;
    角色:设置资源路径映射,用于指示请求的URL对应的资源所在的文件系统上的起始路径;
    投放范围越大,有效范围越小;

    5)地点[=|||~*|]URI{...}
    位置@名称{...}
    功能:允许根据用户请求的URL匹配定义的位置,这个请求会被相应的位置分配。

    匹配规则:
    1)=:精确匹配检查;
    2)~:正则表达式模式匹配检查,区分大小写;
    3)~*:正则表达式模块匹配检查,不区分大小写;
    4)~:URI匹配前半部分,不支持正则表达式;

    匹配优先级:精确匹配(=)、~、~、~*、位置无任何标志;即先配普通的,再配正规的;

    示例:

    server {         listen 80;         server_name www.yangbin.com;          location / {             root "/Web/html/";              index index.html index.htm;         }         location /p_w_picpaths/ {             root "/Web/p_w_picpaths/";          }  //上面两行其实表示的完整路径是/Web/p_w_picpaths/p_w_picpaths             //目录名后面一定要加"/".         location ~* \.php$ {             fcgipass;          }  }

    例如:

    /Web/p_w_picpaths下有一个xx.png。访问时:http://10.68.7.223/p_w_picpaths/p_w_picpaths/xx.png,请注意与第一部分中的区分开来/。
    如果有错误,检查相应的错误日志和访问日志;

    6)别名路径;

    角色:用于位置配置段,定义路径别名;

    location /p_w_picpaths/ {     root "/Web/web1";  } location /p_w_picpaths/{     alias "/www/pictures";  } //此处访问/p_w_picpaths/xx.html,就是访问的/www/pictures/xx.html.

    注意:

    Root表示指示的路径是对应的位置“/”URL;
    alias表示路径映射,即定位指令后定义的URL相对于alias所指示的路径;
    一般来说,在location/中配置root,在location/other中配置alias是个好习惯。
    示例:

    One. location ~ ^/awstats/ {        alias /Web/    }    访问:http://yangbin.com/awstats/     实际访问的是http://yangbin.com/Web/   First. location ~ ^/awstats/ {                             #使用alias时目录名后面一定要加“/”        alias /Web/awstats/;    }    访问:http://yangbin.com/awstats/     实际访问的是http://yangbin.com/Web/awstats/   Third. location ~ ^/awstats/ {        root /Web/;    }    访问:http://yangbin.com/awstats/     实际访问的是http://yangbin.com/web/awstats/

    7)索引文件;
    功能:设置默认主页;

    index index.php index.html;

    8)error_pagecode[...][=code]uri|@name
    角色:根据http响应状态码指示具体错误页面;

     error_page 404 /404_customed.html; //即把404错误的页面设定为我们自己指定的页面;

    [=code]:用指定的响应代码响应,而不是默认的原始响应,这意味着新资源的响应代码是默认的响应代码;
    示例:在服务器段中配置

    server{     ...     fastcgi_intercept_errors on;     error_page  404 /309.html;  //此处的/309.html是相对于网站根目录而言的,即 location / 对应的root路径.     location / {          root "/web/www";     }  } [root@nginx nginx]# ls /Web/www/ 309.html  index.html [root@nginx nginx]#

    摘要:
    fastcgi_intercept_errors
    语法:fastcgi_intercept_errorson|off
    默认值:fastcgi_intercept_errorsoff
    使用字段:http,server,Location
    该指令指定是否将4xx和5xx错误消息传递给客户端,或者允许nginx使用error_page来处理错误消息。
    必须在error_page中显式指定处理方法,以使此参数有效。

    9)基于IP的访问控制:
    允许IP/网络;
    拒绝IP/网络;

    示例:

    location /js/ {     root /Web/www/;     allow 10.68.7.0/24;      deny all;  }

    10)基于用户的访问控制

    语法:auth_basicSTRING|off
    默认值:auth_basicoff
    配置段:http,server,location,limit_except

    这意味着默认情况下不打开身份验证。如果跟随字符,这些字符将显示在d出窗口中。

    语法:auth_basic_user_file"/path/to/password_file";
    默认值:—
    配置段:http,server,location,limit_except

    您可以使用相对路径。建议使用htpasswd创建帐户密码文件;

    htwd命令需要通过安装apachehttpd服务来获得。

    示例:

    [root@nginx nginx]# which htpasswd /usr/bin/htpasswd  [root@nginx nginx]# htpasswd --help  [root@nginx nginx]# id yangbin uid=1000(yangbin) gid=1000(yangbin) 组=1000(yangbin) [root@nginx nginx]# htpasswd -cm  conf/htpasswd/.htpasswd yangbin New password:  Re-type new password:  Adding password for user yangbin [root@nginx nginx]# ll ./htpasswd/ -a 总用量 4 drwxr-xr-x.  2 root root  23 1月  12 16:07 . drwxr-xr-x. 13 root root 182 1月  12 16:06 .. -rw-r--r--.  1 root root  46 1月  12 16:07 .htpasswd [root@nginx nginx]# chown nginx:root ./htpasswd/.htpasswd [root@nginx nginx]# vim conf/server.conf    ...  location /p_w_picpaths/ {             alias   /Web/p_w_picpaths/;             auth_basic INPUT_PASSWORD;             auth_basic_user_file htpasswd/.htpasswd;   }   ... [root@nginx nginx]# ./sbin/nginx -s reload

    浏览器访问:

    搞定了。

    11)https服务
    实现方法:生成私钥,生成证书签名请求,获取证书;
    示例:

     server {      listen       443 ssl;      server_name  localhost;           ssl_certificate      /usr/local/nginx/ssl/nginx.crt;      ssl_certificate_key  /usr/local/nginx/ssl/nginx.key;           ssl_session_cache    shared:SSL:1m;      ssl_session_timeout  5m;           ssl_ciphers  HIGH:!aNULL:!MD5;      ssl_prefer_server_ciphers  on;  }

    https的具体配置过程,我在lvs博客里写过,这里不再赘述。

    12)stub_status{on|off}
    context:仅用于位置上下文;
    功能:主要用于查看Nginx的一些状态信息。
    这个模块默认不会编译成Nginx。如果你想使用这个模块,你应该在编译和安装Nginx时指定:

    示例:

    [root@nginx nginx-1.10.2]# pwd /mnt/tools/nginx-1.10.2 [root@nginx nginx-1.10.2]# ./configure --help |egrep "stub"   --with-http_stub_status_module     enable ngx_http_stub_status_module [root@nginx nginx-1.10.2]# ./configure –with-http_stub_status_module

    检查安装的Nginx是否包含“stub_status”模块:

    #/usr/local/nginx/sbin/nginx -V

    示例:

    server {        listen  80;        server_name  yangbin.com;                location / {            root "/web/www";            stub_status on;        } } [root@nginx ~]# curl 10.68.7.223 Active connections: 6 server accepts handled requests  241  241  431  Reading: 0 Writing: 1 Waiting: 0  [root@nginx ~]#

    解释:

    (1)活动连接:6#所有打开的连接的当前数量;
    (2)服务器接受已处理的请求
    (3)241241431
    241已接受的连接数
    241已处理的连接数
    431已处理的请求数:在“保持连接”模式下,请求数
    (4)读:0写:1等待:5
    读:处于接收请求状态的连接数;Nginx向客户端读取的头信息个数,即连接数;
    Writing:其请求已被接收并正在处理请求或发送响应的连接数;Nginx返回给客户端的头信息的数量。也就是给客户端的响应数据的数量;
    waiting:保持连接模式并处于活动状态的连接数;当keep-alive开启时,该值等于active(读+写),表示Nginx已经完成处理,正在等待下一个请求指令的常驻连接。
    13)重写regex替换标志;

    角色:路由重写是Web服务器中一个非常重要的基本功能。通过路由重写,URL可以结构化,更有语义(有利于SEO)。另外,共享的URL可能会因为程序路由的改变而失效,路由的重写可以很好的解决这类问题。
    regex:用于匹配URIs的正则表达式。使用括号“()”标记要拦截的内容。
    使用环境:server,location,if
    注意:此指令根据表达式重定向URIs或修改字符串。根据配置文件中的顺序执行指令。注意,重写表达式仅对相对路径有效;

    示例:

    rewrite  ^/p_w_picpaths/(.*\.jpg)$ /imgs/$1 break;      http://www.magedu.com/p_w_picpaths/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg

    Flags:
    1)last:这个重写规则一旦被重写,就不会被其他重写规则处理,但是用户代理会重新发起对重写后的URL的请求,从头开始执行类似的过程;
    2)break:一旦这个重写规则被重写,用户代理将重新发起对新URL的请求,并且不会被当前位置的任何重写规则检查;
    3)重定向:返回一个带有302响应代码的新URL(临时重定向)。
    4)永久:返回一个新的URL,带有301响应代码(永久重定向);

    14)if
    语法:if(condition){...}
    应用环境:服务器,位置
    条件:
    (1)变量名:
    变量false其他为真;
    (2)以变量为 *** 作数的比较表达式;
    您可以使用=,!=用于测试的相似比较运算符;
    (3)正则表达式的模式匹配 *** 作:
    ~:区分大小写的模式匹配检查;
    ~*:不区分大小写的模式匹配检查;
    !~还有!~*:否定以上两个测试;
    (4)测试路径是文件的可能性:-f,!-f
    (5)测试指定路径是目录的可能性:
    (6)测试文件的存在性:-e,!-e
    (7)检查文件是否有执行权限:-x,!-x
    例如:

    if($http_user_agent ~* MSIE) {       rewrite ^(.*)$ /msie/$1 break;  }

    15)图片防盗链;

    语法:valid_referersnone|blocked|server_names|string...;
    默认值:—
    配置段:服务器,位置
    角色:指定合法来源'referrer',它决定内置变量$invalid_referrer的值。如果referrer头包含在这个合法的URL中,这个变量被设置为0,否则它被设置为1。此变量不区分大小写..

    参数描述:

    无:“Referer”源头被空
    阻止:“Referer”源头不是空,但其值已被代理或防火墙删除。这些值都不是以http://或https://开头的。
    server_names:"Referer"源头包含当前的server_names(当前域名)
    任意字符串:定义服务器名或可选URI前缀的任何字符串。主机名可以以*开头或结尾,在检测源头的过程中,源域名中的主机端口会被忽略
    正则表达式:正则表达式,~表示排除以https://或http://开头的字符串。

    位置~*\。(jpg|gif|jpeg|png)${

    valid_referer none blocked www.yangbin.com;  if ($invalid_referer) {         rewrite ^/ http://www.yangbin.com/403.html;  }

    16)自定义访问日志格式;

    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;

    注意:这里可用的变量是nginx各个模块的内置变量;


    二。与网络连接相关的配置:

    1.keepalive_timeout时间;
    长连接超时时间默认为75s2.
    。keepalive_requestsN;
    长连接上可以请求的最大资源数;
    [br/]3。keepalive_disable[msie6|safari|none];
    bit指定禁用长连接的用户代理的类型;

    4。tcp_nodelayon|off
    是否对长连接使用TCP_NODELAY选项;5.
    。client_header_timeout
    读取http请求消息头的超时时间;


    6.客户端正文超时时间;
    读取http请求消息正文部分的超时时间;7.
    。send_超时时间;
    发送响应消息的超时持续时间;


    -第二部分完成了!




    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://www.outofmemory.cn/zz/777910.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存