转自:https://blog.csdn.net/zy1471162851/article/details/91795712

tip:   nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器

nginx  的应用场景

http服务器,可以做网页静态服务器;

虚拟主机;

 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。)

windows常用命令
nginx.exe -s stop –停止

nginx优缺点
占内存小,可以实现高并发连接、处理响应快。

可以实现http服务器、虚拟主机、反向代理、负载均衡。

nginx配置简单

可以不暴露真实服务器IP地址

一:反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

启动一个Tomcat 127.0.0.1:8080

使用nginx反向代理 8080.zyhome.com 直接跳转到127.0.0.1:8080

Host文件新增
127.0.0.1 8080.zyhome.com

127.0.0.1 8081.zyhome.com

nginx.conf 配置

  1. server {
  2. listen 80;
  3. server_name 8080.zyhome.com;
  4. location / {
  5. proxy_pass http://127.0.0.1:8080;
  6. index index.html index.htm;
  7. }
  8. }
  9. server {
  10. listen 80;
  11. server_name 8081.zyhome.com;
  12. location / {
  13. proxy_pass http://127.0.0.1:8081;
  14. index index.html index.htm;
  15. }
  16. }

二:负载均衡

负载均衡策略

2.1 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 
upstream backserver { 
server 192.168.0.14; 
server 192.168.0.15; 
}

2.2 权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 
upstream backserver { 
server 192.168.0.14 weight=10; 
server 192.168.0.15 weight=10; 
}

2.3 IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 
upstream backserver { 
ip_hash; 
server 192.168.0.14:88; 
server 192.168.0.15:80; 

2.4 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。 
upstream backserver { 
server server1; 
server server2; 
fair; 
}

2.5 url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 
upstream backserver { 
server squid1:3128; 
server squid2:3128; 
hash $request_uri; 
hash_method crc32; 
}

配置代码

  1. upstream backserver {
  2.  
  3. server 127.0.0.1:8080;
  4.  
  5. server 127.0.0.1:8081;
  6.  
  7. }
  8.  
  9. server {
  10.  
  11. listen 80;
  12.  
  13. server_name www.zyhome.com;
  14.  
  15. location / {
  16.  
  17. proxy_pass http://backserver;
  18.  
  19. index index.html index.htm;
  20.  
  21. }
  22.  
  23. } 

宕机轮训配置规则

  1. server {
  2.  
  3. listen 80;
  4.  
  5. server_name www.zyhome.com;
  6.  
  7. location / {
  8.  
  9. proxy_pass http://backserver;
  10.  
  11. index index.html index.htm;
  12.  
  13. proxy_connect_timeout 1;
  14.  
  15. proxy_send_timeout 1;
  16.  
  17. proxy_read_timeout 1;
  18.  
  19. }
  20. }

三:配置DDOS

限制请求次数
设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟个请求)。

limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;

server {

...

location /login.html {

limit_req zone=one;

...

}

}

`limit_req_zone`命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端IP($binary_remote_addr)。location块中的`limit_req`通过引用one共享内存区来实现限制访问/login.html的目的。

四:nginx+keepalived  实现高可用

linux操作nginx
Nginx是一款轻量级的网页服务器、反向代理服务器。相较于Apache、lighttpd具有占有内存少,稳定性高等优势。它最常的用途是提供反向代理服务。

linux安装
在Centos下,yum源不提供nginx的安装,可以通过切换yum源的方法获取安装。也可以通过直接下载安装包的方法,以下命令均需root权限执行:

首先安装必要的库(nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库)。选定/usr/local为安装目录,以下具体版本号根据实际改变。

安装PCRE库

  1. $ cd /usr/local/
  2.  
  3. $ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
  4.  
  5. $ tar -zxvf pcre-8.36.tar.gz
  6.  
  7. $ cd pcre-8.36
  8.  
  9. $ ./configure
  10.  
  11. $ make
  12.  
  13. $ make install
  14.  
  15. ./configure报错
  16.  
  17. configure: error: You need a C++ compiler for C++ support. 

解决办法

  1. yum install -y gcc gcc-c++

安装zlib库

  1. $ cd /usr/local/
  2.  
  3. $ wget http://zlib.net/zlib-1.2.8.tar.gz
  4.  
  5. $ tar -zxvf zlib-1.2.8.tar.gz
  6.  
  7. $ cd zlib-1.2.8
  8.  
  9. $ ./configure
  10.  
  11. $ make
  12.  
  13. $ make install

安装ssl

  1. $ cd /usr/local/
  2.  
  3. $ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
  4.  
  5. $ tar -zxvf openssl-1.0.1j.tar.gz
  6.  
  7. $ ./config
  8.  
  9. $ make
  10.  
  11. $ make install

安装nginx

  1. $ cd /usr/local/
  2.  
  3. $ wget http://nginx.org/download/nginx-1.8.0.tar.gz
  4.  
  5. $ tar -zxvf nginx-1.8.0.tar.gz
  6.  
  7. $ cd nginx-1.8.0
  8.  
  9. $ ./configure --prefix=/usr/local/nginx
  10.  
  11. $ make
  12.  
  13. $ make install

安装常见错误:

Nginx启动提示找不到libpcre.so.1解决方法

如果是32位系统

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib

如果是64位系统

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib64

然后在启动nginx就OK了

[root@lee ~]# /usr/local/webserver/nginx/sbin/nginx

启动nginx
$ /usr/local/nginx/sbin/nginx

检查是否启动成功:打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

常用命令
重启:
$ /usr/local/nginx/sbin/nginx 启动命令

重启:
$ /usr/local/nginx/sbin/nginx –s reload

停止:
$ /usr/local/nginx/sbin/nginx –s stop

测试配置文件是否正常:
$ /usr/local/nginx/sbin/nginx –t

强制关闭:
$ pkill nginx

启动Nginx + Keepalived高可用

什么是Keepalived
Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。

上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。 
内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。 
用户空间:

WatchDog:负载监控checkers和VRRP进程的状况
VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。
Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查healthchecking是一定要有的。
IPVS wrapper:用户发送设定的规则到内核ipvs代码
Netlink Reflector:用来设定vrrp的vip地址等。
Keepalived的所有功能是配置keepalived.conf文件来实现的。

安装keepalived
下载keepalived地址:http://www.keepalived.org/download.html

解压安装:

tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

yum install -y openssl openssl-devel(需要安装一个软件包)

cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

make && make install

keepalived安装成Linux系统服务
将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作:

首先创建文件夹,将keepalived配置文件进行复制:

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

然后复制keepalived脚本文件:

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

ln -s /usr/local/sbin/keepalived /usr/sbin/

ln -s /usr/local/keepalived/sbin/keepalived /sbin/

可以设置开机启动:chkconfig keepalived on,到此我们安装完毕!

keepalived 常用命令
service keepalived start

service keepalived stop

配置nginx主备自动重启
第三步:对配置文件进行修改:vim /etc/keepalived/keepalived.conf

keepalived.conf配置文件说明:

(一)Master

! Configuration File for keepalived

global_defs {

router_id bhz005 ##标识节点的字符串,通常为hostname

}

## keepalived 会定时执行脚本并且对脚本的执行结果进行分析,动态调整vrrp_instance的优先级。这里的权重weight 是与下面的优先级priority有关,如果执行了一次检查脚本成功,则权重会-20,也就是由100 - 20 变成了80,Master 的优先级为80 就低于了Backup的优先级90,那么会进行自动的主备切换。

如果脚本执行结果为0并且weight配置的值大于0,则优先级会相应增加。

如果脚本执行结果不为0 并且weight配置的值小于0,则优先级会相应减少。

vrrp_script chk_nginx {

script "/etc/keepalived/nginx_check.sh" ##执行脚本位置

interval 2 ##检测时间间隔

weight -20 ## 如果条件成立则权重减20(-20)

}

## 定义虚拟路由 VI_1为自定义标识。

vrrp_instance VI_1 {

state MASTER   ## 主节点为MASTER,备份节点为BACKUP

## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth6)

interface eth6

virtual_router_id 172  ## 虚拟路由ID号

mcast_src_ip 192.168.1.172  ## 本机ip地址

priority 100  ##优先级配置(0-254的值)

Nopreempt  ##

advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s

authentication {

auth_type PASS

auth_pass bhz ## 真实生产环境下对密码进行匹配

}

track_script {

chk_nginx

}

virtual_ipaddress {

192.168.1.170 ## 虚拟ip(vip),可以指定多个

}

}

(二)Backup

! Configuration File for keepalived

global_defs {

router_id bhz006

}

vrrp_script chk_nginx {

script "/etc/keepalived/nginx_check.sh"

interval 2

weight -20

}

vrrp_instance VI_1 {

state BACKUP

interface eth7

virtual_router_id 173

mcast_src_ip 192.168.1.173

priority 90 ##优先级配置

advert_int 1

authentication {

auth_type PASS

auth_pass bhz

}

track_script {

chk_nginx

}

virtual_ipaddress {

192.168.1.170

}

}

(三)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

我们需要把master的keepalived配置文件 copy到master机器(172)的 /etc/keepalived/ 文件夹下,在把backup的keepalived配置文件copy到backup机器(173)的 /etc/keepalived/ 文件夹下,最后把nginx_check.sh脚本分别copy到两台机器的 /etc/keepalived/文件夹下。

nginx_check.sh脚本授权。赋予可执行权限:chmod +x /etc/keepalived/nginx_check.sh
启动2台机器的nginx之后。我们启动两台机器的keepalived
  /usr/local/nginx/sbin/nginx

service keepalived start

ps -ef | grep nginx

ps -ef | grep keepalived

可以进行测试,首先看一下俩台机器的ip a 命令下 都会出现一个虚拟ip,我们可以停掉  一个机器的keepalived,然后测试,命令:service keepalived stop。结果发现当前停掉的机器已经不可用,keepalived会自动切换到另一台机器上。

我们可以测试在nginx出现问题的情况下,实现切换,这个时候我们只需要把nginx的配置文件进行修改,让其变得不可用,然后强杀掉nginx进程即可,发现也会实现自动切换服务器节点。

自动重启不了,解决办法
查看脚本是否有运行的权限

如果你是root登陆的话(不是的话,切换到root用户,对*.sh赋可执行的权限)

chmod 777 *.sh          赋予权限

or

chmod +x  *.sh

然后运行就OK了,即有权限对文件进行删除等操作。

nginx 实现反向代理、负载均衡、高可用的更多相关文章

  1. linux nginx服务 反向代理 负载均衡 nfs服务

    一.nginx服务 1.首先软件停用firewall #systemctl stop firewalld stop:本次停用 disable:开机停用 enable:开机启用 #ps aux | gr ...

  2. Nginx (二) Nginx的反向代理负载均衡以及日志切割

    Nginx是一个高并发,高性能的服务器,可以进行反向代理以及网站的负载均衡.这些功能的运用都在配置文件中,也就是Nginx安装目录下的conf/nginx.conf. nginx.conf 1. 先来 ...

  3. 三、nginx实现反向代理负载均衡

    1.反向代理 需求: 两个tomcat服务通过nginx反向代理 nginx服务器:192.168.101.3 tomcat1服务器:192.168.101.5 tomcat2服务器:192.168. ...

  4. nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP

    nginx做反向负载均衡,后端服务器获取真实客户端ip   首先,在前端nginx上需要做如下配置: location / proxy_set_hearder host                 ...

  5. nginx ----> nginx配置/反向代理/负载均衡

    nginx [engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP/UDP代理服务器,最初由Igor Sysoev编写. 环境: Ubuntu16.04 安装ngin ...

  6. Nginx(二) 反向代理&负载均衡

    1.反向代理 当我们请求一个网站时,nginx会决定由哪台服务器提供服务,就是反向代理. nginx只做请求的转发,后台有多个tomcat服务器提供服务,nginx的功能就是把请求转发给后面的服务器, ...

  7. nginx和keeplive实现负载均衡高可用

    一. Keeplive服务介绍 Keeplive期初是专门为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入VRRP的功能,因此除了配合LVS服务以外,也可以作为其他服务(ng ...

  8. nginx+tomcat 反向代理 负载均衡配置

    1.nginx的安装和配置见:http://www.cnblogs.com/ll409546297/p/6795362.html 2.tomcat部署项目到对应的服务器上面并启动,不详解 3.在ngi ...

  9. 反向代理负载均衡-----nginx

    一:集群 1.1:集群的概念    集群是一组相互独立的.通过高速网络互联的计算机,他们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高 ...

  10. 反向代理负载均衡之nginx

    一.集群 1.1 什么是集群 集群是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高可用性 ...

随机推荐

  1. 【redis前传】redis整数集为什么不能降级

    前言 整数集合相信有的同学没有听说过,因为redis对外提供的只有封装的五大对象!而我们本系列主旨是学习redis内部结构.内部结构是redis五大结构重要支撑! 前面我们分别从redis内部结构分析 ...

  2. debian9 python环境设置

    file /usr/bin/python which python2 which python3 mv /usr/bin/python /usr/bin/python_bk ln -s /usr/bi ...

  3. Ubuntu Server连接Wi-Fi

    本文将介绍Ubuntu Server如何通过命令行使用wpa_supplicant连接Wi-Fi 环境 Ubuntu Server 20.04(64位) wpasupplicant 配置 1. 安装 ...

  4. 构建前端第2篇之--ESLint 配置

    张艳涛 写于2021-1-19 报错: http://eslint.org/docs/rules/space-before-function-paren Missing space before fu ...

  5. 浏览器不支持promise的finally

    IE浏览器以及edge浏览器的不支持es6里面promise的finally 解决方法: 1.npm install axios promise.prototype.finally --save 2. ...

  6. Python3中datetime时区转换介绍与踩坑

    最近的项目需要根据用户所属时区制定一些特定策略,学习.应用了若干python3的时区转换相关知识,这里整理一部分记录下来. 下面涉及的几个概念及知识点: GMT时间:Greenwich Mean Ti ...

  7. PHP5.6.6上运行 ecshop 2.7.3常见问题处理

    ecshop在在PHP5.6.6版本以后,有了很多细微的变化.而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,导致用户安装使用过程中错误百出. 整理一下我遇到的问题希望对你们能有些帮组也为了 ...

  8. anyRTC Web SDK 实现音视频呼叫功能

    前言 大家好,今天小编带给大家一个基于 anyRTC Web SDK 实现音视频呼叫的功能(本项目采用vue开发). 前提条件 在开始写代码之前还需要做一些准备工作,如果你之前没有使用过 anyRTC ...

  9. SpringBoot 默认json解析器详解和字段序列化自定义

    前言 在我们开发项目API接口的时候,一些没有数据的字段会默认返回NULL,数字类型也会是NULL,这个时候前端希望字符串能够统一返回空字符,数字默认返回0,那我们就需要自定义json序列化处理 Sp ...

  10. 使用C#winform编写渗透测试工具--SQL注入

    使用C#winform编写渗透测试工具--SQL注入 本篇文章主要介绍使用C#winform编写渗透测试工具,实现SQL注入的功能.使用python编写SQL注入脚本,基于get显错注入的方式进行数据 ...