草庐IT

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

自由洋溢_ 2023-03-28 原文

目录:

  1. nginx作为web服务器时使用的配置.

  2. 网络连接相关的配置:


正文:

一、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中的<Location>,用于定义URL与本地文件系统的映射关系;           一个server里面可以指定多个location;          location URL {                       if ... {                              ...                      }               }         } # 每个server类似于httpd中的一个<VirtualHost>;            server {                ...          }   }注:

  1. http与http相关的指令仅能够放置于http, server, location, upstream, if 上下文,但有些指令仅应用于这5种上下文中的某些之中;  

  2. 为了区分和方便管理每个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 /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即可,注意与第一部分/的那个区分开。
出错可查看相应error日志和access日志;

6) alias path;

作用:用于location配置段,定义路径别名;

location /p_w_picpaths/ {     root "/Web/web1";  } location /p_w_picpaths/{     alias "/www/pictures";  } //此处访问/p_w_picpaths/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 /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: 仅用于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  ^/p_w_picpaths/(.*\.jpg)$ /imgs/$1 break;      http://www.magedu.com/p_w_picpaths/a/b/c/1.jpg --> /imgs/a/b/c/1.jpgflags:
   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;
    发送响应报文的超时时长;


--- 第二部分完成!




有关Nginx从入门到掌握【(第2节(共3节)】的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  4. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  5. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  6. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  7. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  8. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  9. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

  10. ruby-on-rails - Websocket-rails 不适用于 Nginx 和 Unicorn 的生产环境 - 2

    我有带有gemwebsocket-rails0.7的Rails3.2应用程序。在开发机上,一切正常在生产环境中,我使用Nginx/1.6作为代理服务器,Unicorn作为http服务器。Thin用于独立模式(在https://github.com/websocket-rails/websocket-rails/wiki/Standalone-Server-Mode之后)。nginx配置:location/websocket{proxy_passhttp://localhost:3001/websocket;proxy_http_version1.1;proxy_set_headerUp

随机推荐