Nginx 基础
1、Nginx概述
1.1、Nginx介绍
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的王爷服务中表示较好,中国大陆使用Nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx是由 伊戈尔 · 塞索耶夫 为俄罗斯访问量第二的 Rambler.ru
(俄文:Рамблер)开发的,第一个公开版本 0.1.0 发布于2004年10月4日。
官网:https://nginx.org
1.2、Nginx下载安装
可以到Nginx官网下载Nginx的安装包,地址为:https://nginx.org/en/download.html
安装过程:
-
安装依赖包
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
-
下载Nginx安装包wget
wget https://nginx.org/download/nginx-1.20.2.tar.gz
-
解压
tar -zxvf nginx-1.20.2.tar.gz
-
进入安装目录
cd nginx-1.20.2
-
解压Nginx
./configure --prefix=/usr/local/nginx
-
执行编译安装命令
make && make install
1.3、Nginx目录结构
安装完Nginx后,我们先来熟悉一下Nginx的目录结构,如右图:
重点目录/文件:
- conf/fnginx.conf # nginx配置文件
- html # 存放静态文件(html、css、Js等)
- logs # 日志目录,存放日志文件
- sbin/ngin # 二进制文件,用于启动、停止Nginx服务
![image-20220524203417488](https://codeonce-1307491674.cos.ap-beijing.myqcloud.com/blog-img/image-20220524203417488.png)
2、Nginx命令
2.1、查看版本
查看 Nginx 可以使用命令:
./nginx -v
2.2、检查配置文件正确性
在启动 Nginx 服务前,可以先检查一下 conf/nginx.cnf
文件配置的是否有错误,命令如下:
./nginx -t
2.3、启动和停止
启动 nginx 服务使用如下命令:
./nginx
停止 nginx 服务使用如下命令:
./nginx -s stop
启动完成后可以查看 Nginx 进程:
ps -ef | grep nginx
2.4、重新加载配置文件
当修改 Nginx 配置文件后,需要重新加载才能生效,可以使用下面的命令重新加载配置文件:
./nginx -s reload
3、Nginx配置文件结构
Nginx 配置文件(conf/nginx.conf
)整体分为三部分:
=> 全局块 和Nginx运行相关的全局配置
=> events块 和网络连接相关的配置
=> http块 代理、缓存、日志记录、虚拟主机配置
> http全局块
> Server块
- Server 全局块
- location 块
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注意:
http 块中可以配置多个 Server 块,每个 Server 块中可以配置多个 localhost 块
3.1、全局块
主要是设置一些影响 Nginx 服务器整体运行的配置指令。主要是全局性的和服务级别的属性配置,常见的主要有以下几种设置:
- user 设置使用用户(worker)
- worker_processes 进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
- error_log nginx的错误日志
- pid nginx服务启动时候pid
3.2、Events块
定义事件相关的属性, 影响 Nginx 服务器与用户的网络连接, 常用的设置包括是否开启对多 workprocess 下的网络连接进行序列化, 是否允许同时接收多个网络连接等等。
- worker_connections 一个进程允许处理的最大连接数
- use 定义使用的内核模型
3.3、Http块
http块的作用: 配置所有server通用的一些配置:
include mime.types; # 文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型
sendfile on; # 开启高效文件传输模式。
autoindex on; # 开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; # 防止网络阻塞
tcp_nodelay on; # 防止网络阻塞
keepalive_timeout 120; # 长连接超时时间,单位是秒
gzip on; # 开启gzip压缩输出
(1)、server
# 虚拟主机的配置,一个server就代表一个虚拟主机
server {
# 监听端口
listen 80;
# 域名可以有多个, 用空格隔开
server_name localhost;
# 资源定位
location =/{
# 站点根目录,你网站文件存放的地方
root html;
index index.html;
}
}
(2)、location
location主要是根据Server匹配到的请求路径和关键字去响应和处理。
location[ = | ~ | ~* | ^~] url{
}
=:用于不含正则表达式的 url 前,要求字符串与 url 严格匹配,匹配成功就停止向下搜索并处理请求。
~:用于表示 url 包含正则表达式,并且区分大小写。
!~:用于表示 url 包含正则表达式,并且不区分大小写。
~:用于表示 url 包含正则表达式,并且不区分大小写。
!~:用于表示 url 包含正则表达式,并且区分大小写。
^~:用于不含正则表达式的 url 前,要求 Nginx 服务器找到表示 url 和字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再匹配。
如果有 url 包含正则表达式,不需要有 ~ 开头标识。
4、Nginx具体应用
4.1、部署静态资源
Nginx 可以作为静态 web 服务器来部署静态只要。静态资源指在服务的真实存在并且能够直接展示的一些文件,比如参加的html页面、css文件、js文件、图片、视频等资源。
相对于 Tomcat,Nginx处理静态资源的能力更加高效,所有在生产环境下,一般都会静态资源部署到Nginx中。
将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可。
# 虚拟主机的配置,一个server就代表一个虚拟主机
server {
# 监听端口
listen 80;
# 服务器名称
server_name localhost;
# 资源定位,匹配客户请求URL
location =/{
# 指定站点根目录
root html;
# 指定默认首页
index index.html;
}
}
4.2、反向代理
(1)、正向代理
是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个请求并指定目标(原始服务器),然会代理向原始服务器转交请求并将获得的内容返回给客户端。
正向代理的典型用途是为了在防火墙内的局域网客户端提供访问 internet 的途径。
正向代理一般在客户端设置代理服务器,通过代理服务器转发请求,最终访问到目标服务器。
(2)、反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户之间访问反向代理升武器就可以获得目标服务器的资源,反向代理服务区器负责将请求转发给目标服务器。
用户不需要知道目标服务器的地址,也无需在用户端做任何设定。
(3)、配置反向代理
server {
# 监听端口
listen 80;
server_name localhost;
location =/{
# 反向代理配置,将请求转发到指定服务器
proxy_pass http://192.168.138.101:8080
}
}
4.3、负载均衡
(1)、负载均衡介绍
早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。
- 应用集群:将同一应用部署到多台服务器上,组成应用集群,接受负载均衡分发的请求,进行业务处理并返回响应数据
- 负载均衡:将用户请求根据对应的负债均衡算法分发到应用集群中的一台服务器进行处理
(2)、配置负载均衡
# upstream 指令可以定义一组服务器
upstream targetserver {
server 192.168.138.101: 8080;
server 192.168.138.101: 8081;
}
server {
# 监听端口
listen 8080;
server_name localhost;
location =/{
# 反向代理配置,将请求转发到指定服务器
proxy_pass http://targetserver;
}
}
(3)、负载均衡策略
名称 | 说明 |
---|---|
轮询 | 默认方式 |
weight | 权重方式 |
ip_hash | 依据 IP 分配方式 |
least_conn | 依据最少连接方式 |
url_hash | 依据 URL 分配方式 |
fair | 依据响应时间方式 |
ion =/{
# 反向代理配置,将请求转发到指定服务器
proxy_pass http://targetserver;
}
}
#### (3)、负载均衡策略
| 名称 | 说明 |
| ------------ | ----------------- |
| 轮询 | 默认方式 |
| `weight` | 权重方式 |
| `ip_hash` | 依据 IP 分配方式 |
| `least_conn` | 依据最少连接方式 |
| `url_hash` | 依据 URL 分配方式 |
| `fair` | 依据响应时间方式 |