# Nginx教程 - 3 Nginx文件与命令
# 3.1 Nginx配置文件
Nginx 有一个非常重要的配置文件 nginx.conf
,这个是 Nginx 的核心配置文件。
# 1 nginx.conf的路径
可以使用如下命令查看一下 Nginx 的相关路径:
# 查看Nginx项目文件目录
whereis nginx
2
如果使用源码的安装方式,查看 Nginx 相关文件路径:
doubi@doubibiji-server:~$ whereis nginx
nginx: /usr/local/nginx
doubi@doubibiji-server:~$ ls /usr/local/nginx
conf html nginx.pid sbin
2
3
4
5
Nginx 相关文件都在 Nginx 安装路径下,核心配置文件 nginx.conf
在 conf
目录下。 可以进入到 html
路径下,里面有 Nginx 首页 index.html
。
如果是 apt
或 yum
的安装方式,配置文件在 /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; # 指定首页文件
}
}
}
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
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/*; # 包含其他额外的配置文件
}
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。
当 Nginx 启动后,查看 Nginx 的进程:
ps -ef|grep nginx
可以看到 Nginx 有两个进程,一个是主进程,一个是工作进程:
我们可以修改 worker_processes 1;
修改工作进程的个数,例如修改为 worker_processes 2;
。
还可以修改为 worker_processes auto;
表示根据系统 CPU 核心数自动设置。
修改完配置文件,可以使用 nginx -t
来检查配置文件是否有问题。
# 检查配置文件的语法是否正确
nginx -t
2
nginx -t
命令用于测试 Nginx 配置文件的语法是否正确,但不会真正加载配置或启动服务。
如果没有问题,可以使用如下命令重新加载配置文件:
# 重新加载Nginx配置文件
nginx -s reload
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
2
3
4
5
# 2 停止Nginx
# 停止nginx
./nginx -s stop
2
这种方式会立刻中断正在处理的请求,不会等待请求处理完成,这种方式不太友好。
更友好的方式是:
# 停止nginx
./nginx -s quit
2
这种方式会等待用户请求完毕,再关闭服务。
# 3 检查配置文件
当对配置文件进行了修改,可以检查配置文件是否有问题。
# 检查配置文件
./nginx -t
2
# 4 重新加载配置文件
当对配置文件进行了修改,可以让 Nginx 重新加载配置文件。
# 检查配置文件
./nginx -s reload
2
# 5 查看版本
# 只会输出 Nginx 的版本号
./nginx -v
# 输出更详细的版本信息,包括 Nginx 的版本号、编译时使用的配置参数、支持的模块列表等
./nginx -V
2
3
4
5
← 02-Nginx安装 04-多站点配置 →