概念:
Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。
Nginx支持热部署,启动速度特别快,还可以在不间断服务的情况下对软件版本或配置进行升级,即使运行数月也无需重新启动。
方法一
正式开始前,要先安装好编译环境gcc g++开发库
#安装make
yum -y install gcc automake autoconf libtool make
#安装gcc++
yum install gcc gcc-c++
1.选择一个目录,用于保存安装的文件
cd /usr/local/src
2.安装PCRE库
cd /usr/local/src
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
tar -zxvf pcre-8.44.tar.gz
cd pcre-8.44
./configure
make
make install
3.安装zlib库
cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install
4.安装ssl
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -zxvf openssl-1.1.1g.tar.gz
5.开始Nginx的安装
cd /usr/local/src
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-file-aio \
--with-http_realip_module \
--with-http_ssl_module \
--with-pcre=/usr/local/src/pcre-8.44 \
--with-zlib=/usr/local/src/zlib-1.2.11 \
--with-openssl=/usr/local/src/openssl-1.1.1g
make -j2
make install
安装成功后,会在/usr/local/nginx下产生一个目录
启动Nginx
/usr/local/nginx/nginx
查看是否启动成功
ps -ef | grep nginx
启动成功,会出现
root 32708 1 0 11:12 ? 00:00:00 nginx: master process /usr/local/nginx/nginx
nobody 32709 32708 0 11:12 ? 00:00:00 nginx: worker process
root 32711 9607 0 11:13 pts/1 00:00:00 grep --color=auto nginx
或者在windows浏览器访问 ,Linux的IP地址,前提是防火墙放行
方法二
直接使用docker下载
docker pull nginx/unit
docker run -d nginx/unit
配置文件
#user nobody;
#工作进程数,通常等于CPU数量或两倍
worker_processes 1;
#错误日志存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
# 工作进程最大连接数量,理论上每台nginx服务器的最大连接数为:
# worker_processes * worker_connections
worker_connections 1024;
}
设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
# 设置请求包含的内容,存放在mime.types
include mime.types;
default_type application/octet-stream;
# 日志格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# $remote_addr:获取到的是反向代理服务器的IP地址
# $http_user_agent:用来记录客户浏览器的相关信息
# 因为nginx是一个网关控制中心,如果我们开启了反向代理,那么我们是先去访问
# nginx,然后由nginx对请求进行转发,这样我们就获取不到客户的IP地址
# 可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址
# 开启了上面日志,就要开启这个配置,来存放日志
#access_log logs/access.log main;
# 设定通过nginx上传文件的大小
client_max_body_size 300m;
sendfile on;
#tcp_nopush on;
# keepalive超时时间。
#keepalive_timeout 0;
keepalive_timeout 65;
#后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout 90;
#连接成功后_等候后端服务器响应时间_
#其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_read_timeout 180;
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 180;
#这三个超时时间,就好比,你在网上购物,
#proxy_connect_timeout:你买了商品,商家给你投递的时间
#prt:快递在途中运输的时间
#pst:退货时,快递运输的时间
#三者只要有其中一个超时,都会导致这场交易不能够顺利完成
#gzip on;
#负载均衡
upstream name{
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
fair;
}
#格式
upstream 名字{
<负载模式>
[负载均衡设备] [IP] <设备状态>
}
# name: 该服务的名称
# dowm: 该服务器不参与负载均衡
# weight: 开启权重模式,根据权重大小,来对指定访问服务器的比重
# ip_hash: 表示每个请求按访问ip的hash结果分配,相同的ip只能访问同一个后端服务器
# fair: 按后端服务器的响应时间来分配请求,响应时间短的优先分配
#四种分配策略:
#1.默认轮询: 每个请求按时间顺序逐一分配到不同的后端服务器中,如果后端服务器宕机,会被自动剔除
#2.weight权重
#3.ip_hash
#4.fair
# 在需要负载均衡的server中添加proxy_pass http://upstream的服务名称/;
# 配置服务
server {
# 监听80端口
listen 80;
# 监听的服务名称
server_name localhost;
# 设置字节编码
#charset koi8-r;
#access_log logs/host.access.log main;
# 定义拦截规则
location / {
root html;
index index.html index.htm;
}
proxy_pass http://upstream的服务名称/;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
1.准备多台虚拟机
2.安装nginx,keepalived
使用yum命令下载安装
yum install keepalived -y
3.会在/etc/keeplived生成keeplived.conf
! Configuration File for keepalived
global_defs {
notification_email {
#指定keeplived在发生切换时发送emaik到下列对象
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #指定邮件发送人
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#vrrp_sync_group VG_1{
#监控多个网段的实例
# group {
# inside_network #实例名
# outside_network
# }
# notify_master /path/xx.sh #指定当切换到master时,执行的脚本
# notify_backup /path/xx.sh #指定当切换到backup时,执行的脚本
# notify_fault "path/xx.sh VG_1" #故障时执行的脚本
# notify /path/xx.sh
# smtp_alert #使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
#}
vrrp_script chk_http_port {
#脚本配置
script "/usr/local/src/nginx_check.sh" #脚本所在的路径
interval 2 #执行脚本的间隔时间
weight 2 #该服务器的权重
}
vrrp_instance VI_1 {
state MASTER #备份服务器修改成BACKUP
interface eth33 #这个虚拟机使用的网卡
virtual_router_id 51 #主,备机的值必须一样,这个是它们的集群的唯一标识
priority 100 #优先级 主机需要大于从机
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
#虚拟ip 这个ip会与当前主机的ip进行一个绑定 vip
192.168.44.200
}
}
脚本文件
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/webserver/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
启动keepalived,会执行脚本文件,会检测到nginx是否启动,未启动的情况下,启动nginx
systemctl start keepalived.service
使用 ps -ef | grep nginx
命令验证
启动时可能碰到的错误:
可能是脚本文件中的路径不对;
权限不够;
配置实例中缺少调用脚本命令
解决方法:修改路径:修改脚本命令中的路径
修改权限:进入到脚本路径下 执行chmod 755 脚本文件名
添加调用脚本:
track_script {
chk_http_port #(调用检测脚本)
}
错误2:Disabling track script chk_http_port due to insecure
global_defs {
#添加
enable_script_security #开启脚本安全设置
}
错误3:setroubleshootd引起的内存不足
解决方法:
vi /etc/selinux/config
#SELINUX=enforce #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
#保存 重启生效