nginx 配置文件详细介绍

简介: nginx 配置文件详细介绍

一,   nginx 配置文件架构

上一篇  已对 main 全局配置做了详细介绍   本章对剩下的配置文件部分做介绍

二,event  设置

(一)event 相关的配置文件为

配置工作模式以及连接数

(二)具体表现

1,单个worker最大并发连接数

worker_connections 65536; #设置单个工作进程的最大并发连接数

注意:要和配置文件中全局配置的   worker_rlimit_nofile 数量;  (所有worker最大并发连接数) 配合

2,   使用epoll事件驱动      

use epoll;

默认使用epoll事件驱动          Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置                  

3, 惊群

accept_mutex on;

#on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为on

4,一个worker 可以同时接待多个请求

multi_accept on;

#ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on

三,   http设置

(一)http

http 是一个大的语句块,包含若干个小的语句块(比如server语句块)

(二) http 协议配置说明

1. http {
2.    include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录
3.    default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
4. #日志配置部分
5.    #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
6.    #                 '$status $body_bytes_sent "$http_referer" '
7.    #                 '"$http_user_agent" "$http_x_forwarded_for"';
8.    #access_log logs/access.log main;
9. #自定义优化参数
10.    sendfile       on;    零拷贝技术
11.    #tcp_nopush     on; #在开启了sendfile的情况下,合并请求后统一发送给客户端。
12.    #tcp_nodelay   off; #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。
13.    #keepalive_timeout 0;
14.    keepalive_timeout  65 65; #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
15.    #gzip on; #开启文件压缩
16. 
17.    server {
18.        listen       80; #设置监听地址和端口
19.        server_name localhost; #设置server name,可以以空格隔开写多个并支持正则表达式,如:*.kgc.com www.kgc.* ~^www\d+\.kgc\.com$ default_server 
20.        #charset koi8-r; #设置编码格式,默认是俄语格式,建议改为utf-8
21.        #access_log logs/host.access.log main;
22.        location /fxj  {           www.ky31.com/fsj     /apps/nginx/html   
23.            root   /data;
24.            index index.html index.htm;
25.        }
26.        #error_page 404             /404.html;
27.        # redirect server error pages to the static page /50x.html
28.        #
29.        error_page   500 502 503 504 /50x.html; #定义错误页面
30.        location = /50x.html {
31.            root   html;
32.        }
33.        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
34.        #
35.        #location ~ \.php$ { #以http的方式转发php请求到指定web服务器
36.        #   proxy_pass   http://127.0.0.1;
37.        #}
38.        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
39.        #
40.        #location ~ \.php$ { #以fastcgi的方式转发php请求到php处理
41.        #   root           html;
42.        #   fastcgi_pass   127.0.0.1:9000;
43.        #   fastcgi_index index.php;
44.        #   fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
45.        #   include       fastcgi_params;
46.        #}
47.        # deny access to .htaccess files, if Apache's document root
48.        # concurs with nginx's one
49.        #
50.        #location ~ /\.ht { #拒绝web形式访问指定文件,如很多的网站都是通过.htaccess文件
51. 来改变自己的重定向等功能。
52.        #   deny all;
53.        #}
54.        location ~ /passwd.html {
55.            deny all;
56.        }
57.    }
58.    # another virtual host using mix of IP-, name-, and port-based configuration
59.    #
60.    #server { #自定义虚拟server
61. 3.3.1 MIME
62. 范例: 识别php文件为text/html
63.    #   listen       8000;
64.    #   listen       somename:8080;
65.    #   server_name somename alias another.alias;
66.    #   location / { 
67.    #       root   html;
68.    #       index index.html index.htm; #指定默认网页文件,此指令由
69. ngx_http_index_module模块提供
70.    #   }
71.    #}
72.    # HTTPS server
73.    #
74.    #server { #https服务器配置
75.    #   listen       443 ssl;
76.    #   server_name localhost;
77.    #   ssl_certificate     cert.pem;
78.    #   ssl_certificate_key cert.key;
79.    #   ssl_session_cache   shared:SSL:1m;
80.    #   ssl_session_timeout 5m;
81.    #   ssl_ciphers HIGH:!aNULL:!MD5;
82.    #   ssl_prefer_server_ciphers on;
83.    #   location / {
84.    #       root   html;
85.    #       index index.html index.htm;
86.    #   }
87.    #}

1, mime

此项为支持的 文件格式,如果不支持的格式 会自动帮你下载,如果支持 就会显示在网页上

2,  server块构建虚拟主机

2.1  子配置文件规则

子配置文件委身在http 模块 写其他的模块内容是用的

子配置文件里的内容 和http 模块下面的内容冲突时 以子配置文件为 读配置文件由上而下 所以建议子配置文件放这个模块的最后

2.2 如何写子配置文件

检查一下

2.3  做虚拟主机

两个容易犯错的地方!

注意 子配置文件的位置!在  /apps/nginx/conf.d/

注意关闭防火墙  否则报错    curl: (7) Failed connect to www.m.com:80; 没有到主机的路由

1,在/apps/nginx/conf.d/   各自新建shouji.conf    diannao.conf

2, 分别  给两个访问目录加内容

index.html   是站点文件  因为配置文件写了客户机访问时 默认去这里看

3, 服务机  检查

4, 客户机配置 域名 vim    /etc/hosts

5, 客户机分别访问   看到不同的东西

3,root location

3.1   root location 意义

root    指明根目录的位置

location    追踪url   根据用户访问的地址不同,去往不同的页面

3.2   location 下面再写root

把 局部的根  站点文件写入     111

原理:

直接curl   访问原来的根   (没匹配到location  下面的根)

curl  /shouji/   匹配到location    取下面的根

curl  ip 地址时    子配置文件有两个diannao.conf   和  shouji.conf   按字母排序   先匹配到diannao.conf   所以显示  diannao

4,     alias 别名

server {
   listen 80;
   server_name www.kgc.com;
   location /nwes {
        root /data/nginx/html/pc/;
        #相当于追加  将 文件夹news追加到/data/nginx/html/pc/news
        }
   location /study{
        alias /mnt/nginx/sports/;
        #相当于替换 你访问 study  就是访问/mnt/nginx/sports
        }
}

(三)  location 去匹配

1, 介绍

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,按一定的优化级找出一个最佳匹配,而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。

2,语法规则

location [ = | ~ | ~* | ^~ ] uri { ... }

= #用于标准url前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~ #用于标准url前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~     #用于标准url前,表示包含正则表达式,并且区分大小写
~* #用于标准url前,表示包含正则表达式,并且不区分大写
不带符号   #匹配起始于此uri的所有的uri

匹配优先级从高到低:
=,           ^~,             ~/~*,         不带符号

3, 例题

4 ,location     一个bug

4.1  区分大小写问题

~*  是不区分大小写的

#匹配 已A后面一个或没有字符,已.jpg结尾的图片     ?表示1个或0个

然后在 新根  下面放一张图片   改名   a.jpg    

重新加载配置文件

浏览器输入  192.168.217.66/a.jpg      看不到

因为 软件不区分大小写 但是linux的文件系统xfs还是会区分大小写

输入  A.jpg   才能看到图片

5,  location 匹配顺序

5.1  实验1

location 不是由上而下的 是看优先级读    

根据 location  匹配规则   应该按照优先级    匹配/data/index.html   的内容

5.2  实验2

根据优先级 先看到static1 再看到3 再看到2

6,location 作用

因为nginx 不擅长处理动态资源

需要动静分离

静态资源去找nginx

动态资源 去另外一个服务器

四 , access 模块 四层控制

access 模块   控制ip

(一)如何查看模块是否默认安装

去到源码包

安装nginx时   有些模块默认安装   有些模块是手动安装

without 是默认安装     with  是手动安装

(二) 控制ip

配置文件修改

server {

  listen 80;

  server_name www.kgc.com;

  allow 192.168.91.0/24;

  deny 192.168.91.101;

  location / {

       root /data/nginx/html/pc;

}

}

匹配了之后就不往下匹配了

所以范围小的往上

写一个子配置文件

可以发现 黑名单客户机访问不了

其他  客户机正常匹配到 opt

五, 验证模块 需要输入用户名和密码

(一)语法

在配置文件加    

auth_basic    "admin site";

       #提示信息,不是所有浏览器都有用

注意这一行一定要有  开启这个模块 并显示提示信息

auth_basic_user_file/apps/nginx/conf.d/.httpuser;

       #密码文件存放位置    且这个文件 需要用特定的命令生成(htpasswd )

(二)htpasswd

此命令来自于 httpd-tools 包,如果没有安装 一下即可

1,  htpasswd 选项

-c  代表新建用户名和密码对应的文件

htpasswd -c  文件路径 姓名             交互式生成密码

-b  将密码跟在用户名后

htpasswd -c 文件路径 姓名 密码           直接将密码跟在后面

2, htpasswd 示例

再新增一个   小红用户  直接跟密码

注意: 这两个账户是nginx的虚拟账号

(三)验证模块  示例

注意! 提示信息不是所有浏览器都能看到

          且 此处匹配的是  /mnt/html/admin

六  ,网页的状态页

(一)语法

(二)stub_status 示例

用客户端访问   可以看到网页的状态

(三) 网页状态页具体解释

Active connections #当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting
accepts #统计总值,Nginx自启动后已经接受的客户端请求的总数
handled #统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests #统计总值,Nginx自启动后客户端发来的总的请求数。
Reading #当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足
Writing #当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
Waiting #当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)

(四)提取网页状态页的 Reading Writing Waiting

目的:提取这三个数字

当直接提取  会有很多垃圾信息

把多余的信息  导给垃圾箱

(五) 加密 网页状态页

1,为什么要加密 网页状态页

网页状态页比较机密   所以需要加密。

两个方法可以配合使用

1,用验证模块  要求输入账号密码才能访问  这个网页

2,设置白名单 默认都不能进  只允许自己进

2,加密 网页状态页  并提取Reading Writing Waiting

此时直接用 curl 文字版浏览器会出现401 报错

401报错; 请求  要求用户的身份验证

需要按照url 格式补完用户和密码  再去提取

七,自定义错误页面

我们 可以改变 默认的错误页面,同时也可以用指定的响应状态码进行响应, 可用位置:http, server, location, if in location

(一)格式

(二)示例

#当出现404 错误  就去  /data/error/ 这个文件夹找40x.html  这个文件

给这个 40.xhtml  加内容(你可以把html 理解为一种文件格式 类似txt  index只是名字

客户机 输入没有的地址  不会出现404

八 , 自定义状态码

(一)改404 的意义

但是有些流氓浏览器   会劫持你的网站,当出现404时,没等到你把客户机引导到  自定义的页面,就被劫持了。

所以需要改状态码

(二)步骤

很简单  加上404=302 即可

客户机:  状态码变为302 这样不用担心被劫持了

九, 检测文件是否存在

try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。

(一)语法

注意  :比如客户机访问/abc   依次去试

主页面的abc文件夹          主页面的 abc.html 文件   主页面下 abc/index.html 文件

最后有个   主页面下 about/default.html 拖底

(二)  示例

注意!!!  不要手贱!

try_files $uri $uri.html $uri/index.html /about/default.html            中间不要多打空格!

在拖底文件夹 里写入tuodi

客户机验证:

我们再来检验   try_files会按顺序检查  

在 /data 下建abc.html

客户机再次验证: 匹配的是这里的内容

十  , 长连接

http 基于 tcp 协议 先要 三次握手然后 再传输数据

一次三次握手 下载多个资源

一次三次握手下载一个资源

(一)语法

默认开启 在主配置文件

(二)示例

keepalive_requests 3; #最大下载三个资源就会断开
keepalive_timeout 60 65;
(只能有一个空格 )
#开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。
Keep-Alive:timeout=60  #浏览器收到的服务器返回的报文
#如果设置为0表示关闭会话保持功能
keepalive_disable none | browser ...;

对哪种浏览器禁用长连接

十一 ,  作为下载服务器配置

(一)介绍

ngx_http_autoindex_module 模块处理以斜杠字符 "/" 结尾的请求,并生成目录列表,可以做为下载服务

(二)语法

(三) 示例

配置文件添加  locatoin  /download

往   /download/   文件夹加入内容

客户机访问

(四)用户上传资料

上传需要借助开发小的程序, 并且程序 5M 和 nginx 10M 都会限制。 两者取最小

十二 ,   其他设置

directio size | off;
#操作完全和aio相反,aio是读取文件而directio是写文件到磁盘,启用直接I/O,默认为关闭,当文件大于等于给定大小时,例如:directio 4m;同步(直接)写磁盘,而非写缓存。
 
直接 写入 磁盘     还是等待一定数据量写入磁盘
open_file_cache off;  #是否缓存打开过的文件信息
open_file_cache max=N [inactive=time];
#nginx可以缓存以下三种信息:
(1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间
(2) 打开的目录结构
(3) 没有找到的或者没有权限访问的文件的相关信息 
max=N:#可缓存的缓存项上限数量;达到上限后会使用LRU(Least recently used,最近最少使用)算法实现管理
inactive=time:#缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于
 
 
 
open_file_cache_min_uses    
#指令所指定的次数的缓存项即为非活动项,将被删除 
open_file_cache_valid time; 
#缓存项有效性的检查验证频率,默认值为60s 
open_file_cache_errors on | off; 
#是否缓存查找时发生错误的文件一类的信息,默认值为off
open_file_cache_min_uses number; 
#open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项,默认值为1
 
范例:
open_file_cache max=10000 inactive=60s; 
#最大缓存10000个文件,非活动数据超时时长60s
open_file_cache_valid   60s;  
#每间隔60s检查一下缓存数据有效性
open_file_cache_min_uses 5; 
#60秒内至少被命中访问5次才被标记为活动数据
open_file_cache_errors   on;
#缓存错误信息
 
 
 
limit_except method ... { ... },仅用于location
#限制客户端使用除了指定的请求方法之外的其它方法 
method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, 
PROPPATCH, LOCK, UNLOCK, PATCH
limit_except GET {
 allow 192.168.91.101;
 deny all;
}
#除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用

十三,写配置文件时一直有交换提示

有交换提示 把隐藏文件删了

相关文章
|
1月前
|
应用服务中间件 nginx
Nginx 配置文件详解
Nginx 配置文件详解
75 0
|
9月前
|
应用服务中间件 Linux nginx
Mac Nginx 配置文件使用(nginx.conf,包含M1)
Mac Nginx 配置文件使用(nginx.conf,包含M1)
318 0
|
1月前
|
存储 Ubuntu 应用服务中间件
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
41 1
|
1月前
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
67 4
|
9天前
|
缓存 负载均衡 应用服务中间件
深入解析Nginx配置文件
Nginx是一个高性能HTTP服务器和反向代理,其配置文件`nginx.conf`包含全局、事件、HTTP、Server和Location块。全局块设置如用户和工作进程数,事件块设定连接数,HTTP块涉及MIME类型、日志和包含其他配置。Server块定义虚拟主机,Location块处理URI匹配。Nginx常用于反向代理和负载均衡,如`proxy_pass`指令转发请求至后端服务器组。理解这些配置有助于服务器优化和测试。
14 0
|
2天前
|
前端开发 应用服务中间件 nginx
nginx前后端分离、多前端部署配置文件
nginx前后端分离、多前端部署配置文件
10 2
|
3天前
|
应用服务中间件 nginx
nginx更改配置文件后重启
nginx更改配置文件后重启
11 1
|
28天前
|
Ubuntu 应用服务中间件 Linux
蓝易云 - Linux学习之Ubuntu20中OpenResty的nginx目录里内容和配置文件
你可以根据你的需要修改这个配置文件,例如增加新的服务器块,位置块,修改监听的端口等。修改完配置文件后,你需要重载Nginx配置,可以使用 `/usr/local/openresty/nginx/sbin/nginx -s reload`命令来实现。
27 0
|
1月前
|
Java 应用服务中间件 PHP
Nginx配置文件解释
Nginx配置文件解释
22 1
|
1月前
|
存储 NoSQL 应用服务中间件
Etcd+Confd实现Nginx配置文件自动管理
Etcd+Confd实现Nginx配置文件自动管理