设为首页 收藏本站
查看: 1361|回复: 0

[经验分享] Nginx从入门到掌握【(第2节(共3节)】

[复制链接]

尚未签到

发表于 2018-11-16 12:31:53 | 显示全部楼层 |阅读模式
  
  目录:

  •   nginx作为web服务器时使用的配置.
  •   网络连接相关的配置:
  正文:
  一、nginx作为web服务器时使用的配置.
  1. http配置段:
  Syntax: http { ... }
  Default: —
  Context: main
  http{}: 由ngx_http_core_module模块所引入;
  Documentation: http://nginx.org/en/docs/http/ngx_http_core_module.html#http
  2. server配置段:
  Syntax: server { ... }
  Default: —
  Context: http
  server{}: 由ngx_http_core_module模块所引入;
  Documentation:http://nginx.org/en/docs/http/ngx_http_core_module.html#server
  3. location配置段:
  Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
  location @name { ... }
  Default: —
  Context: server, location
  location{}: 由ngx_http_core_module模块所引入;
  4. 配置框架:
http {  
   upstream {
  
    ...
  
      }
  
   server {
  
      location {
  
          root "/path/to/somedir";
  
          ...
  
      } # 类似于httpd中的,用于定义URL与本地文件系统的映射关系;
  
          一个server里面可以指定多个location;
  
      location URL {
  
          if ... {
  
             ...
  
          }
  
      }
  
     } # 每个server类似于httpd中的一个;
  
     server {
  
          ...
  
       }
  
}
  注:

  •   http与http相关的指令仅能够放置于http, server, location, upstream, if 上下文,但有些指令仅应用于这5种上下文中的某些之中;
  •   为了区分和方便管理每个server段,常用"include FILE_PATH"引用;
  例:
http {  
    ...
  
    include server.conf; //此处配置文件server.conf使用的是相对路径,是相对于根路径/usr/local/nginx而言的;
  
}
  3. 配置指令:
  1) server {};
  作用: 定义一个虚拟主机;
server {  
     listen 8080;
  
     server_name www.yangbin.com;
  
     root "/Web/html";
  
}
  2) listen
  作用: 指定监听的地址和端口;
listen ADDRESS[:PORT]  
listen PORT;
  3) server_name NAME [...];
  作用: 后面可跟多个主机,名称还可以使用正则表达式(~)或通配符:(~开头)
  匹配规则:
  (1) 先做精确匹配检查;
  (2) 左侧通配符匹配检查:*.yangbin.com
  (3) 右侧通配符匹配检查:如mail.*
  (4) 正则表达式匹配检查:如~^.*\.yangbin\.com$
  (5) default_server;
  例:
server {  
    server_name www.yangbin.com;
  
}
  

  
server {
  
    server_name *.yangbin.com;
  
}
  

  
server {
  
    server_name mail.*;
  
}
  4) root path;
  作用: 设置资源路径映射,用于指明请求的URL所对应的资源所在的文件系统上的起始路径;
  放置范围越大,生效范围越小;
  5) location [ = | ~ | ~* | ^~ ] uri {...}
  location @name { ... }
  功能:允许根据用户请求的URL来匹配定义的各location,匹配到时,此请求将被相应的location配  置块中的配置所处理,例如做访问控制等功能;
  匹配规则:
  1) =: 精确匹配检查;
  2) ~: 正则表达式模式匹配检查,区分字符大小写;
  3) ~*: 正则表达式模块匹配检查,不区分字符大小写;
  4) ^~: URI的前半部分匹配,不支持正则表达式;
  匹配的优先级:精确匹配(=),^~,~,~*,不带任何符号的location; 即先匹配普通,再匹配正则;
  例:
server {  
        listen 80;
  
        server_name www.yangbin.com;
  
        location / {
  
            root "/Web/html/";
  
            index index.html index.htm;
  
        }
  
        location /images/ {
  
            root "/Web/images/";
  
        }  //上面两行其实表示的完整路径是/Web/images/images
  
           //目录名后面一定要加"/".
  
        location ~* \.php$ {
  
            fcgipass;
  
        }
  
}
  如:
  /Web/images下有个xx.png,访问时: http://10.68.7.223/images/images/xx.png即可,注意与第一部分/的那个区分开。
  出错可查看相应error日志和access日志;
  6) alias path;
  作用:用于location配置段,定义路径别名;
location /images/ {  
    root "/Web/web1";
  
}
  
location /images/{
  
    alias "/www/pictures";
  
} //此处访问/images/xx.html,就是访问的/www/pictures/xx.html.
  注:
  root表示指明路径为对应的location "/" URL;
  alias表示路径映射, 即location指令后定义的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 file;
  作用: 设置默认主页面;
index index.php index.html;  8) error_page code [...] [=code] URI | @name
  作用: 根据http响应状态码来指明特定的错误页面;
error_page 404 /404_customed.html; //即把404错误的页面设定为我们自己指定的页面;  [=code]: 以指明的响应码进行响应,而非默认的原来的响应,默认表示以新资源的响应码为其响应码;
  例:在server段配置
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_errors on|off
  默认值:fastcgi_intercept_errors off
  使用字段:http, server, location
  该指令指定是否传递4xx和5xx错误信息到客户端,或允许nginx使用error_page处理错误信息。
  必须明确在error_page中指定处理方法使这个参数有效。
  9) 基于IP的访问控制:
  allow IP/Network;
  deny IP/Network;
  示例:
location /js/ {  
    root /Web/www/;
  
    allow 10.68.7.0/24;
  
    deny all;
  
}
  10) 基于用户的访问控制
  语法: auth_basic STRING | off;
  默认值: auth_basic off;
  配置段: http, server, location, limit_except
  默认表示不开启认证,后面如果跟上字符,这些字符会在弹窗中显示。
  语法: auth_basic_user_file "/PATH/TO/PASSWORD_FILE";
  默认值: —
  配置段: http, server, location, limit_except
  可使用相对路径.账号密码文件建议使用htpasswd来创建;
  htpasswd命令需要安装apache httpd服务获得.
  示例:
[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 /images/ {
  
            alias   /Web/images/;
  
            auth_basic INPUT_PASSWORD;
  
            auth_basic_user_file htpasswd/.htpasswd;
  
  }
  
  ...
  
[root@nginx nginx]# ./sbin/nginx -s reload
  浏览器访问:
DSC0000.png

  完成!
  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: 仅用于location上下文;
  作用: 主要用于查看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) Active connections: 6   # 当前所有处于打开状态的连接数;
  (2) server accepts handled requests
  (3) 241  241  431
  241 已经接受过的连接数
  241 已经处理过的连接数
  431 已经处理过的请求数: 在"保持连接"模式下,请求数量可能会多于连接数量;
  (4)Reading: 0  Writing:1  Waiting:5
  Reading: 正处于接收请求状态的连接数;Nginx 读取到客户端的Header信息数,即连接数;
  Writing: 请求已经接收完成,正处于处理请求或发送响应的过程中的连接数;Nginx 返回给客户端的Header信息数.即响应数据到客户端的数量;
  waiting: 保持连接模式,且处于活动状态的连接数; 开启keep-alive的情况下,这个值等于   active – (reading + writing),意思就是Nginx已经处理完成,正在等候下一次请求指令的驻留连接.
  13) rewrite regex replacement flags;
  作用:路由重写是Web服务器中的一个很重要的基本功能。通过路由重写,可以结构化URL,更具语义化(对SEO有益)。另外,分享出去的URL可能会因程序路由变动而导致URL失效,而路由的重写可以很好的解决这类问题。
  regex: 用于匹配URI的正则表达式。使用括号"()"标记要截取的内容。
  使用环境:server, location, if
  注:该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效;
  例:
rewrite  ^/images/(.*\.jpg)$ /imgs/$1 break;  
    http://www.magedu.com/images/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg
  flags:
  1) last: 一旦此rewrite规则重写完成后,就不再被后面其他的rewrite规则进行处理,而是由User Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程;
  2) break: 一旦此rewrite规则重写完成后,由User Agent对新的URL重新发起请求,且不会再被当前location内的任何rewrite规则所检查;
  3) redirect: 以302响应码(临时重定向)返回新的URL.
  4) permanent:  以301响应码(永久重定向)返回新的URL;
  14) if   
  语法: if (condition){...}
  应用环境: server, location
  condition:
  (1) 变量名:
  变量值为空串,或者以"0"开始,则为false; 其他的均为true;
  (2) 以变量为操作数构成的比较表达式;
  可使用=,!=类似的比较操作符进行测试;
  (3) 正则表达式的模式匹配操作:
  ~: 区分大小写的模式匹配检查;
  ~*: 不区分大小写的模式匹配检查;
  !~和!~*: 对上面两种测试取反;
  (4) 测试路径为文件可能性: -f, !-f
  (5) 测试指定路径为目录的可能性:
  (6) 测试文件的存在性: -e, !-e
  (7) 检查文件是否有执行权限: -x, !-x
  例如:
if($http_user_agent ~* MSIE) {  
      rewrite ^(.*)$ /msie/$1 break;
  
}
  15) 图片防盗链;
  语法: valid_referers none | blocked | server_names | string ...;
  默认值: —
  配置段: server, location
  作用: 指定合法的来源'referer',它决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1.此变量不区分大小写.
  参数说明:
  none: "Referer"来源头部为空的情况
  blocked: "Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头.
  server_names: "Referer"来源头部包含当前的server_names(当前域名)
  arbitrary string: 任意字符串,定义服务器名或者可选的URI前缀.主机名可以使用*开头或者结尾,在检测来源头部这个过程中,来源域名中的主机端口将会被忽略掉
  regular expression: 正则表达式,~表示排除https://或http://开头的字符串.
  location ~* \.(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 TIME;
  长连接的超时时长,默认是75s;
  2. keepalive_requests N;
  在一个长连接上所能允许请求的最大资源数;
  3. keepalive_disable [msie6|safari|none];
  位指定类型的User Agent禁用长连接;
  4. tcp_nodelay on|off;
  是否对长连接使用TCP_NODELAY选项;
  5. client_header_timeout TIME;
  读取http请求报文首部的超时时长;
  6. client_body_timeout TIME;
  读取http请求报文body部分的超时时长;
  7. send_timeout TIME;
  发送响应报文的超时时长;
  --- 第二部分完成!



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-635804-1-1.html 上篇帖子: ​nginx依赖模块pcre、zlib、openssl 安装 下篇帖子: Nginx HttpMemcModule和直接访问memcached效率对比测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表