nginx使用教程

nginx使用教程

1.什么是nginx?

nginx [engine x] 是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器,最初由 Igor Sysoev 编写。 很长一段时间以来,它一直在许多负载很重的俄罗斯网站上运行,包括 Yandex、Mail.Ru、VK 和 Rambler。 根据 Netcraft 的数据,2022 年 5 月,nginx 服务或代理了 21.67% 最繁忙的网站。以下是一些成功案例:Dropbox、Netflix、Wordpress.com、FastMail.FM。

2.如何部署安装nginx

1
2
sudo apt install -y nginx #Ubuntu/Debian
sudo yum install -y nginx #rhel/centos

3.nginx的结构

3.1.nginx的启动方式

nginx一般以守护进程启动,一个nginx服务至少包含一个master进程和一个work进程,master为nginx的守护进程用于管理work进程,和work进程为nginx接受请求后实际处理请求的进程

graph LR;
1((master nginx守护进程))-->2((work1 工作进程1))
1-->3((work2 工作进程2))
1-->4((work3 工作进程3))

3.2.nginx的请求拦截器(重点)

nginx的location请求拦截器,用于匹配连接请求,匹配成功后由该定义的资源路径以及返回方式处理并响应

nginx的location请求的匹配方式有以下几种

  • 1.完全匹配
  • 2.非正则匹配
  • 3.正则匹配
  • 4.普通匹配

优先级自上而下

1.精确匹配
1
2
3
4
5
location = /get{
root html;
return 200 "hello you get!";
}
#精确匹配一旦成功不会去尝试匹配别的匹配规则
2.非正则匹配
1
2
3
4
5

location ^~{
return 200 "hello,world";
}
#匹配成功后不会去尝试匹配正则规则
3.正则匹配
1
2
3
4
5
6
7
location ~ \*.php$/ {
return 200 "hello,location";
}
location ~* \*.php$ {
return 200 " ";
}
#~*为不区分大小写的正则匹配
4.普通匹配(最长字符匹配)
1
2
3
location /get {
root html;
}

3.3.nginx的日志文件以及错误重定向

1
2
3
4
access_log logs/access.log notice format;		#设置访问日志的存储路径以及日志等级和记录的日志格式
error_log logs/error.log error; #设置错误日志的存储路径和记录的日志格式

error_page 404...(错误代码) /50x.html(重定向的location的地址)(也可以自定一个重定向的url)

4.nginx配置文件

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
#常用的参数配置

#配置nginx启动的用户和用户组
user nobody;

#配置nginx为守护进程方式启动
daemon on;

#配置nginx的worker进程数(一般配置为cpu核心数)nginx至少包含一个master进程(nginx的守护进程用于管理worker进程)
worker_processes 1;

#配置nginx的错误日志的存放路径以及日志等级
error_log logs/error.log notice;

#配置events
{
worker_connections 1024; #设置每个worker进程最大支持的连接数(和操作系统允许打开最大的文件描述符也有关系)
use epoll; #设置处理事件的io模型
}

#配置web服务
http
{
#包含媒体文件类型
include mime.types;

#设置nginx默认的返回数据类型
default_type application/octet-stream;

#设置日志格式模板,可以用于后面日志调用
log_format main "$remote_addr:$time_local:$remote_user:$request:$status $body_bytes_sent";

#使用linux内核提供的sendfile来传输数据(sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。)
send_file on;

#(TCP_NOPUSH 是 FreeBSD 的一个 socket 选项,对应 Linux 的 TCP_CORK,Nginx 里统一用 tcp_nopush 来控制它,并且只有在启用了 sendfile 之后才生效。启用它之后,数据包会累计到一定大小之后才会发送,减小了额外开销,提高网络效率。)
tcp_nopush on;

#尽快发送(减小延迟,但是会增多io读取次数)
tcp_nodelay on;

#设置长连接的超时时间(长连接就是本来http一次完整的请求相应需要tcp三次握手四次挥手,长连接就是上一个处理完任务的连接先不进行释放,用于后续任务的再次数据收发,减少了响应时间,节省了网络资源)
keep_alive_timeout 65;

#开启压缩
gzip on;
#指定gzip的压缩的文件类型
gzip_types application/javascript;
#压缩等级(1-9)
gzip_comp_level 1;
#指定gzip压缩后nginx加上响应头Accept-Endcoing
gzip_vary on

#和操作系统有关系(一般使用默认即可)
gzip_buffers number size;
#指定http的协议版本
gzip_http_version 1.0|1.1;

#设置最小文件压缩的长度
gzip_min_length 1024;

valid_referer none|blocked|server_names|string....//指定是否有效的referercd
#设置是否对服务端返回的结构进行压缩
gzip_proxied off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any;
#设置服务
server {
listen 80;#设置监听的端口
server_name localhost; #服务端的名称(一般设置为域名)
location /{ #请求拦截器
root html;#资源的根目录(实际请求的目录为location目录加上根目录)
#alias html;#实际请求的目录为alias目录;
index index.html index.htm;#设置主页的文件
}
#location ~*^server#~代表后面的表达式为一个正则表达式(~*为不区分大小写的正则表达式)
#{
# root html
# index index.php
#}
}
}

nginx使用教程
https://dreamaccount.github.io/2022/07/06/nginx使用教程/
作者
404NotFound
发布于
2022年7月6日
许可协议