# Nginx教程 - 3 Nginx文件与命令

# 3.1 Nginx配置文件

Nginx 有一个非常重要的配置文件 nginx.conf,这个是 Nginx 的核心配置文件。

# 1 nginx.conf的路径

可以使用如下命令查看一下 Nginx 的相关路径:

# 查看Nginx项目文件目录
whereis nginx
1
2

如果使用源码的安装方式,查看 Nginx 相关文件路径:

doubi@doubibiji-server:~$ whereis nginx
nginx: /usr/local/nginx

doubi@doubibiji-server:~$ ls /usr/local/nginx
conf  html  nginx.pid  sbin
1
2
3
4
5

Nginx 相关文件都在 Nginx 安装路径下,核心配置文件 nginx.confconf 目录下。 可以进入到 html 路径下,里面有 Nginx 首页 index.html


如果是 aptyum 的安装方式,配置文件在 /etc/nginx 目录下,其中就包含了核心配置文件 nginx.conf

# 2 查看nginx.conf

查看 nginx.conf 配置文件,可以看到内容如下,其他的配置先忽略:

(不同版本,不同安装方式,配置文件的内容可能有差别。)

worker_processes  1;

events {
    worker_connections  1024;
}

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

    server {
        listen       80;  # 监听80端口
        server_name  localhost;

        location / {  # 拦截所有请求
            root   html;  # 指定用于存放网站文件的目录
            index  index.html index.htm;  # 指定首页文件
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

可以看到 server 监听的是 80 端口,location / 表示拦截 80 端口所有的请求,root html 指定了系统中用于存放网站文件的根目录。

在这里,html 是相对路径,相对于 /usr/local/nginx 目录的路径,也可以配置为绝对路径。

当使用 http://192.168.0.103 (我的Nginx服务器地址)访问的时候,因为后面没有端口号,所以默认会访问到 Nginx 监听的 80 端口,location / 拦截到了所有的请求,然后去 html 下找对应的页面,因为请求地址后面也没有其他路径,相当于访问 http://192.168.0.103/ ,后面的 / 是根路径,访问的就是首页,显示 index.html 的内容。

# 3.2 发布静态资源

使用 Nginx 可以发布静态资源,只需要将静态资源放到 nginx.conf 配置文件中指定的站点目录下就可以了。

例如,我将 image 和 mp3 文件夹和相关资源放到 html 目录下,html 目录内容如下:

- html
  - index.html
  - imgs
    - nginx.jpg
  - mp3
    - qingtian.mp3
1
2
3
4
5
6

然后我就可以在浏览器中进行访问了,根据文件的路径来访问。

访问图片文件:

访问mp3文件:

当然我们也可以在网页中通过相对路径来引用站点下的静态资源。

# 3.3 nginx.conf配置解析

上面查看 nginx.conf 配置的时候,列出来的是 nginx 需要正常工作的最小配置。

下面对 nginx.conf 中的内容进行一些简单的说明(不同版本或安装方式,默认配置可能会有一些出入):

user nginx;  
# 指定Nginx worker进程运行的用户,有的版本是注释掉的#user nobody,不写也表示nobody,nobody是一个特殊的系统用户,通常被用于运行服务进程,它的权限被设置为最低,仅用于限制服务进程的权限,以提高系统安全性。还可以修改为root用户执行,这样权限比较高,不推荐。


worker_processes auto;  
# 见下面的Nginx进程讲解


error_log /var/log/nginx/error.log warn;  
# 错误日志文件的路径和日志级别
# Nginx中日志级别分为:debug、info、notice、warn、error、crit等,可以根据日志级别,将不同等级的日志输出到不同的文件中
# 上面表示将大于等于warn等级的日志输出到/var/log/nginx/error.log文件中
# 注释掉就会使用默认配置


pid /var/run/nginx.pid;  
# 指定存储进程ID文件的路径,在 Nginx 启动时,它会将主进程的 PID 写入到这个文件中
# 我们可以使用进程ID对Nginx进行一些操作,例如停止或重启


events {
    use epoll;  # 使用epoll作为事件模型,在Linux平台上,epoll是最常用的,它可以有效地处理大量的并发连接。
    # 在其他平台上,可能会使用不同的事件模型。注释掉或不配置,默认就使用epoll模型
  
    worker_connections 1024;  # 每个worker进程支持的最大连接数
}


# http相关配置
http {
    include   mime.types;
    # 包含同级目录下的MIME类型的配置文件
    # 可以使用include引入外部文件,这样可以让配置文件更整洁,易于管理
  
  
    default_type  application/octet-stream; 
    # 默认MIME类型

  
    # log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';  
    # 定义日志格式(包括IP、时间等信息),Nginx内置了一些变量,可以使用 $变量 进行使用
    # 配置文件中,可能是注释掉的,是有默认配置的

  
    # access_log  /var/log/nginx/access.log  main;  
    # 访问日志文件路径和日志格式,main就是上面日志格式定义的,当用户访问服务器,都会记录日志
  

    sendfile       on;  # 开启文件传输优化
    # tcp_nopush     on;  
    # 开启TCP NOPUSH,用于告知内核尽可能快地将小数据包发送给客户端,而不是等待TCP缓冲区填满再发送。它有效地减少了等待时间和延迟。

  
    keepalive_timeout  65;  # 客户端连接保持时间
    # 设置服务器端与客户端之间的长连接时间。在一个长连接中,客户端与服务器之间的 TCP 连接在一定的时间内保持打开状态,使得客户端可以在同一连接上发送多个请求,而不必每次都建立新的连接。这有助于减少每个请求的 TCP 握手和连接建立所需的开销,从而提高性能。但是设置过长的时间可能导致服务器上的连接资源被长时间占用,降低了服务器的并发处理能力。

  
    # gzip  on;
    # 用来开启 Nginx 的 gzip 压缩功能的指令。当客户端向 Nginx 发送请求时,Nginx 会检查是否需要对响应内容进行压缩,如果需要,则会将内容进行 gzip 压缩后再发送给客户端。压缩可以显著减少传输的数据量,从而提高网站的加载速度,但 CPU 消耗也会相应增加。
    
  
    server {  # 虚拟主机
        listen       80;  # 监听80端口
        server_name  localhost;
        # 定义了服务器的域名为localhost,在本地使用IP或localhost来访问,可以配置为localhost,发布到外网,使用域名访问,这里可以配置为域名,例如www.doubibiji.com

        location / {  # 拦截所有请求
            root   html;		# 指定了网站根目录为html,Nginx会从html目录中查找对应请求路径下的文件。
            index  index.html index.htm;
        }


        error_page   500 502 503 504  /50x.html;  # 定义了处理服务器错误的页面。
        location = /50x.html {  # 定义了处理 /50x.html 页面的逻辑。
            root   html;  # 指定了50x.html页面在html目录下。
        }
    }
  
    include /etc/nginx/conf.d/*.conf;  # 包含虚拟主机配置文件
    include /etc/nginx/sites-enabled/*;  # 包含其他额外的配置文件
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83

从上面可以看出来,Nginx 配置文件整体分为以下几个等级和模块:

upstream 还没有涉及到。

# 1 Nginx进程

nginx.conf 配置文件的签名会有如下配置:

worker_processes  1;
1

这个表示工作进程个数为1。

当 Nginx 启动后,查看 Nginx 的进程:

ps -ef|grep nginx
1

可以看到 Nginx 有两个进程,一个是主进程,一个是工作进程:

我们可以修改 worker_processes 1; 修改工作进程的个数,例如修改为 worker_processes 2;

还可以修改为 worker_processes auto; 表示根据系统 CPU 核心数自动设置。

修改完配置文件,可以使用 nginx -t 来检查配置文件是否有问题。

# 检查配置文件的语法是否正确
nginx -t
1
2

nginx -t 命令用于测试 Nginx 配置文件的语法是否正确,但不会真正加载配置或启动服务。


如果没有问题,可以使用如下命令重新加载配置文件:

# 重新加载Nginx配置文件
nginx -s reload
1
2

这个命令用于重新加载 Nginx 的配置文件, -s 选项用于发送信号给 Nginx 主进程,reload 表示重新加载配置。在执行这个命令时,Nginx 会重新读取配置文件,如果配置文件有更改,它将应用这些更改而不需要重启整个服务器。


此时查看 Nginx 有两个工作进程:

主进程负责接收信号,例如启动、停止等信号,并管理工作进程,工作进程负责处理客户端请求,当工作进程异常退出,主线程会重新创建工作进程。

如果在单核或较低性能的服务器上,通常将 worker_processes 设置为 1。 如果在高负载环境或多核服务器上,可以将 worker_processes 设置为 CPU 核心个数,以充分利用服务器的并行处理能力。如果服务器还有其他的程序,建议少于内核个数,以免消耗过多的系统资源。

# 3.4 Nginx常用命令

下面介绍一下 Nginx 常用的命令,前面也已经用到了,这里整理一下。

# 1 启动Nginx

直接运行nginx命令即可:

# 进入到nginx所在目录
cd /usr/local/nginx/sbin

# 运行当前路径下的nginx
./nginx
1
2
3
4
5

# 2 停止Nginx

# 停止nginx
./nginx -s stop
1
2

这种方式会立刻中断正在处理的请求,不会等待请求处理完成,这种方式不太友好。

更友好的方式是:

# 停止nginx
./nginx -s quit
1
2

这种方式会等待用户请求完毕,再关闭服务。

# 3 检查配置文件

当对配置文件进行了修改,可以检查配置文件是否有问题。

# 检查配置文件
./nginx -t
1
2

# 4 重新加载配置文件

当对配置文件进行了修改,可以让 Nginx 重新加载配置文件。

# 检查配置文件
./nginx -s reload
1
2

# 5 查看版本

# 只会输出 Nginx 的版本号
./nginx -v

# 输出更详细的版本信息,包括 Nginx 的版本号、编译时使用的配置参数、支持的模块列表等
./nginx -V
1
2
3
4
5