Nginx入门
1. Nginx 是什么
nginx [engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP / UDP代理服务器,最初由Igor Sysoev编写。很长一段时间以来,它一直在许多负载很重的俄罗斯网站上运行,包括 Yandex, Mail.Ru, VK和 Rambler。据Netcraft称,nginx 在2019年6月服务或代理了 26.34%最繁忙的网站.
2. Nginx的功能
基本的HTTP服务器功能、其他HTTP服务器功能、邮件代理服务器功能
2.1 基本的HTTP服务器功能
- 提供静态和 索引 文件, 自动索引 ; 打开文件描述符缓存(暂时理解动静分离) ;
- 通过缓存加速反向代理 ; 负载均衡和容错 ;
- 通过缓存FastCGI, uwsgi, SCGI和 memcached 服务器加速支持 ;
- 模块化架构。过滤器包括 gzipping,字节范围,分块响应, XSLT, SSI和图像变换过滤器。如果由代理或FastCGI / uwsgi / SCGI服务器处理,则可以并行处理单个页面中的多个SSI包含;
- SSL和TLS SNI支持 ;
- 支持HTTP 2.0, 具有加权和基于依赖性的优先级。
2.2 其他的HTTP服务器功能
- 基于名称和基于IP的 负载均衡 ;
- 保持连接 和流水线连接支持;
- 访问日志格式, 缓冲日志写入, 快速日志轮换和 syslog日志记录 ;
- 3xx-5xx错误代码 重定向 ;
- 重写模块: 使用正则表达式更改URI ;
- 根据 客户端地址执行不同的功能 ;
- 基于客户端IP地址, 密码(HTTP基本身份验证)和 子请求结果的访问控制 ;
- 验证 HTTP referer ;
- 该PUT,DELETE,MKCOL,复制和移动方法;
- FLV 和 MP4 流媒体;
- 响应速度限制 ;
- 限制 来自一个地址的同时连接 或 请求的数量 ;
- 基于IP的地理定位 ;
A / B测试 ;
请求镜像 ;
嵌入式Perl ;
njs脚本语言。
2.3 邮件代理服务器功能
- 用户 使用外部HTTP 身份验证 服务器重定向到 IMAP 或 POP3服务器;
- 使用外部HTTP 身份验证 服务器进行用户身份 验证,并将连接重定向到内部 SMTP服务器;
- 认证方式:
- POP3:USER / PASS,APOP,AUTH LOGIN / PLAIN / CRAM-MD5;
- IMAP:登录,AUTH LOGIN / PLAIN / CRAM-MD5;
- SMTP:AUTH LOGIN / PLAIN / CRAM-MD5;
- SSL支持;
- STARTTLS和STLS支持。
2.4 TCP / UDP代理服务器功能
- TCP和UDP的通用代理 ;
- SSL和TLS SNI支持TCP;
- 负载均衡和容错 ;
- 基于客户端地址的访问控制 ;
- 根据客户端地址执行不同的功能 ;
- 限制 来自一个地址的同时连接数 ;
- 访问日志格式, 缓冲日志写入, 快速日志轮换和 syslog日志记录 ;
- 基于IP的地理定位 ;
- A / B测试 ;
- njs脚本语言。
3. 下载Nginx
我这里下载的是Windows版本.
解压打开如下:
4. 使用Nginx
在Nginx目录的搜索栏,敲入cmd
输入命令start nginx即可启动Nginx
在浏览器访问 localhost:
其他的一些常用命令:
nginx -s stop 快速关闭
nginx -s quit 优雅关闭
nginx -s reload 重新加载配置文件
nginx -s reopen 重新打开日志文件
4.1 Nginx的配置文件
nginx的配置文件在/conf/nginx.conf,nginx由模块组成,这些模块由配置文件中指定的指令控制。指令分为简单指令和块指令
一个简单的指令由名称和参数组成,用空格分隔,以分号(;)结尾。
块指令与简单指令具有相同的结构,但它不是以分号结尾,而是以大括号{}包围的一组附加指令结束。如果块指令在大括号内可以有其他指令,则称为上下文(示例: events, http, server和 location)。
"#" 表示注解
4.2 使用nginx访问静态资源的例子
-
在/conf/ 目录下,将原来的nginx.conf文件改名为nginx.conf1,并且创建一个空白的nginx.conf文件
-
修改nginx.conf文件
##工作线程, 建议和cpu数量相同
worker_processes 4;
#工作模式与连接数上限
events {
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 1024;
}
#设定http服务器
http {
#虚拟主机的配置
server {
#对 "/" 启用反向代理
location / {
# 制定静态资源的位置
root D://web_resources//static//;
}
location /images/ {
root D://web_resources//static//;
}
}
}
本地图片的路径 : D:\web_resources\static\images\1.png
本地页面的路径: D:\web_resources\static\index.html
也就是所 root的路径+ location后面的路径 = 实际文件存放的文件夹路径
访问测试:
成功了有没有.
4.3 nginx设置代理服务器
nginx的一个常见用途是将其设置为代理服务器,这意味着服务器接收请求,将它们传递给代理服务器,从中检索响应,然后将它们发送给客户端。
接下来做一个简单的动静分离的例子, 静态资源访问指向本地目录,动态资源代理本地的一个8080端口的web服务.
修改nginx.conf文件
http {
server {
location / {
# 代理的地址
proxy_pass http://localhost:8080;
}
# 该参数是一个正则表达式匹配以gif,.jpg或.png结尾的URL
#相应的请求将映射到该D://web_resources//static//; 目录。
location ~ \.(gif|jpg|png|html)$ {
root D://web_resources//static//;
}
}
}
访问8080端口的服务:
确实被转发过去了.
访问静态资源:
5. Nginx负载均衡
除了动静分离,Nginx的负载均衡也是常用的一个功能.
nginx支持以下负载平衡机制(或方法):
- 循环 - 对应用程序服务器的请求以循环方式分发,
- 最少连接 - 下一个请求被分配给活动连接数最少的服务器,
- ip-hash - 哈希函数用于确定应为下一个请求选择哪个服务器(基于客户端的IP地址)。
5.1 Nginx默认负载均衡
如果未特别配置负载平衡方法,则默认为循环。
修改nginx.conf文件
http {
#负载均衡
upstream myapp1 {
server localhost:8080;
server localhost:8081;
server localhost:8082;
}
server {
# nginx监听的端口
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
多次请求页面,请求均匀的负载在每个服务上:
输出语句的数量相同.
5.2 最小连接负载平衡
另一个负载平衡规则是最少连接的。在某些请求需要更长时间才能完成的情况下,最小连接允许更公平地控制应用程序实例上的负载。
使用最少连接的负载平衡,nginx将尝试不会使繁忙的应用程序服务器超载请求过多,而是将新请求分发给不太繁忙的服务器。
当 least_conn指令用作服务器组配置的一部分时,将激活nginx中的最小连接负载平衡
#负载均衡
upstream myapp1 {
# 最少连接负载均衡指令
least_conn;
server localhost:8080;
server localhost:8081;
server localhost:8082;
}
5.3 ip地址绑定
请注意,通过循环或最少连接的负载平衡,每个后续客户端的请求可能会分发到不同的服务器。无法保证同一客户端始终指向同一服务器。
如果需要将客户端绑定到特定的应用程序服务器 - 换句话说,就始终尝试选择特定服务器而言,使客户端的会话“粘滞”或“持久” - ip-hash负载平衡机制可以是用过的。
使用ip-hash,客户端的IP地址将用作散列密钥,以确定应为客户端的请求选择服务器组中的哪个服务器。此方法可确保来自同一客户端的请求始终定向到同一服务器,但此服务器不可用时除外。
配置方式和上面类似, 添加指令ip_hash:
#负载均衡
upstream myapp1 {
# 最少连接负载均衡指令
ip_hash;
server localhost:8080;
server localhost:8081;
server localhost:8082;
}
5.4 加权负载平衡
在上面的示例中,未配置服务器权重,这意味着所有指定的服务器都被视为对特定负载平衡方法具有同等资格。
当 为服务器指定权重参数时, 权重被计入负载平衡决策的一部分。
修改配置文件:
upstream myapp1 {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server localhost:8080 weight = 3;
server localhost:8081;
server localhost:8082;
}
使用此配置,每5个新请求将分布在应用程序实例中,如下所示:3个请求将定向到8080端口,一个请求将转到8081端口,另一个请求转到8082端口。
6. 健康检查
两个参数max_fails和fail_timeout,用于判断后端节点状态.
在fail_timeout的时间范围内连接服务器通信失败的次数如果超过max_fail,那么服务器被判定为不可用.并且再次等待一个fail_timeout的时间,再去重新尝试请求.
fail_timeout的默认值为30s,,max_fails的默认值为1.
配置方式:
#负载均衡
upstream myapp1 {
server localhost:8080 weight=3 max_fails=10 fail_timeout=30;
server localhost:8081;
server localhost:8082;
}
喜欢我的博客就请点赞+【关注】一波