Nginx配置文件详解

Nginx配置文件分析

Nginx文件目录解析

Nginx中主要有四个文件夹:

在这里插入图片描述

  • conf存放配置文件
  • html存放静态页面
  • logs存放日志信息
  • sbin存放可执行文件nginx

conf文件夹

最主要的文件就是nginx.conf,其它文件在nginx.conf中被引用。

在这里插入图片描述

html文件夹

一开始就存放了两个html文件,分别是index页面和访问失败页面。

我也可以自己放入html文件,之后只要配置好规则即可。

在这里插入图片描述

logs文件夹

存放了访问信息和错误信息,还有nginx的pid进程识别号。

在这里插入图片描述

sbin文件夹

只有一个文件,就是用于启动nginx的文件。

在这里插入图片描述

Nginx多进程模型

Nginx工作模式为多进程Nginx在启动之后会有一个master进程和多个worker进程(默认1个),多个worker子进程将监听master父进程监听的端口(参考父子进程的关系),并行处理请求。master父进程主要用来管理worker子进程(管理真正提供服务的worker进程,向worker进程发送信号,监控worker进程的运行状态,当worker进程异常退出后,会重新启动新的worker进程),读取并验证配置信息,master进程不会对用户请求提供服务,而用户请求是由worker进程进行处理。

而Nginx的热部署则是给master进程发送SIGUSR2信号,让Nginx平滑升级可执行程序。Nginx重新启动一组master进程和worker进程,而新master进程是旧master进程的子进程(通过父子进程的继承关系,新master进程可以很方便地继承旧master进程的相关资源)。

更多详情可以参考这篇文章:https://www.jb51.net/article/232570.htm

Nginx的运行原理

如下图,从用户发送请求,由Worker进程进行处理,根据配置文件解析请求,最终找到目标资源返回给用户。

在这里插入图片描述

Nginx.conf配置文件

最小配置

worker_processes

worker_processes 1;

默认为1,表示开启一个业务进程

worker_connections

worker_connections 1024;

单个业务进程可接受连接数

include mime.types

include mime.types;

引入http mime类型。

default_type application/octet-stream

default_type application/octet-stream; 

如果mime类型没匹配上,默认使用二进制流的方式传输。

sendfile on

sendfile on;

使用linux的sendfile(socket, file, len)高效网络传输,也就是数据0拷贝。

全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

events块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

http块

配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,需要注意的是:http 块中包括了 http 全局块、server 块。

  • http 全局块

http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

  • server块

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机

每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

#全区块:配置服务器整体运行的配置指令
#user  nobody;

#允许进程数量,建议设置为cpu核心数或者auto自动检测
worker_processes  1; 

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

# events块:影响 Nginx 服务器与用户的网络连接
events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # server块:每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        
        #每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }      
    }
}

虚拟主机原理

虚拟主机是为了在同一台物理机器上运行多个不同的网站,提高资源利用率引入的技术。

自定义配置虚拟主机

  1. 首先在根目录下新建一个文件夹叫:www
  2. 然后再www中在创建两个子文件夹,分别为:video、photo
  3. 在两个子文件夹中各创建一个index.html用于显示页面
  4. 配置我们本机的hosts添加域名解析:www.test.comph.test.com

vi nginx.conf 修改配置文件:

在http块中添加两个虚拟主机的配置:

# 自定义虚拟主机配置1
    server {
        listen       80;
        server_name  www.test.com;

        location / {
       		#配置根目录和默认页面
            root   /www/video;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

# 自定义虚拟主机配置2
    server {
        listen       80;
        server_name  ph.test.com;

        location / {
        	#配置根目录和默认页面
            root   /www/photo;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

访问测试:

访问www.test.com

在这里插入图片描述

访问ph.test.com

在这里插入图片描述

总结

自定义配置虚拟主机可以实现将不用不同域名的访问路由到不同的路径资源下,但是要注意,每一个server的配置中,server_namelinsten二者不可以完全相同,否则会发生冲突。

泛域名解析

简单泛域名解析就是在域名中加入通配符: * ,从而实现所有的次级域名均指向同一IP地址。

例如:*.weibo.com*.bilibili.com

泛域名解析的好处:

  • 避免键入URL详细地址不正确造成没法恰当浏览网址。
  • 键入便捷,随意键入哪些标识符都可以浏览总体目标网址(子网址)。
  • 能够完成无穷二级域名、出示完全免费URL转发,关于建网站,全自动分派免费网址等作用。自然,泛域名解析也有一个缺点,由于开展泛域名解析得话,就不可以另外在主机空间中浏览好几个不一样的子网址。现阶段,大部分网站域名全是能够开展泛域名解析的。特别注意的是,泛域名解析偏向的IP务必为单独IP地址,共享IP是不能的。

server_name的匹配规则

在一个server_name中,我们可以配置多个域名。

完整匹配

server_name  ttt.test.com  qqq.test.com;

通配符匹配

通配符匹配起始:

server_name  www.test.*;

通配符匹配结尾:

server_name  *.test.com;

注意: 精确匹配的优先级大于通配符匹配和正则匹配。

正则匹配

可以使用正则表达式进行匹配。

例如:

server_name ~^[0-9]+\.test\.com$

特殊匹配

server_name ""; 匹配Host没有请求头的情况。

总结

配置时需要注意匹配的优先级,以下情况优先级依次降低:

  1. 精确的名字
  2. *号开头的最长通配符名称,例如 *.example.org
  3. *号结尾的最长通配符名称,例如 mail.*
  4. 正则匹配,如~^\.www\.test\.com$

对配置server_name的建议:

  1. 尽量使用精确匹配
  2. 当定义大量server_name时或特别长的server_name时,需要在http级别调整server_names_hash_max_sizeserver_names_hash_bucket_size,否则nginx将会启动失败。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神烦狗闯入了你的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值