侧边栏壁纸
博主头像
小周的知识站 博主等级

行动起来,活在当下

  • 累计撰写 80 篇文章
  • 累计创建 12 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

Nginx的的目录结构,基本运行原理及基本配置文件

Administrator
2024-06-15 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

Nginx的的目录结构,基本运行原理及基本配置文件

1 Nginx目录结构

[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp                 # POST 大文件暂存目录
├── conf                             # Nginx所有配置文件的目录
│   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
│   ├── fastcgi_params               # fastcgi的参数文件
│   ├── fastcgi_params.default       
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                   # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                   #这是Nginx默认的主配置文件,日常使用和修改的文件
│   ├── nginx.conf.default
│   ├── scgi_params                  # scgi相关参数文件
│   ├── scgi_params.default  
│   ├── uwsgi_params                 # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                     # fastcgi临时数据目录
├── html                             # Nginx默认站点目录
│   ├── 50x.html                     # 错误页面优雅替代显示文件,例如出现502错误时会调用此页面
│   └── index.html                   # 默认的首页文件
├── logs                             # Nginx日志目录
│   ├── access.log                   # 访问日志文件
│   ├── error.log                    # 错误日志文件
│   └── nginx.pid                    # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp                       # 临时目录
├── sbin                             # Nginx 可执行文件目录
│   └── nginx                        # Nginx 二进制可执行程序
├── scgi_temp                        # 临时目录
└── uwsgi_temp 

主要的目录是conf,html,及sbin。

  • conf目录放的是核心配置文件

  • html目录放的是静态页面

[root@localhost nginx]# cd html/

[root@localhost html]# ls

50x.html index.html

[root@localhost html]#

50x.html是发生错误展示的页面,index.html是默认的访问页面。可以在该目录下新建html,然后在浏览器中访问,例如在该目录下新建hello.html,内容是hello,然后访问:http://192.168.1.100/hello.html,结果如下:

  • logs文件夹用于存放日志信息:

[root@localhost nginx]# cd logs/

[root@localhost logs]# ls

access.log error.log nginx.pid

error.log存放出错的信息,nginx.pid存放的是当前nginx的pid。

  • sbin存放的是可执行文件,可以用 ./nginx启动nginx:

[root@localhost sbin]# ls

nginx

[root@localhost sbin]#

2 Nginx基本运行原理

2.1 Nginx进程模型

Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

worker进程主要处理基本的网络事件,多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。

2.2 Worker事件处理机制

传统HTTP服务器是同步处理,当多个客户端请求时,如果Client1的请求被阻塞,Master会fork新的worker进程处理

但是Nginx采用的是异步非阻塞方式,如果Client1的请求被阻塞,worker会取处理下一个请求,不会阻塞当前worker进程。所以Nginx的一个worker进程可以并发处理大量请求

3 Nginx的配置文件

Nginx的默认配置文件是nginx.conf

后面学习Nginx配置,每次修改配置文件,一定要重载才能生效

systemctl reload nginx # 以系统服务的方式启动nginx

3.1 nginx.conf配置文件

# master进程会启动worker进程,该选项设置在系统中显示启动该进程的用户名(一般不改动,默认nobody)
# user nobody


# 启动的worker进程数
worker_processes  1;       



# 错误日志放置的路径 notice、info是错误日志的级别,比如:info就是日志级别大于info才生成日志
# 默认地址为/var/log/nginx/error.log ,可通过nginx -V返回的--eror-log-path字段获取实际值
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;


# pid文件存放路径,默认:/var/run/nginx/nginx.pid,可通过nginx -V返回的--pid-path字段获取实际值
#pid        logs/nginx.pid;



# 配置事件处理方式、worker最大连接数
events {
		use epoll; # 使用epoll事件处理机制(默认值)
    worker_connections  1024; # 每个worker进程处理的最大连接数
}



# http模块配置
http {
    include       mime.types; #include是引入关键字,这里引入了mime.types这个配置文件的内容(同在conf目录下,mime.types是用来定义,请求返回的content-type)
    default_type  application/octet-stream; #mime.types未定义的,使用默认格式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"';

		# 访问日志地址,默认:/var/log/nginx/access.log,可通过nginx -V返回的--http-log-path字段获取实际值
    #access_log  logs/access.log  main;

		# 详见下文
    sendfile        on; 
    #tcp_nopush     on;
    
    keepalive_timeout  65; # TCP链接超时时间,单位秒
	
		# 压缩相关,详见下文
		gzip on; # 开启压缩,压缩后发送给客户端
		
		# 详见下文 
    server {
        //xxx
    }
}

3.2 sendfile配置

打开sendfile,用户请求的数据不用再加载到nginx的内存中,而是直接发送

高负载的场景下,使用 sendfile 功能可以降低 CPU 和内存的占用,提升服务器性能

打开sendfile,用户请求的数据不用再加载到nginx的内存中,而是直接发送

高负载的场景下,使用 sendfile 功能可以降低 CPU 和内存的占用,提升服务器性能

3.3 gzip压缩

http{
	  gzip on; # 开启压缩,压缩后发送给客户端
		gzip_min_length 1;# 设置最小压缩下限。1就是小于1字节的文件不压缩
		gzip_comp_level 3 # 压缩级别0-9,值越大文件就压缩的越小,相应的会损耗更多性能
		gzip_type text/plain application/javascript image/* # 指定哪些 MIME 类型,开启压缩(不写默认全部),可以使用通配符 image/* 就是所有图片。具体哪些类型可以看conf/mime.types文件
}

nginx 中的 gzip 压缩分为动态压缩、静态压缩

  • 动态压缩:服务器给客户端返回响应时,消耗自身的资源进行实时压缩,保证客户端拿到 gzip 格式的文件

    gzip on开启的就是动态压缩,gzip_comp_level设置的级别高,可能会造成CPU占用过高(文章:简单一招竟把nginx服务器性能提升50倍

  • 静态压缩:直接将预先压缩过的 .gz 文件返回给客户端,不再实时压缩文件,如果找不到 .gz 文件,会使用对应的原始文件

    该功能需要模块: ngx_http_gzip_static_module(默认不会被构建)

    我们可以通过下面命令查看,当前安装的是否包含该模块

./nginx -V

如果不包含,需要重新编译Nginx

./configure --with-http_gzip_static_module # 指定编译配置,这个参数安装模块`ngx_http_gzip_static_module`
make # 编译
make install # 安装

包含该模块,则可以启用下面配置

http{
	gzip_static  on;
	gzip_proxied expired no-cache no-store private auth;
}

3.4 server配置

虚拟主机配置

server {
       listen       80; 监听端口号
       server_name localhost; 主机名
       location / { 匹配路径
           root   html; 文件根目录
           index index.html index.htm; 默认页名称
       }
     
       error_page   500 502 503 504 /50x.html; 报错编码对应页面
       location = /50x.html {
           root   html;
       }
   }

虚拟主机

原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务

servername匹配规则

我们需要注意的是servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。

完整匹配

我们可以在同一servername中匹配多个域名

server_name vod.mmban.com www1.mmban.com;

通配符匹配

server_name *.mmban.com;

通配符结束匹配

server_name vod.*;

正则匹配

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

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区