Nginx是一款轻量级的Web/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少并发能力强
直接安装Nginx
yum -y install nginx
第一步: Nginx是C语言开发的所以需要先安装依赖
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
第二步: 下载Nginx安装包并解压到/usr/local
目录下
# 安装wget程序
yum install wget
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz -C /usr/local/
第三步: 执行nginx解压目录中的./configure --prefix=/usr/local/nginx
命令在安装前检查环境,然后将其安装到/usr/local/nginx
目录
cd /usr/local/nginx-1.24.0/
# 创建建安装路径文件夹
mkdir /usr/local/nginx
# 安装前检查工作
./configure --prefix=/usr/local/nginx
# 编译并安装
make && make install
第四步: 开发80端口
# 开放指定端口,--add-port=8080/tcp表示放行8080端口的tcp访问,--permanent表示永久生效
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重新载入防火墙规则使其生效
firewall-cmd --reload
# 查看开放的端口
firewall-cmd --zone=public --list-ports
Nginx的目录结构
├── conf <-- Nginx配置目录
│ ├── fastcgi.conf
│ ├── fastcgi.conf.default
│ ├── fastcgi_params
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types
│ ├── mime.types.default
│ ├── nginx.conf <-- nginx配置文件(经常操作)
│ ├── nginx.conf.default
│ ├── scgi_params
│ ├── scgi_params.default
│ ├── uwsgi_params
│ ├── uwsgi_params.default
│ └── win-utf
├── html <-- 存放静态文件(html、css、Js等),后期部署项目需要将静态文件放在这
│ ├── 50x.html
│ └── index.html <-- nginx提供的默认的页面
├── logs <-- nginx的日志目录存放日志文件(服务启动后会生成访问日志和进程文件)
└── sbin
└── nginx <-- 二进制文件,用于启动、停止Nginx服务
Nginx的命令需要在sbin目录下才能执行,可以将Nginx的二进制文件配置到环境变量中这样就可以在任何目录下都能执行
# 编辑配置文件并使其生效: v im /etc/profile和source /etc/profile
ecport PATH=$JAVA_HOME/bin:$PATH
PATH=/usr/local/nginx/sbin:$JAVA_HOME/bin:$PATH
命令 | 功能 |
---|---|
./nginx -v | 查看nginx的版本 |
./nginx -t | 检查配置文件正确性(如果有错误会报错,而且也会记日志) |
./nginx | 启动nginx,启动服务后浏览器输入本机的ip地址就可以访问Nginx的默认页面(需要设置防火墙对80端口放行) |
./nginx -s stop | 停止nginx |
./nginx -s reload | 当修改Nginx配置文件后,需要重新加载才能生效 |
# 查看nginx的版本
[root@localhost sbin]./nginx -v
nginx version: nginx/1.22.1
# 检查配置文件正确性
[root@localhost sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# 启动nginx服务(master与worker进程)
[root@localhost sbin]./nginx
[root@localhost sbin]ps -ef | grep nginx
root 89623 1 0 22:08 ? 00:00:00 nginx: master process ./nginx
nobody 89624 89623 0 22:08 ? 00:00:00 nginx: worker process
root 89921 1696 0 22:08 pts/0 00:00:00 grep --color=auto nginx
# 停止Nginx服务
[root@localhost sbin]./nginx -s stop
[root@localhost sbin]ps -ef | grep nginx
root 93772 1696 0 22:11 pts/0 00:00:00 grep --color=auto nginx
Nginx配置文件(conf/nginx.conf)整体分为三部分
worker_processes 1; <-- 全局块(events块之前的配置都是全局块)
events { <-- events块
worker_connections 1024;
}
http { <-- http块
include mime.types; <-- http全局块(server块之前的配置都是全局块)
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server { <-- Server块
listen 80; <-- Server全局块(location块之外 的配置都是全局块)
server_name localhost;
location / { <-- location块
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
跨平台:Nginx可以在大多数操作系统中运行,而且也有Windows的移植版本
配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置
非阻塞、高并发:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数(这得益于Nginx使用了最新的epoll模型)
事件驱动:通信机制采用epoll模式,支持更大的并发连接数
内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)
成本低廉:Nginx作为开源软件,可以免费试用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
内置健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问。
节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头。
稳定性高:用于反向代理,宕机的概率微乎其微。
Nginx相对于Tomcat处理静态资源的能力更加高效,所以在生产环境下一般都会将Nginx可以作为静态web服务器来部署静态资源
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# 监听80端口
listen 80;
# 服务器的IP地址(域名)
server_name localhost;
# 处理80端口的location块,用来匹配客户端请求的url
location / {
# 指定静态资源的根目录
root html;
# 指定默认首页(可以指定多个,中间用空格隔开,以";"结尾)
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
正向代理: 为了从原始服务器取得内容, 客户端向代理服务器发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端
反向代理: 用户直接访问反向代理服务器就可以获得目标服务器的资源(用户不需要知道目标服务器的地址), 反向代理服务器负责将请求转发给目标服务器
正向代理和反向代理的区别
配置反向代理: 客户端 —> 192.168.138.100:82(访问反向代理服务器)
—> 192.168.138.101:8080(将请求转发到指定web服务器)
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 在http块中新增一个server块,用来将请求转发
server {
# 监听82端口
listen 82;
server_name localhost;
location / {
# 反向代理配置,将请求转发到目标服务器
proxy_pass http://http://192.168.238.132:8080;
}
}
}
随着业务流量越来越大并且业务逻辑也越来越复杂, 单台服务器的性能及单点故障问题就凸显出来了, 因此需要多台服务器组成应用集群进行性能的水平扩展
负载均衡的规则默认是轮询算法, 第一次访问是192.168.238.132,第二次访问是101.XXX.XXX.160
名称 | 说明 |
---|---|
轮询 | 默认方式 |
weight | 权重方式(数值越大分发机率越高) |
ip_hash | 依据ip分配方式 |
least_conn | 依据最少连接方式 |
url_hash | 依据url分配方式 |
fair | 依据响应时间方式 |
在http块中使用upstream指令
定义一组服务器,新增一个server块采用负载均衡的规则将请求转发到集群中的某一台服务器
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# upstream指令可以定义一组服务器
upstream targetServer{
server 192.168.238.132;
server 101.XXX.XXX.160;
# 采用权重的方式定义一组服务器
server 192.168.238.132 weight=10
server 101.XXX.XXX.160 weight=5
}
server {
listen 82;
server_name localhost;
location / {
# 使用定义好的targetServer
proxy_pass http://targetServe
}
}
}