什么是Nginx
Nginx大家应该都不陌生,它广泛应用在互联网企业。是一个高性能的反向代理和 Web 服务器软件,运行稳定的同时且具备高性能的并发处理能力。
一、安装使用
windows安装
下载官方稳定版:https://nginx.org/download/
选择稳定的版本解压到本地,运行nginx.exe
Linux安装
CentOS可以使用yum安装
sudo yum install epel-release //先安装依赖
sudo yum install nginx // 安装nginx
sudo systemctl start nginx // 启动nginx
也可以通过下载rpm包进行安装,下载链接 http://nginx.org/packages/rhel/7/x86_64/RPMS/
rpm包安装命令
rpm -ivh nginx-*.rpm
二、常用的命令
nginx -s quit 停止nginx,有连接时会等连接请求完成再杀死worker进程
nginx -s stop 直接停止
nginx -s reload 重启,并重新载入配置文件nginx.conf
nginx -s reopen 重新打开日志文件,一般用于切割日志
nginx -v 查看版本
nginx -t 检查nginx的配置文件,测试配置文件是否有语法错误
nginx -h 查看帮助信息
nginx -c filename 指定配置文件
三、Nginx使用场景及配置
Nginx的使用核心就是要了解它的配置项,来实现对应的功能。nginx.conf是Nginx的配置文件,一般就位于安装目录下。
在日常的Nginx使用中,主要需要关注配置文件中的:server(主机配置),upstream(负载均衡服务器设置),和location(URL匹配特定位置设置)。
1.虚拟主机
虚拟主机的作用是帮助你管理域名,每一个server块定义了一个虚拟主机,允许Nginx在同一物理服务器上支持多个网站或应用,每个网站可以有不同的域名、监听端口、文档根目录、日志文件位置、SSL证书配置等。
server {
listen 80;
server_name www.test.com;
}
...
server {
listen 8081;
server_name www.test1.com;
}
指定Nginx监听的IP地址和端口号,如 listen 80; 表示监听对应server_name(ip或域名)上的80端口。
2.负载均衡
upstream用于进行负载均衡的配置。负载均衡策略主要有
轮询(默认)、加权轮询、ip_hash、最少连接数。
加权的轮询配置
upstream my_server {
server 192.168.100.11:80 weight=1 max_fails=2 fail_timeout=30;
server 192.168.100.12:80 weight=2 max_fails=2 fail_timeout=30;
}
ipHash配置:
upstream my_server2 {
ip_hash;
server 192.168.100.11:80 ;
server 192.168.100.12:80 ;
}
用Location来指定对应的Server
location / {
proxy_pass https://my_server;
}
3.反向代理
location配置作用于反向代理,是配置中最常用的,经常会增加修改。
location的各种配置方法如下:一半常用的就是精确匹配到对应的后端接口上。需要注意的是会有匹配顺序,如果一个接口会同时匹配多头(精确正则都匹配到了)会优先走精确对应的逻辑。
server {
listen 80;
server_name example.com;
# 精确匹配
location = /exact-match {
# 处理逻辑,如返回静态内容或代理到后端等
proxy_pass http://my_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 前缀匹配(最长匹配原则)
location /prefix/ {
# 处理逻辑
}
# 正则表达式匹配(区分大小写)
location ~ /pattern/ {
# 处理逻辑
}
# 正则表达式匹配(不区分大小写)
location ~* /pattern/ {
# 处理逻辑
}
# 前缀匹配,优先于正则匹配
location ^~ /static/ {
# 静态资源处理,不会检查后面的正则表达式
}
# 命名location,通常用于内部重定向
location @handler {
# 例如错误处理或其他特殊处理
}
}
location详细配置介绍:
- 匹配规则:
=(精确匹配):要求URL与指定字符串完全匹配。如果找到精确匹配,则停止搜索并立即使用此location处理请求。
^~(前缀匹配且优先):进行前缀匹配,但如果有此标记,正则表达式匹配将被跳过,即使正则表达式能匹配。
无前缀修饰符(常规前缀匹配):基于最长前缀进行匹配,如果多个前缀都匹配,则选择最长的那个。正则表达式匹配仍会被考虑。
~(正则表达式匹配,区分大小写):使用正则表达式进行匹配,区分大小写。
~*(正则表达式匹配,不区分大小写):同上,但不区分大小写。
- 请求处理指令:
proxy_pass:指定反向代理的目标地址,可以是URL或upstream名称。
return:立即终止请求处理,并返回指定的状态码和可选的响应体给客户端。
rewrite:用于URL重写,可以改变请求URI,并可选择重定向或内部跳转到新的URI。
alias:用于定义静态文件服务的目录路径,与root指令不同,它不把location的URI部分添加到路径末尾。
try_files:尝试按顺序访问一系列文件或目录,直到找到一个存在的为止,支持最终重定向或传递给另一个location。
- HTTP头控制
add_header:向响应中添加或覆盖HTTP头。
expires:控制静态内容的缓存时间。
- 访问与安全
allow和deny:控制IP地址或CIDR网络块对location的访问权限。
auth_basic和auth_basic_user_file:启用HTTP基本认证,以及指定用户密码文件。
此外,还提供了限流和监控一些功能,感兴趣的可以自行了解。