Nginx笔记
Part 0 前言
参考资料:
Nginx音标为/'endʒɪneks/
,读音为engine x
。
Nginx适合承担HTTP服务器和反向代理服务器的工作,也可以提供方便的静态资源配置与访问。
同时,Docker提供了不错的对Nginx的封装,很适合将其加入CI/CD工作流。
Part 1 安装
环境:Ubuntu 20.04
Ubuntu下安装Nginx的难度不大,没有什么坑。
sudo apt-get install nginx
TODO:忘记记录怎么启动起来的nginx服务了,好像执行过sudo nginx -t
和sudo nginx -s reload
Part 2 配置文件nginx.conf
结构
参考资料:
Nginx官方英文文档:纯英文,是最准确的资料
Nginx中文文档(GitBook , 私人笔记):一个个人GitBook笔记网站,是对上面官方文档的翻译,但是注意,并非所有翻译都很恰当,应当两者结合阅读。
- Nginx配置文件 - runoob
概述
Nginx的命令行参数不多,配置文件nginx.conf
是Nginx服务的核心,这决定了Nginx和其模块的工作方式。
默认情况下,nginx.conf
放在/usr/local/nginx/conf
,/etc/nginx
或 /usr/local/etc/nginx
中。因此,当利用Docker构建CI/CD时,需要注意将仓库中的nginx.conf
文件移动到容器的合适位置。具体地,笔者曾在Dockerfile中用过COPY nginx.conf /etc/nginx/nginx.conf
。
VSCode提供了
NGINX Conf
插件,适合用来高亮文本和格式化文档。
nginx组成
nginx由模块(module)组成,模块由配置文件(nginx.conf)中的指令(directives)控制。指令又分为简单指令(simple directive)和块指令(block directive)。
指令
简单指令
- 结构:名称和参数组成,由空格分隔,以
;
结尾 - 形如:
[名称] [参数];
- 结构:名称和参数组成,由空格分隔,以
块指令
- 结构:和简单指令相同,但不以
;
结尾,而是以一组由{}
包围的附加指令结尾。 - 形如:
[名称] [参数] {若干附加指令}
- 结构:和简单指令相同,但不以
如果块指令的{}
中可以包含其他指令,那么它被称为上下文(context)。
上下文
上下文包括:
events
http
server
location
配置文件中在所有上下文之外的指令被认为是在主(main)上下文中。比如,events
和http
在main
上下文中;server
在http
上下文中;location
在server
上下文中。因此可以形如:
1 | user nginx; # 简单指令,在main中 |
Part 3 main
context
参考资料:
main
上下文是默认上下文,不显示声明,任何不隶属于任意其他上下文的指令均被认为是在main
上下文中。
e.g.
1 | user nginx; # 配置用户或用户组,格式为user user [group]默认为user nobody nobody,用于精确管理权限 |
Part 4 events
context
参考资料:
events
模块包含了Nginx中处理连接的设置。
e.g.
1 | events { |
常用设置是worker_connections
,其余配置没有特殊需求可以保持默认,即,不添加描述字段。
Part 5 http
context
参考资料:
e.g.
1 | http { |
include
将文件扩展名与文件类型映射表包含或另一个文件到当前配置中。mine.types
形如:
1 | types { |
也可以使用include
引入其他的server
配置文件。
default_type
设置默认处理方式。
keepalive_timeout
设置web服务器处理完一个请求后保持这个TCP连接的时间,Nginx默认为75秒。
Part 6 server
参考资料:
在Nginx中,一个server配置块代表了一个虚拟机主机。
虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成多台 “虚拟” 的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的 Internet 服务器功能(WWW、FTP、Email 等等),同一台主机上的虚拟主机之间是完全独立的。
从网站访问者来看,每一台虚拟主机和一台独立主机完全一样。
利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行一组 Nginx 进程。虚拟主机提供了在同一台服务器、同一组 Nginx 进程上运行多个网站的功能。
e.g.
1 | server { |
listen
Nginx通过listen
指令指定的值监听网络请求,可以是IP协议,也可以是UNIX域套接字。若不设置listen
指令,Nginx以超级用户运行时监听80端口,非超级用户运行时监听8000端口。
listen
指令的值提供了丰富的参数,具体可以参考server 配置块介绍 - 人人编程网。
server_name
server_name
指令主要用于配置基于名称的虚拟主机,在接收到客户请求后的匹配顺序为准确的server_name
匹配 > 以*
通配符开始发字符串 > 以*
通配符结束的字符串 > 正则表达式,具体可以参考server 配置块介绍 - 人人编程网。
access_log
用于指定日志文件的存放路径和格式。
Part 7 location
参考资料:
location
配置块用来配置匹配的不同请求URL的处理方式。location
块只能在server
块中配置。
e.g.
1 | server { |
location
格式
1
2
3location [ = | ~ | ~* | ^~ ] /URL {
# ...
}参数说明
- 空:表示前缀匹配,代表跟请求中的URL从头开始匹配。
=
:用于标准URL前,要求精确匹配,成功则立即处理,Nginx停止搜索其他匹配。^~
:用于标准URL前,要求一旦匹配就会立即处理,不在匹配其他正则URL,一般用来匹配目录~
:用于正则URL前,表示URL包含正则表达式,区分大小写~*
:用于正则URL前,表示URL包含正则表达式,不区分大小写
命名location
暂时没有用过,可以参考location 配置块介绍 - 人人编程网
URL匹配顺序
proxy_pass
用来设置代理服务器的映射地址,可以使用http或https协议,地址可以使用域名、IP和可选端口。
This is copyright.