一、Nginx简介
1、什么是Nginx
Nginx是高性能的HTTP和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。
2、能做什么
- 反向代理
- 负载均衡
- 动静分离
二、Nginx安装(Centos 8)
1、安装Nginx需要的依赖
1)安装pcre依赖
# wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
# tar -xvf pcre-8.37.tar.gz
# cd pcre-8.37
#./configure
# make install
2) 安装openssl、zlib、gcc依赖
# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2、安装Nginx
下载地址:https://nginx.org/
安装版本nginx-1.21.6.tar.gz
# tar -xvf nginx-1.21.6.tar.gz #解压
# cd nginx-1.21.6/ # 进入安装目录
# ./configure
# make && make install # 安装
# cd /usr/local/nginx/sbin/ # 进入sbin目录
# ./nginx # 启动Nginx
浏览网站:http://ip 出现如下图表示安装成功,如果未成功检查防火墙是否开放80端口
三、常用命令
# 首先要进入到sbin目录
# cd /usr/local/nginx/sbin/ # 进入sbin目录
# ./nginx -v # 查看nginx版本
# ./nginx # 启动nginx
# ./nginx -s stop #停止nginx
# ./nginx -s reload # 重新加载nginx
四、Nginx配置文件
1、配置文件位置
# cd /usr/local/nginx/conf/nginx.conf
2、配置文件的内容
nginx.conf文件
3、反向代理配置(可以创建多个server块,同时进行多个代理)
nginx.conf文件
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;
proxy_pass http://127.0.0.1:8080; # 反向代理
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4、负载均衡配置
假设127.0.0.1:8080与127.0.0.1:8081为两个服务器
nginx.conf文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream myserver { # 负载均衡
# 1.轮询
server 127.0.0.1:8080;
server 127.0.0.1:8081;
# 2.权重
#server 127.0.0.1:8080 weight=5;
#server 127.0.0.1:8081 weight=10;
# 3.ip_hash
#ip_hash;
#server 127.0.0.1:8080;
#server 127.0.0.1:8081;
# 4.fair
#server 127.0.0.1:8080;
#server 127.0.0.1:8081;
#fair;
}
server {
listen 80;
server_name localhost;
location / {
root html;
#proxy_pass http://127.0.0.1:8080; # 反向代理
proxy_pass http://myserver; # 反向代理 + 负载均衡
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
分配服务器的四种策略介绍
- 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
- 权重(weight):代表权重,默认为1,权重越高被分配的客户端越多
- ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
- fair(第三方):按后端服务器的响应时间分配请求,响应时间短的优先分配
nginx的属性
1、down属性:标识该服务宕机
2、 backup属性:标识该服务为备用机
3、max_fails=1 fail_timeout=60s:宕机服务器高可用的实现,当服务器宕机时,如果访问的失败次数达到最大的失败次数时,则表示为down(自动完成),在一定的周期之内,如果服务器恢复正常,则还是可以访问。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream myserver { # 负载均衡
# 1.down
#server 127.0.0.1:8080 down; # 宕机状态,不提供服务
#server 127.0.0.1:8081;
# 2.backup
#server 127.0.0.1:8080;
#server 127.0.0.1:8081 backup; # 当8080宕机时提供服务
# 3.down
server 127.0.0.1:8080 max_fails=1 fail_timeout=60s;
server 127.0.0.1:8081 max_fails=1 fail_timeout=60s;
}
server {
listen 80;
server_name localhost;
location / {
root html;
#proxy_pass http://127.0.0.1:8080; # 反向代理
proxy_pass http://myserver; # 反向代理 + 负载均衡
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
5、动静分离配置
假设目录结构为如下图:
image文件夹中存放图片,www文件夹中存放html文件
nginx.conf配置
nginx.conf文件
worker_processes 1; # worker数,最好设置和cpu数量相同
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 /www/ {
root /data/;
index index.html index.htm;
}
location /image/ {
root /data/;
autoindex on; # 列出当前文件夹中的内容
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
通过浏览器访问
静态页面:http://localhost/www/index.html
静态资源:http://localhost/image/123.jpg
autoindex on; 的作用访问http://localhost/image/ 会有如下图效果
6、高可用配置(主从模式配置)
1)准备工作
- 需要两台服务器 192.168.1.101 和 192.168.1.102
- 在两台服务器上分别安装nginx
- 在两台服务器上分别安装keepalived
这里使用yum命令安装,其他安装方法请自己查找相关资料
# yum install keepalived -y
安装之后在etc目录里面生成keepalived目录,其中keepalived.conf为配置文件
2) 修改keepalived的配置文件keepalived.conf
keepalived.conf文件
! Configuration File for keepalived
# 全局定义
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
#vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_garp_interval 0
#vrrp_gna_interval 0
}
# 脚本配置
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" # 检测脚本文件,需要自己编写,路径根据实际路径修改
interval 2 # 检测脚本执行的间隔,2表示两秒
weight 2 # 权重参数
}
# 虚拟ip配置
vrrp_instance VI_1 {
state MASTER # 注意:主服务器用MASTER 备份服务器用BACKUP
interface ens32 # 要绑定虚拟ip的网卡(用命令 ifconfig 查看网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 100 # 主、备机各取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication { # 权限校验的方式
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100 # VRRP H虚拟地址
}
}
3)编写检测脚本nginx_check.sh
检测脚本nginx_check.sh,用于检测nginx是否运行正常,脚本文件要放在keepalived.conf配置的路径下
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
4) 启动nginx 与 keepalived
# 启动ngixn
# cd /usr/local/nginx/sbin
# ./nginx
# 启动 keepalived
# systemctl start keepalived.service
5) 测试
- 通过虚拟ip进行访问 http://192.168.1.110
- 关闭主服务器中的nginx和keepalived,然后再进行访问