Nginx -- linux 安装 Nginx || 高可用 keepalived || session 共享解决方案

本文详细介绍在Linux环境下安装Nginx及所需依赖的过程,包括配置SSL模块,以及通过Keepalived实现Nginx的高可用性和故障自恢复。同时,探讨了session共享的多种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.linux 安装 Nginx

安装nginx 前依赖环境

yum -y install gcc                      安装gcc,编译依赖gcc环境,已存在可跳过
yum install -y pcre pcre-devel          安装.pcre、pcre-devel,安装nginx需要此库,已存在可跳过
yum install -y zlib zlib-devel          nginx使用zlib对http包的内容进行gzip,已存在可跳过
yum install -y openssl openssl-devel    openssl安装,,已存在可跳过

安装nginx

wget http://nginx.org/download/nginx-1.9.9.tar.gz      下载nginx压缩包
tar -zxvf  nginx-1.9.9.tar.gz                          解压缩

cd nginx-1.9.9             进入压缩目录
./configure                配置属性: 如需ssl模块执行 -->   ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make & make install        编译 安装

cd /usr/local/nginx        进入安装目录,默认安装到此目录
cd sbin                    进入sbin目录
./nginx                    启动nginx,浏览器直接输入ip 出现Nginx欢迎页安装完成

如果访问不了,开放防火墙端口

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT   
/etc/rc.d/init.d/iptables save

浏览器输入 ip地址 ,出现如下界面表示配置正常。
在这里插入图片描述
安装原参考地址: https://blog.csdn.net/xukongjing1/article/details/83824219

如果安装是使用的 ./configure ,后需要ssl 模块(https:// wss://),重新执行命令如下,在重新编译安装
安装nginx如需ssl 模块,替换安装nginx 的 ./configure 命令如下

http 配置属性
./configure             
ssl 模块
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

二.Nginx 命令

命令无法运行加 ./ 如:./nginx -s stop


安装目录下的 sbin 目录运行, 如默认地址:cd  /usr/local/nginx/sbin

./nginx -h	         查看帮助信息
./nginx -v	         查看Nginx版本

./nginx              启动 Nginx  ||  start nginx          
./nginx -s stop	     停用 Nginx
./nginx -s quit	     优雅的停用Nginx(处理完正在进行中请求后停用)

./nginx -s reload	 重新加载配置,并优雅的重启进程
./nginx -s reopen	 重启日志文件

1、Stop 和 quit 停用Nginx的区别
如果一个进程需要10秒钟才能处理完成,直接 stop 可能会造成数据丢失,错误等,而quit 会等待进程处理完成在关闭nginx

2、reload 重新加载配置,无需重新启动nginx
原理:nginx下有多个进程,每当一个进程处理完请求后,
会重新创建一个进程并杀死该进程,重新创建的
进程使用的就是修改过后的配置的。


三.高可用 keepalived

1. 下载keepalived-1.2.18

添加链接描述
提取码:5snn

2. 解压安装
# 1、安装
 tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/    // 解压到 /usr/local/ 
 yum install -y openssl openssl-devel                 // 需要安装一个软件包,安装nginx已安装过,可跳过
 cd /usr/local/keepalived-1.2.18/                     // 进入解压目录
 ./configure --prefix=/usr/local/keepalived           // 配置属性
 make & make install                                  // 编译安装


# 2、配置为系统服务
#  将keepalived安装成Linux系统服务,
#  因为没有使用keepalived的默认安装路径(默认路径:/usr/local)
#  创建文件夹,将keepalived配置文件进行复制到  **/etc/keepalived/** 下

 mkdir /etc/keepalived                                                   // 创建目录
 cp /usr/local/keepalived-1.2.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
 cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/        // 复制到 /etc/keepalived/
 cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/       // 复制到 /etc/keepalived/
 ln -s /usr/local/sbin/keepalived /usr/sbin/                             // 添加软连接
 ln -s /usr/local/keepalived/sbin/keepalived /sbin/
 chkconfig keepalived on                                                 //可以设置开机启动

到此我们安装keepalived完毕!

3、keepalived 启动停止命令
service keepalived start
service keepalived stop

四. keepalived 配置 Nginx 宕机自启用

1 、创建 Nginx 重启脚本

/etc/keepalived/ 目录下 创建 nginx_check.sh, 并 修改为可写读 权限
在这里插入图片描述
在 nginx_check.sh 添加内容

#!/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

脚本说明:
1、检查nginx 是否正常运行,非正常运行则重启,可保证Nginx 永不断线…
2、/usr/local/nginx/sbin/nginx 为 nginx 安装目录下的 /sbin/nginx

2、修改keepalived.conf 配置

目录: /etc/keepalived/ 下修改 keepalived.conf

配置步骤如下:

  • 1、 替换为下方脚本内容
  • 2、 interface --> 绑定虚拟 IP 的网络接口类型,填写为自己的机器, 如何查看看 4.3 步骤
  • 3、 mcast_src_ip --> 主机ip地址, 填写本机ip, 如何查看看 4.3 步骤
  • 4、 state --> 决定主从,主节点填写 MASTER,备份节点填写BACKUP(可不编辑)
  • 5、配置完成后先执行停止命令, 在执行 启动命令, 可通过 4.4 步骤查看是否配置成功
! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,就是nginx宕机以后,自动重启nginx
    interval 2                              #检测nginx宕机时间间隔
    weight -20                              #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state MASTER                # 需配置 -  决定主从,主节点为MASTER,备份节点为BACKUP
    interface eth0              # 需配置 -  绑定虚拟 IP 的网络接口,根据自己的机器填写(一般情况下都是eth0)
    mcast_src_ip 172.16.63.255  # 需配置 -  填写本机ip
    virtual_router_id 121       # 虚拟路由的 ID 号, 两个节点设置必须一样
    priority 100                # 节点优先级,主节点比从节点优先级高
    nopreempt                   # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1                # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS          # 默认账号密码
        auth_pass 1111
    }
    track_script {               # 将 track_script 块加入 instance 配置块
        chk_nginx                # 执行Nginx 监控的服务
    }
    virtual_ipaddress {
        192.168.110.110          # 虚拟ip,也就是最后浏览器服务的ip,也可扩展,用途广泛。可配置多个。
    }
}

其他配置说明:

  1. 检测Nginx是否菪机,是立即重启改节点的Nginx
  2. 虚拟ip 等于外网映射的内网 Ip,
    如 www.ryao.work (域名)–> 47.128.17.66 (外网ip) --> 192.168.110.110(虚拟ip= 原内网ip)
  3. 访问虚拟 ip 如上配置的,访问192.168.110.110 ,自动访问到访问主节点Ip 的80 端口
  4. 多台 Linux 服务器配置了 keepalived,如果主节点80 端口的Nginx’菪机了,自动访问从节点对应 Ip 80端口的Nginx 服务器
  5. keepalived 的配置必须在一个路由下才有效
  6. 80 端口不一定非是Nginx ,也可以配置Tomcat等
3、 linux命令查看网络接口和ip

执行命令

 ip a

下方图片-----第一个箭头的地方对应填写 mcast_src_ip
下方图片-----第二个箭头的地方对应填写 interface
在这里插入图片描述

4、查询 keepalived 日志, 查看是否监听 nginx 成功

keepalived 的启动和停止都可以在日志中查看到,
如下启动成功会隔断时间一直打印 Apr 1 12:59:44 iz2vcdenuia3gqp8gs4q5wz Keepalived_vrrp[16833]: Process [23236] didn't respond to SIGTERM ,表示正在正常运行和监听 nginx

tail -f /var/log/messages

在这里插入图片描述

5、虚拟ip 配置成功查看

配置完成启动 ,执行 ip a 发现除了原有的Ip,另外在出现配置的一条虚拟Ip 的数据
那么 virtual_ipaddress 的虚拟ip就配置成功了, 该 ip 可以提供给别人使用
在这里插入图片描述

五. session 共享解决方案

0、session说明
-----Nginx 轮训两个不同Ip的 tomcat服务器,sessionId 是不一样的,
-----每次getSession ,获取不到sessionId 会创建新的session,
-----两台服务器轮训,会导致两台服务器都取不到session里面的值
-----把 getSession 设置成false ,会发现每台tomcat 服务器有自己的session,a服务器和b服务器的session不共享

1、session 解决方案1,ip绑定,不建议
在这里插入图片描述
配置说明:一个用户服务第一次访问到的是a服务器,那么它的后续访问就一直是a 服务器了,session 不存在跨服务器问题,但 ip 绑定对集群就没太大意义了,不建议使用
2、session 解决方案2,数据库备份,不建议

session 放数据库一份,session找不到就去数据库找,不建议使用

3、session 解决方案3,cooket,不建议
缺点:安全性差、http请求都需要带参数增加了带宽消耗,不建议
在这里插入图片描述

4、session 解决方案4,使用redis 重写session,使用spring-session

-----------session,key放入redis 保存,服务器中取不到session,自动从redis 中取
springboot 集成

pom.xml

	<!--spring boot 与redis应用基本环境配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
        </dependency>
        <!--spring session 与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

SessionConfig
配置redis服务器的连接

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

//这个类用配置redis服务器的连接
//maxInactiveIntervalInSeconds为SpringSession的过期时间(单位:秒)
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class SessionConfig {

	// 冒号后的值为没有配置文件时,制动装载的默认值
	@Value("${redis.hostname:localhost}")
	String HostName;
	@Value("${redis.port:6379}")
	int Port;

	@Bean
	public JedisConnectionFactory connectionFactory() {
		JedisConnectionFactory connection = new JedisConnectionFactory();
		connection.setPort(Port);
		connection.setHostName(HostName);
		return connection;
	}
}

重写session

//初始化Session配置
public class SessionInitializer extends AbstractHttpSessionApplicationInitializer{
    public SessionInitializer() {
        super(SessionConfig.class);
    }
}

ok!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值