注:本文从nginx的环境安装,测试反向代理、负载均衡、动静分离、高可用都是亲自试验之后的结果,可用。linux是centos7

1.首先安装 pcre 依赖

下载命令:wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

将下载好的文件 pcre-8.37.tar.gz 放到 usr/src 目录下

解压:tar -xvf pcre-8.37.tar.gz

进入解压好的文件进行配置检查:cd pcre-8.37

检查:./configure

检查时可能报错提示没有 C++编译器,如果可以联网就安装一个:yum install -y gcc gcc-c++

编译和安装:make && make install

检查版本号:pcre-config --version

2.安装其他的依赖

命令:yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

3.安装 nginx

复制到 usr/src 目录下

解压:tar- xvf nginx-1.24.0.tar.gz

进入目录:cd nginx-1.24.0

检查配置:./configure

编译并安装:make && make install

安装成功后在 usr 文件中会多出一个 local/nginx,在 nginx 中有一个 sbin 文件夹,里面有 nginx 启动脚本

4.启动 nginx

进入/usr/local/nginx/sbin 目录,使用./nginx 命令启动

查看 nginx 启动进程:ps -ef | grep nginx

查看 nginx 配置:进入 usr/local/nginx/conf 查看所有文件 ll 打开 nginx.conf 文件:vi nginx.conf

5.防火墙设置

查看防火墙状态:systemctl status firewalld

暂时关闭防火墙:systemctl stop firewalld

永久关闭防火墙:systemctl disable firewalld

打开防火墙:sudo systemctl start firewalld

允许 HTTP 连接: sudo firewall-cmd --zone=public --add-service=http --permanent

允许 HTTPS 连接: sudo firewall-cmd --zone=public --add-service=https --permanent

对外开放端口:firewall-cmd --add-port=8080/tcp --permanent

重新加载:firewall-cmd --reload

查看已经开放的端口:firewall-cmd --list-all

6.nginx 常用操作命令

前提:使用 nginx 操作命令需要先进入到 usr/local/nginx/sbin 目录中

1.查看 nginx 版本号: ./nginx -v

2.关闭 nginx:./nginx -s stop

3.启动命令:./nginx

4.重加载 nginx(修改配置文件以后重新加载文件):./nginx -s reload

5.查看 nginx 启动进程:ps -ef | grep nginx

7.配置文件组成

位置:usr/local/nginx/conf nginx.conf 打开命令:vi nginx.conf

1.全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

比如:worker_processes 1;

这个 nginx 服务器处理并发服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受硬件、软件等设备的制约

2.events 块

events {
worker_connections 1024;
}

主要是 nginx 服务器与用户的网络的连接。上述例子表示每个 work process 支持的最大连接数为 1024.这部分对 nginx 的性能影响较大,在实际中应该灵活配置

3.http 块

nginx 中配置最频繁的地方,可以包括 http 全局块、server 块

8.nginx 配置实例—反向代理

8.1.实现效果

1.1 打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 tomcat 8090 端口页面中

1.2 准备工作

1.安装 nginx

2.安装 tomcat

2.1.将压缩包放在 usr/src 文件夹中

2.2 解压压缩包:tar -xvf apache-tomcat-8.5.96.tar.gz

进入 bin 目录下,执行./startup.sh 启动

查看 tomcat 启动日志:cd …回到 tomcat 目录下,进入 logs 目录,使用 tail -f catalina.out 查看 tomcat 执行日志

3.安装 java 的 jdk

3.1.查看 yum 库中的 JDK 安装包:yum -y list java*

3.2.安装需要版本的 jdk:yun -y install java-1.8.0-openjdk*

3.3.默认安装位置为 /usr/lib/jvm/java-1.8.0-openjdk*/

3.4.查看版本号:java -version

8.2.在电脑 C:\Windows\System32\drivers\etc 修改 hosts 文件,添加 ip 和域名映射(如果直接用 ip 就不要映射)

格式:ip 域名

8.3 在 nginx 中进行请求转发配置(反向代理配置)

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  192.168.101.109;
		charset utf-8;
        location /baidu {
			proxy_pass http://www.baidu.com;
        }
	#第二个以及后面的路由后面必须加/     location后面不能像网上教的那样放~,不知道为啥
		location /tomcat/ {
			proxy_pass http://192.168.101.109:8080/;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

#如果需要监听其他端口可以添加一个server
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}
9.nginx 配置实例—负载均衡

1.在 http 中添加 upstream 内容,myserver 是名称,server 里面 http 后面代理的是 myserver 里面的 ip

http {
    include       mime.types;
    default_type  application/octet-stream;

   upstream myserver{
	server 192.168.101.109:8080;
	server 192.168.101.10:8089;
}

    #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;
server {
        listen       8089;
        server_name  192.168.101.108;

        location  /aa/ {
	proxy_pass http://myserver/;
        }
    }
}

2.nginx 分配策略

2.1.默认是轮询,

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

2.2.weight

weight 代表权重,默认是 1,权重越高被分配的客户端越多。指定轮询几率,weigth 和访问比率成正比,用于后端服务器性能不均的情况。

upstream myserver{
	server 192.168.101.109:8080 weight=1;
	server 192.168.101.10:8089 weight=2; #分配到更多的请求
}

2.3.ip_hash

每个请求按访问 ip 的 hash 结果分配,每个访客固定访问一个后端服务器,可以解决 session 的问题。(用户第一次访问的哪个服务器,后面一直都会是哪个)

upstream myserver{
	ip_hash;
	server 192.168.101.109:8080;
	server 192.168.101.10:8089;
}

2.4.fair(第三方)

按后端服务器响应时间来分配请求,响应时间短的优先分配

upstream myserver{
	server 192.168.101.109:8080;
	server 192.168.101.10:8089;
	fair;
}
10.nginx-配置实例–动静分离

CentOs检查有没有nginx linux查看是否安装了nginx_linux

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量。具体 Expires 定义:是给一个资源设定过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方式非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),设置 3d,表示 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200.

location  /  {
	root /dist;
	try_files $uri $uri/ /index.html; #解决页面刷新404问题
    	index  index.html index.htm;
        }

	location /prod-api/{
		proxy_pass http://192.168.101.10:8080/; # 转发到后端
	}
11.nginx-配置实例–高可用

CentOs检查有没有nginx linux查看是否安装了nginx_linux_02

12.1.配置高可用准备工作

(1)需要两台服务器 192.168.101.108 和 192.168.101.109

(2)在两台服务器安装 nginx

(3)在两台服务器安装 keepalived

(命令:yum install keepalived -y

检查是否安装成功:rpm -q -a keepalived

安装目录/etc/keepalived 配置文件:keepalived.conf)

(4)完成高可用的主从配置

keepalived.conf 配置内容替换内容,位置:/etc/keepalived/keepalived.conf

global_defs {
	notification_email {
		acassen@firewall.loc
		failover@firewall.loc
		sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	smtp_server 192.168.17.129
	smtp_connect_timeout 30
	router_id node1	#服务器的名字
}

vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh"

	interval 2  #(检测脚本执行的间隔,单位秒)

	weight 2 #设置当前服务器的权重
}

vrrp_instance VI_1{
	state BACKUP  #备份服务器上将MASTER 改为 BACKUP
	interface ens33  #网卡
	virtual_router_id 51  #主、备机的virtual_router_id必须相同
	priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
	advert_int 1  #每隔1秒发送一个心跳,检测这个服务器还活着
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.101.70  //VRRP H虚拟地址
	}
}

nginx_check.sh 脚本放置的位置/usr/local/src/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

(5)重新启动 nginx

(6)启动 keepalived:systemctl start keepalived.service

(7)查看启动进程:ps -ef | grep keepalived

测试:浏览器输入:192.168.101.70 即可进入主 nginx,关闭主 nginx,备用 nginx 开始工作(可添加对应路由进行跳转,例如:http://192.168.101.70/tomcat/

12.nginx 工作原理

1.nginx 启动之后分两块:master 进程和 worker 进程,worker 可以有多个

CentOs检查有没有nginx linux查看是否安装了nginx_服务器_03

2.master 和 worker 工作原理

CentOs检查有没有nginx linux查看是否安装了nginx_nginx_04

3.一个 master 和多个 worker 的好处

(1)可以使用 nginx -s reload 热部署,利于 nginx 进行热部署操作。

比如上面有 4 个 worker,其中一个正在处理请求,此时进行配置文件重新加载,只有 3 个没有任务的加载,再过来的新请求执行的就是新的配置文件,等工作的 worker 处理完需求以后也会加载新的配置文件

(2)每个 worker 是独立的进程,如果有其中的一个 worker 出现问题,其他 worker 独立的,继续进行争抢,实现请求过程,不会造成服务中断。

(3)worker 的最大数量,最好是 cpu 的数量,即 4 核 4 个 worker

4.连接数 worker_connection

第一个:发送一个请求,占用了 worker 几个连接数

答:两个或者 4 个。当请求的是静态资源的时候是两个,如果需要请求数据库就是 4 个

CentOs检查有没有nginx linux查看是否安装了nginx_服务器_05

第二个:nginx 支持的最大并发数

nginx 有一个 master,有 4 个 worker,每个 worker 支持的最大连接数是 1024,支持的最大并发数是多少?

答:普通的静态访问最大并发数是:worker_connections*worker 数/2

如果是反向代理:worker_connections*worker 数/4