一、下载 Nginx 压缩包
1.官网版本地址—>>Nginx官网下载地址
2.自行设置Nginx下载的目录,通常下载到 /usr/local/
wget -c http://nginx.org/download/nginx-1.18.0.tar.gz
3.解压Nginx压缩包
tar -zxvf nginx-1.18.0.tar.gz
4.第二种安装方式,下载rpm包
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
5.yum安装
#配置 7 的阿里源
vim /etc/yum.repo.d/ali.repo
[aliyun]
name=aliyun
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0
yum install -y nginx
二、安装 Nginx 相关依赖 gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel
yum install -y gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel
1.进入Nginx目录
cd /usr/local/nginx-1.18.0
2.检测你的安装平台的目标特征的
./configure
3.用来编译的,它从Makefile中读取指令,然后编译。
make
make: *** No rule to make target `build', needed by `default'. Stop.
安装前置库 yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel
4.是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
make install
(注意:要访问前,首先要看端口是否对外开放或者防火墙是否关闭)
查看已经开放的端口号
firewall-cmd --list-all
开启对开开放访问的端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
三、启动 并访问Nginx
1.设置Nginx 开机自启动
vim /etc/rc.local
文本底部追加
/usr/local/nginx/sbin/nginx
2.启动Nginx
/usr/local/nginx/sbin/nginx
3.重载、停止 或 杀掉Nginx
/usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx -s quit
4.检查进程Nginx 是否启动成功
ps -ef | grep nginx
5.设置Nginx Linux7 使用 systemctl 命令快速启动,编辑systemctl服务配置文件
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
6.查看Nginx版本号
Nginx -v
7.浏览器输入你本机的ip地址出现以下界面Nginx 就访问成功了,Nginx是80端口
四、配置Nginx 实现 反向代理 操作
名词简单解释,反向代理的意思是客户端拉起请求访问代理服务器由代理服务器去请求目标服务器,暴露代理服务器地址,隐藏目标服务器地址
1.查看配置文件
cat /usr/local/nginx/conf/nginx.conf
2.Nginx配置文件有三部分组成概述
#user nobody;
*第一部分:全局块
#从配置文件开始到events块之间内容,主要会设置一些影响Nginx服务器的整体运行配置指令
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块
#events块涉及的指令主要影响 Nginx 服务器与用户的网络连接
events {
worker_connections 1024; //支持最大连接数
}
*第三部分:http块
#配置最频繁的部分,配置 反向代理,负载均衡,动静分离,高可用,都在http块中去配置
http {
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"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#http server 块
server {
listen 80; #监听端口
server_name 127.0.0.1 www.edu.net; #域名和IP
#charset koi8-r;
#access_log logs/host.access.log main;
#路径中包含
location / {
root html;
index index.html index.htm;
}
#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;
# }
#}
}
3.配置反向代理实例 打开浏览器访问 www.edu.com 跳转到tomcat主页面中
(1)第一步,在Windows系统的host文件进行域名和ip对应关系的配置,编辑hosts文件
添加内容,前面是你的ip,后面是你要绑定的域名
访问域名进行测试,看是否正常
(2)配置 nginx.conf 文件,进行请求转发
vim /usr/local/nginx/conf/nginx.conf
(3)重载配置文件
/usr/local/nginx/sbin/nginx -s reload
(4)访问域名地址,www.edu.com 测试
Nginx 配置示例-反向代理实例2
1、实现效果
使用Nginx 反向代理,根据访问路径跳转到不同的端口服务中,Nginx 监听端口为8001
访问 http://www.edu.com/vs/ 直接跳转到127.0.0.1:8080
访问 http://www.edu.com/co/ 直接跳转到127.0.0.1:8081
准备两个tomcat中间件 一个端口为8080,另一个为8081, 修改server.xml 改端口号
保存退出,重启tomcat,查看进程
在tomcat8080端口下的webapps创建 vs 目录>创建A.html文件>内容为B-8080
在tomcat8081端口下的webapps创建 co 目录>创建A.html文件>内容为B-8081
配置nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
刚Nginx 配置文件被修改了,要重载配置文件
/usr/local/nginx/sbin/nginx -s reload
访问 ip:9001/vs/A.html 或者 ip:9001/co/A.html 进行测试
测试成功!
补充:location指令说明,该指令用于匹配 URL
语法如下
location [ = | ~ | ~* | ^~ ] uri {
}
1、=:用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~ * 用于表示 uri 包含正则表达式,并且区不分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到表示 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不在使用 location块中的正则 uri 和 请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~ 标识。*
五、配置Nginx 实现 负载均衡 操作
1、实现效果
(1)、浏览器地址栏输入http://192.168.17.129/vs/A.html,负载均衡效果,平均分担到 8080 和 8081 端口中去
2、准备工作
(1)、准备两台 tomcat 服务器,一台 8080 端口,一台 8081 端口
(2)、在两台 tomcat 里面 webapps 目录中,创建名称是 vs 文件夹,在 vs 文件夹中创建a.html文件。
3、在 Nginx 配置配置文件中做负载均衡配置
#配置 Nginx 负载均衡
http {
#配置 Nginx 负载均衡 区域 以下是配置内容(注意配置在http块中)
#upstream模块应放于nginx.conf配置的http{}标签内
#upstream模块默认算法是wrr (权重轮询 weighted round-robin)
upstream myserver{
ip_hash;
server 192.168.40.128:8080 weight=1 max_fails=2 fail_timeout=2;
server 192.168.40.128:8081 weight=1 max_fails=2 fail_timeout=2;
}
server {
#监听80端口
listen 80;
#可以是域名或者地址 域名+地址也可以
server_name 192.168.40.128;
#进行转发
location / {
root html;
#加上规则,转发路径,找到上面发服务名进行轮询
proxy_pass http://myserver;
index index.html index.htm;
}
}
}
重载 Nginx 配置文件 或者 重启也行
/usr/local/nginx/sbin/nginx -s reload
浏览器输入IP地址 进行测试
默认不分配策略参数的话 负载均衡轮询 是 ABABABABABABABABABABAB=1:1的。
Nginx 提供了几种分配方式(策略) 下面就讲各参数的作用
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、weight
weight 代表权重,默认为 1 权重越高,被分配的客户端越多,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均匀的情况
upstream myserver {
server 192.168.11.444:8080 weight=1 max_fails=2 fail_timeout=20;
server 192.168.11.333:8081 weight=2 max_fails=2 fail_timeout=20;
server 192.168.11.441:8082 weight=3 max_fails=2 fail_timeout=20;
}
补充:
max_fails=2
fail_timeout=20
在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。
3、ip_hash
每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session共享问题。
upstream myserver {
ip_hash;
server 192.168.11.444:8080;
server 192.168.11.333:8081;
server 192.168.11.441:8082;
}
4、fair
fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求,简单说就是响应时间短的ip地址优先分配。
upstream myserver {
server 192.168.11.444:8080;
server 192.168.11.333:8081;
server 192.168.11.441:8082;
fair;
}
5、url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。
upstream myserver {
server 192.168.11.444:8080;
server 192.168.11.333:8081;
server 192.168.11.441:8082;
hash $request_uri;
hash_method crc32;
}
其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。
六、配置Nginx 实现 动静分离 操作
准备工作
1、在Linux 系统中准备一些静态资源
2、通过 Nginx 访问静态资源
3、配置操作
#配置在http块中
server {
#监听80端口
listen 80;
server_name 192.168.40.128;
#进行转发
location /www/ {
#静态资源路径
root /root/data/;
index index.html index.htm;
#列出访问目录
autoindex on;
}
location /image/ {
#静态资源路径
root /root/data/;
index index.html index.htm;
autoindex on;
}
}
**3、浏览器输入 IP地址 进行测试 **
七、配置Nginx 实现 高可用 操作
1、配置 高可用 准备工作
(1) 需要两台 Nginx 服务器
(2) 在两台服务器中安装 Nginx keepalived
这里启动不起来原因是因为 Nginx 端口被占用,修改端口号在 Nginx.conf里就可以修改
[root@zabbix ~]# /usr/local/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
2、两台安装 keepalived,rpm命令 只有在用 yum 安装的时候 才能查询到安装包版本
yum install -y keepalived
安装完成会生成目录 在 /etc/keepalived/keepalived.conf 配置主从内容
4、配置 Nginx keepalived.conf 完成高可用配置(主从配置) 参数解释:
清空 默认 keepalived.conf 配置文件内容
> /etc/keepalived/keepalived.conf
global_defs {
notification_email {
aa@qq.com //定义接收告警的人员信息
}
notification_email_from aa@qq.com //定义发邮件地址(实际上没用)
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx { //chk_nginx为自定义名字,后面还会用到它
script "/usr/local/sbin/check_ng.sh" //自定义脚本,该脚本为监控nginx服务的脚本,务必记住,稍后会用上
interval 3 //每隔3s执行一次该脚本
}
vrrp_instance VI_1 {
state MASTER //角色为MASTER,从的话是BACKUP,这里参数要大写
interface ens33 //针对哪个网卡监听VIP
virtual_router_id 51 //定义路由器的ID,多个节点的设置值必须一样,以指明各个节点属于同一个VRRP组
priority 100 //权重为100,master要比backup大
advert_int 1
authentication { //认证相关信息
auth_type PASS //定义认证方式,PASS表示password
auth_pass aminglinux>com //定义密码,这个密码自定义
}
virtual_ipaddress { //定义VIP参数
192.168.40.100 //定义VIP(虚拟IP)(当master宕机的时候,访问backup的ip地址,这个IP是公共的)
}
track_script {
chk_nginx //定义监控脚本,这里和上面vrr_script后面的字符串要保持一致
}
}
关于VIP:它的英文名字是Virtual IP,即虚拟IP,也有浮动IP的叫法。因为这个IP是由keepalived给服务器配置上的,服务器靠这个VIP对外提供服务,当master机器宕机,VIP被分配到backup上,这样用户看来是无感知的。
5、编辑 自动检查发现 Nginx 是否宕机脚本
#vim /usr/local/sbin/check_ng.sh
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
给脚本加上执行权限
chmod 755 /usr/local/sbin/check_ng.sh
启动 两台服务器 Nginx 和 keepalived 服务
systemctl start keepalived.service
ps -ef | grep keepalived
6.查看 本机 ip 是否绑定 VIP(虚拟IP)
ip addr
7.测试环节 访问 刚才配置文件里绑定的 (VIP)虚拟 IP地址 192.168.40.100
把 从/主 服务器 上的 keepalived 高可用 停止,刷新页面看是否有变化,如果没变化 高可用 配置成功!