Nginx - 目录结构与配置文件详解

这篇具有很好参考价值的文章主要介绍了Nginx - 目录结构与配置文件详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

conf

nginx.conf 

worker_processes

worker_connections

include mime.types;

default_type application/octet-stream;

sendfile

sendfile off; 

sendfile on;

keepalive_timeout  65;

server {}

location / {}

error_page   500 502 503 504  /50x.html;

html

index.html

50x.html

logs

access.log

error.log

nginx.pid 

sbin

Nginx 


Nginx的目录结构:

[root@van ~]# tree /usr/local/nginx/
/usr/local/nginx/
├── client_body_temp
├── conf
│   ├── fastcgi.conf
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── mime.types.default
│   ├── nginx.conf
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp
├── html
│   ├── 50x.html
│   ├── index.html
│   └── index.php
├── logs
│   ├── access.log
│   ├── error.log
│   └── nginx.pid
├── proxy_temp
├── sbin
│   └── nginx
├── scgi_temp
└── uwsgi_temp

这里方便直观讲解,所以直接在Xftp中进行演示。

Nginx - 目录结构与配置文件详解

目录如下,可能不同 以自己的安装路径为准:

/usr/local/nginx

这里可以看到有5个以 _temp 结尾的目录,这些都是临时形成的,所以就不介绍了。


conf

顾名思义,这里是用来存放配置文件的目录,这里最为主要的是 nginx.conf 这个文件,这个是Nginx的主配置文件。若以后需要手动添加其它的配置文件,还请一并放在此目录下。

Nginx - 目录结构与配置文件详解

nginx.conf 

主要来看一下这个 nginx.conf 文件(这里直接在Xftp里右键查看了,方便):

Nginx - 目录结构与配置文件详解

内容大致如下(因为我的有做过一定修改,可能会与你们的有出入,不碍事):

#user  nobody;
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 {
    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 {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm index.php index.java;
        }

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

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

能看出来格式很想JSON串。 

worker_processes

默认为1,表示开启一个业务进程。当然你也可以把他改成10,但需要注意的是这个东西跟cpu的内核数量是有挂钩的。如果说咱们的cpu只有2核,那在这里写个3那可能就没啥意义了。如果把一个cpu内核绑定到多个进程上的话,按照时间片轮转机制来说,这样只会降低cpu的利用率。打个比方:我让A帮我去买份饭回来,但是紧接着B和C也想让A帮他们带饭,这样就延长的A帮我带饭回来的时间,那对于 我 来说A的工作效率其实是降低了的。

worker_connections

单个进程可接受连接数,默认为1024。

include mime.types;

引入http mime类型

这里的 include 命令会把另外一个配置文件引用到我们的当前的这个配置文件当中。 这里的 mime.types 配置文件是用来申明所返回或发送文件的类型。咱们的浏览器其实不能根据文件的后缀名来判断文件的格式/类型,它必须由服务器发送的http头里所标注的信息来展示文件的类型。咱们可以去这个 mime.types 里面看一下:

Nginx - 目录结构与配置文件详解


types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    application/javascript                           js;

    text/plain                                       txt;

    image/png                                        png;

    application/java-archive                         jar war ear;
    application/json                                 json;
    application/msword                               doc;
    application/pdf                                  pdf;
    application/zip                                  zip;

    application/octet-stream                         bin exe dll;
    application/octet-stream                         deb;
    application/octet-stream                         dmg;
    application/octet-stream                         iso img;
    application/octet-stream                         msi msp msm;

    audio/midi                                       mid midi kar;
    audio/mpeg                                       mp3;
    audio/ogg                                        ogg;
    audio/x-m4a                                      m4a;
    audio/x-realaudio                                ra;

    video/mp2t                                       ts;
    video/mp4                                        mp4;
    video/x-flv                                      flv;
    video/x-m4v                                      m4v;
    video/x-mng                                      mng;
    video/x-ms-asf                                   asx asf;
    video/x-ms-wmv                                   wmv;
    video/x-msvideo                                  avi;
}

复制了一部分过来,原文件的内容还是不少的。可以看到这里的格式有点像kv键值对。比如说这里18行的 exe 文件,他所得到的是一个叫做 application/octet-stream 的类型,意思是以数据流的方式让浏览器去加载,并询问用户是否要进行下载操作。那比如说咱们现在有个一个非常奇怪的格式,这个格式是平常根本见不到的格式,那我们就可以将其写在此文件中,让他按照你想要的格式去让浏览器解读。

default_type application/octet-stream;

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

sendfile

使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。 未开启sendfile。再发个比方:咱们现在有两台电脑,我们需要从PC1拿点东西去PC2,那我们就得先拿U盘去PC1里面拷贝,然后再用U盘拷贝到PC2中,而如果开启了这个sendfile,那就相当于直接隔空传过去,省去了拷贝的过程。

sendfile off; 

直接上图来讲:

Nginx - 目录结构与配置文件详解

咱们的Nginx是假设在CentOS操作系统上的,当服务过来的时候是通过CentOS的网络接口然后转发给Nginx。Nginx拿到信息后会根据其内容去硬盘(SSD)中找到那个目标文件,然后Nginx会把这个文件完整的读一遍,读到自己的内存中再交给应用程序,应用程序也把拿到的文件完整的读进自己的内存,再转发到CentOS的网络接口(当然这里面还有DMA [ Direct Memory Access直接访问内存 ] 的调度,网络接口的缓存和内核的缓存)网络接口再把其发送出去。这里的层层缓存就相当于上面所说的层层复制。

sendfile on;

Nginx - 目录结构与配置文件详解

这里通过Nginx会给内核发送一个信号,此时的应用程序不会再去把文件读取进自己的内存了,而是直接发送这个 sendfile() 信号(当然这其实是一个方法,里面会写明需要传出的文件和socket)给CentOS的网络接口,网络接口在收到信号后回去找到这个目标文件,然后发送出去。

keepalive_timeout  65;

连接的超时时间限制。

server {}

这里可以把一个server看成是一个主机,所以一个Nginx可以拥有多台这样的主机,它们通过不同的端口号 listen 来区分。当然端口号也可以相同,那样的话就需要通过 server_name 来分区了。开启多个主机的方式也叫作虚拟主机(vhost)。

location / {}

咱们这回先举例子。 http://abc.com/xxx/index.html 这个叫做url,没啥问题吧。而这其中的 /xxx/index.html 叫做uri。当这个uri被匹配上的时候,那么就会进入到这个 location / {} 中,去找里面的root目录。这里的 root   html; 中的html其实是个相对路径,就是咱们下一小节提到的那个html目录。

error_page   500 502 503 504  /50x.html;

简单的来说,如果出现了这四个报错,那么就会进入到这个 50x.html 中,这个文件也会在下一小节中提到。


html

这里的 index.php 直接无视,这是我自己加进去的:

Nginx - 目录结构与配置文件详解

index.html

能看到这里放着两个html文件,其中的 index.html 为Nginx的默认页,可以看看里面是啥:

<!DOCTYPE html>
<html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
        <h1>Welcome to Tomcat!</h1>
        <p>If you see this page, the nginx web server is successfully installed and
        working. Further configuration is required.</p>

        <p>For online documentation and support please refer to
        <a href="http://nginx.org/">nginx.org</a>.<br/>
        Commercial support is available at
        <a href="http://nginx.com/">nginx.com</a>.</p>

        <p><em>Thank you for using nginx.</em></p>
    </body>
</html>

可以看到我把这里第13行的Nginx修改成了Tomcat,咱们可以去测试看一下。 

Nginx - 目录结构与配置文件详解

 很简单的html语言,咱们继续看第二个文件 50x.html 


50x.html

<!DOCTYPE html>
<html>
    <head>
        <title>Error</title>
        <style>
            body {
                width: 35em;
                margin: 0 auto;
                font-family: Tahoma, Verdana, Arial, sans-serif;
            }
        </style>
    </head>
    <body>
        <h1>An error occurred.</h1>
        <p>Sorry, the page you are looking for is currently unavailable.<br/>
        Please try again later.</p>
        <p>If you are the system administrator of this resource then you should check
        the error log for details.</p>
        <p><em>Faithfully yours, nginx.</em></p>
    </body>
</html>

这里就是Nginx的一个默认的报错页面,也没啥好讲的。


logs

Nginx - 目录结构与配置文件详解

这里有两个log日志和一个pid文件。可以看到这个 access.log 真的是相当的大!足足有48KB(我这里才用了不到两天)

access.log

访问日志

192.168.150.11 - - [24/Aug/2022:11:06:06 +0800] "GET /img/%E8%A1%A5%E8%B4%B4.png HTTP/1.1" 304 0 "http://192.168.150.50/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
192.168.150.11 - - [24/Aug/2022:11:06:06 +0800] "GET /img/%E5%A4%87%E6%B3%A8.png HTTP/1.1" 304 0 "http://192.168.150.50/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"

这里的内容实在是太多啦,所以只复制了两行过来。 

其实也就是在用户访问咱们的时候,会把时间、地点、人物、人物所访问的文件、人物所带的参数等信息记录在此。所以这个文件通常都是非常的大(但是它并不会影响到Nginx的性能),为了防止数据写不进来而导致服务出现问题,所以在配置文件中会严格的把控 access.log 文件的大小,一旦它达到了那个指定的大小,那么系统就是重新新建一个文件用来继续写入访问信息日志。


error.log

随便复制几行过来看看: 

2022/08/24 11:05:47 [notice] 53322#0: signal process started
2022/08/24 11:28:44 [notice] 54846#0: signal process started
2022/08/24 18:23:11 [notice] 14640#0: signal process started
2022/08/25 15:24:22 [error] 855#0: *1 open() "/usr/local/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.150.11, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.150.50", referrer: "http://192.168.150.50/"

这个日志就比上面的 access.log 要小很多了。说白了就是用户在访问服务时所遇到的错误,都会被记录在这个 error.log 里面。


nginx.pid 

能看出来这个文件跟上面的不一样啊,后缀为pid而不是log。这个文件是用来记录咱们Nginx主进程的ID号的。

854

内容也很简单,只有这一个数字。当然你们的ID跟我的不太可能会一致,咱们可以去系统里看看:

ps -ef | grep nginx

Nginx - 目录结构与配置文件详解

可以看到master主进程的ID与文件中内容一致。 


sbin

Nginx - 目录结构与配置文件详解

Nginx 

下面只有一个Nginx的主程序,也没啥好说的。 文章来源地址https://www.toymoban.com/news/detail-467003.html

到了这里,关于Nginx - 目录结构与配置文件详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx代理nginx.conf配置——nginx对静态文件代理

    如果需要将资源代理到不同的目录下,则在nginx.conf中的server节点下进行如下配置: 修改后,重新加载nginx配置即可,nginx部分命令如下: 在server中添加如下配置(示例listen端口为80) 访问:localhost/video/demo.mp4即可访问

    2024年02月08日
    浏览(57)
  • Nginx服务的主配置文件 nginx.conf

    目录 前言 一、Nginx.con位置 二、Nginx.com相关内容  三、Nginx.conf中配置块和指令 1、I/O时间配置 2、HTTP 配置 日志格式设定 总结 Nginx 的主配置文件是 nginx.conf ,它通常位于 Nginx 的安装目录下的 conf 文件夹中。主配置文件 nginx.conf 是 Nginx 服务的核心配置文件,用于定义服务器的

    2024年02月09日
    浏览(41)
  • Linux中如何修改nginx的nginx.conf配置文件,并刷新生效?

     1、进入nginx的conf目录(按照自己实际的路径来) 2、 可以先查看当前配置文件内容 3、回车查看更多 4、vim进入修改文件 5、修改之后 按 Esc 键退出,输入 :wq 保存退出 6、执行 ./sbin/nginx -t命令测试nginx.conf文件是否合法  7、重启nginx 杀掉进程,重启nginx,实现重启nginx服务

    2024年02月16日
    浏览(42)
  • 解析Nginx配置文件conf中的常用块

    Nginx是一个高性能的HTTP和反向代理服务器,它的配置文件主要由多个块组成。 本文将介绍Nginx配置文件中的常用块及其功能 。 events块 events块用于设置Nginx的工作模式和连接数相关的参数。 http块 http块用于配置Nginx处理HTTP请求的相关参数。 server块 server块用于配置一个虚拟主

    2024年01月19日
    浏览(46)
  • 一文彻底搞懂Nginx的.conf文件路径配置

    前言:最近在Nginx上部署Vue项目,同时还存了一些静态资源,但我查了好久都没找到一篇详细介绍路径配置的文章,因此就根据我有限的经验写了这篇文章,希望能够对读者有所帮助 如下图所示,这是我配置好的一个server代码块,我这里配置了https,所以会比默认的多一部分

    2024年02月09日
    浏览(43)
  • 【ubuntu】ubuntu 20.04安装docker,使用nginx部署前端项目,nginx.conf文件配置

    docker 官网:Install Docker Engine on Ubuntu 1.将apt升级到最新 2.使用apt安装 docker 和 docker-compose (遇到提示输入 y ) 3.将当前用户添加到docker用户组 4.运行hello-world 运行成功 1.修改配置文件 修改conf/nginx.conf 2.重新挂载 给容器设置自启动(如果提示就去掉sudo) 给docker设置开机自启动

    2024年01月20日
    浏览(56)
  • Nginx目录结构简介:深入理解Nginx的默认文件和目录

    第一章 Nginx的默认目录结构 当你安装Nginx后,它的默认目录结构如下: 让我们逐个了解这些目录和文件的作用。 第二章 conf目录 conf目录包含了Nginx的配置文件,其中nginx.conf是Nginx主配置文件,它包含了所有全局的Nginx配置项。mime.types文件包含了MIME类型的定义,它告诉Nginx如

    2024年02月13日
    浏览(61)
  • Nginx代理nginx.conf配置——反向代理(对WebSocket支持)

    基于Nginx代理nginx.conf配置——反向代理,如果要添加websocket支持,需要进行如下配置 在http中添加一下配置,添加对websocket支持 配置后重新运行nginx后,websocket即可成功代理。 注意防火墙端口是否开放、nginx如果使用docker,其对应的端口是否映射出来。

    2024年02月13日
    浏览(38)
  • nginx 多配置(.conf)的使用

    通常情况下我们在一个.conf 承载好多服务代理的配置,使用.conf 文件过大,过长,以至于管理难,有时修改某个小配置,由于重起或重截配置文件,使用服务受影响。因此使用多配置组合的方式进行管理很有必要。 注意:本文中配置的文件和影射的目录文件,因为我用的是

    2024年02月11日
    浏览(47)
  • Nginx配置文件配置详解

    官方文档 location 指令是 nginx 中最关键的指令之一,location 指令的功能是用来匹配不同的 URI 请求,进而对请求做不同的处理和响应,这其中较难理解的是多个 location 的匹配顺序,本文会作为重点来解释和说明。 开始之前先明确一些约定,我们输入的网址叫做请求 URI,nginx

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包