nginx

  • Post author:
  • Post category:其他




nginx

https://www.bilibili.com/video/BV1zJ411w7SV?p=1

1、nginx是一个HTTP和反向代理服务器,性能高,能承受五万个并发连接数

2、功能:处理静态文件、反向代理、负载均衡、动静分离、高可用

3、正向代理(用户可以感知):在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问

4、反向代理(用户无感知):客户端(浏览器)将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址

5、负载均衡

请求连接过多,单台服务器解决不了,增加服务器数量,将请求分发到各个服务器上

6、动静分离

为加快网站的解析速度,将动态页面和静态页面由不同服务器来解析,加快解析速度,降低原来单个服务器压力

客户端————————nginx————————服务器tomcat(部署动态资源jsp、servlet)

—————————静态资源服务器(放静态资源)

7、nginx安装

相关依赖:pcre、openssl、zlib

(1)安装pcre依赖

wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

把安装压缩文件放到/usr/src目录下

解压压缩文件 tar -zxvf 压缩文件

进入解压之后目录,执行./configure(编译前检查操作)

make && make install 编译并且安装

pcre-config –version 查看版本号

(2)安装openssl、zlib

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

(3)安装nginx

将安装包放在/usr/src下

解压压缩包 tar -zxvf

进入解压后的文件,编译前检查操作 ./configure

编译并且安装 make && make install

8、nginx启动

cd /usr/local/nginx/sbin 里面有nginx启动脚本

./nginx 启动nginx

ps -ef | grep nginx 查看进程

9、nginx配置查看

vim /usr/local/nginx/conf/nginx.conf

server{


listen 80; //nginx监听端口是80,浏览器通过IP:端口可以访问到nginx

}

10、linux防火墙默认拦截80端口,需要放通

查看开放的端口号

firewall-cmd –list-all

设置开放的端口号

firewall-cmd –add-service=http -permanent

sudo firewall-cmd –add-port=80/tcp –permanent

重启防火墙

firewall-cmd –reload

11、nginx操作常用命令

使用nginx操作命令前提条件:必须进入nginx的目录

cd /usr/local/nginx/sbin

查看nginx的版本号

./nginx -v

关闭nginx

./nginx -s stop

启动nginx

./nginx

查看nginx进程

ps -ef | grep nginx

重新加载nginx(一般是修改配置文件后重新加载)

./nginx -s reload

12、nginx配置文件

配置文件位置

/usr/local/nginx/conf/nginx.conf

配置文件组成

全局块、events块、http块

全局块:配置文件开始到events块之间,用于设置影响nginx整体运行的配置指令

worker_processes 1; //值越大,可以支持的并发处理量也就越多

events块:用于设置影响nginx服务器与用户的网络连接

worker_connections 1024; //支持的最大连接数

http块:nginx服务器配置中最频繁的部分

http全局块

server块:

全局server块

location块

13、nginx反向代理配置实例一

实现效果:

打开浏览器,输入地址www.123.cm,跳转到linux系统tomcat主页面中

准备工作:

(1)、再linux中安装tomcat,使用默认端口8080

tomcat安装文件放到linux中,解压

进入tomcat的bin目录中,./startup.sh启动tomcat服务器

(2)、对外开放访问的端口(nginx80/真实服务器端口都要放通)

firewall-cmd –add-port=8080/tcp –permanent

firewall-cmd –reload

firewall-cmd –list-all

(3)、在windows系统中通过浏览器访问tomcat服务器

访问工程分析:

windows浏览器输入域名后,解析到nginx反向代理服务器(IP:80端口),再由nginx跳转到tomcat服务器(IP:8080端口)

具体配置:

(1)在windows系统的host文件进行域名和ip对应关系的配置

c:\windows\system32\drivers\etc\HOSTS

10.128.17.91 www.switch.com

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

server {


listen 80;

server_name 10.128.17.91;(nginx服务器地址)

location / {


root html;

proxy_pass http://127.0.0.1:8000;(转发到真正服务器)

index index.html index.htm;

}

}



14、nginx反向代理配置实例二

实现效果:

nginx监听端口9001,使用nginx反向代理,根据访问的路径跳转到不同的端口服务中

访问http://10.128.17.91:9001/edu/ 跳转到127.0.01:8080

访问http://10.128.17.91:9001/vod/ 跳转到127.0.01:8081

准备工作:

(1)建两个tomcat服务器,分别监听不同端口

修改tomcat配置server.xml

(2)创建文件夹和测试页面 具体配置: (1)对nginx配置文件进行反向代理配置 server { listen 9001; server_name 10.128.17.91;(nginx服务器地址)

location ~ /edu/ {  //~表示正则表达式,如果匹配有edu就转发到下面proxy
	porxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
	proxy_pass http://127.0.0.1:8081;
}

}

(2)开放对外访问的端口号 9001 8080 8081

(3)重启nginx

15、nginx负载均衡配置实例

实现效果:

在浏览器输入地址http://10.128.17.91/edu/a.html,负载均衡效果,平均8080和8081端口中

准备工作:

(1)、准备两台tomcat服务器,一台8080,一台8081

(2)、在两台tomcat里面webapps目录中,创建edu文件夹,在edu文件夹中创建页面a.html,用于测试

(3)、修改nginx负载均衡配置

http {


upstream myserver { //给负载集群起个名字myserver

server 10.128.17.91:8080; //负载均衡服务器列表

server 10.128.17.91:8081;

}

server {


listen 80;

server_name 10.128.17.91; //nginx服务器IP

location / {


proxy_pass http://myserver; //转发到起的服务集群名字

root html;

index index.html index.htm;

}

}

}

(4)、nginx负载均衡分配策略

轮询(默认)

weight(权重): //weight值越大,分配的客户端越多

upstream myserver {


server 10.128.17.91:8080 weight = 5;

server 10.128.17.91:8081 weight = 10;

}

ip_hash: //每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

upstream myserver {


ip_hash;

server 10.128.17.91:8080;

server 10.128.17.91:8081;

}

fair(第三方): //根据后端服务器的响应时间来分配请求,响应时间短的优先分配

upstream myserver {


server 10.128.17.91:8080;

server 10.128.17.91:8081;

fair;

}

16、nginx动静分离配置实例

动态请求与静态请求区别:有数据库交互的为动态请求

动静分离方案一(主流):

客户端(浏览器)发送请求(动态请求、静态请求)到nginx,nginx将动态请求转发到tomcat服务器,由tomcat服务器去数据库获取数据;nginx将静态请求发送到静态资源服务器(html、css、image等)

在这里插入图片描述

动静分离方案二:

动态与静态文件混合在一起发布,通过nginx来分开

方案一准备工作:

(1)、在linux系统中准备静态资源,用于进行访问

cd /

mkdir data

cd data

mkdir www image

在www中放置html文件、在image中放置图片

nginx具体配置:

server {


listen 80;

server_name 10.128.17.91;

location /www/ {


root /data/; //文件所在目录

index index.html index.htm;

}

location /image/ {


root /data/;

autoindex on; //列出反目录,作用不是很大,浏览器输入地址http://10.128.17.91/image/会显示目录下所有的文件

}

}

重启nginx

最终测试

(1)浏览器中输入地址

http://10.128.17.91/image/01.jpg

(2)浏览器中输入地址

http://10.128.17.91/www/a.html

17、nginx配置高可用集群

在这里插入图片描述

keepalived是一款软件,用于监控MASTER是否存活

(1)需要两台nginx服务器

(2)需要keepalived

(3)需要虚拟ip

18、配置高可用准备工作

(1)需要两台服务器192.168.17.129和192.168.17.131

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

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

yum -y install keepalived

rpm -q -a keepalived //查看是否安装成功

vim /etc/keepalived/keepalived.conf //配置文件

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

a、修改/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_connecti_timeout 30

router_id LVS_DEVEL #访问到主机,主机的名字(也可以是IP)可以通过cat /etc/hosts查看127.0.0.1对应的主机名字

}

vrrp_script chk_http_port {


script “/usr/local/src/nginx_check.sh”

interval 2 #(检测脚本执行的间隔)

weight -20 #权重,当脚本成立,就将当前主机权重降低20

}

vrrp_instance VI_1 {


state BACKUP # 备份服务器上将master改为backup

interface ens33 # 网卡名字

virtual_router_id 51 # 主、备机的virtual_router_id必须相同

priority 90 # 主、备机取不同的优先级,主机值较大,备机值较小

advert_int 1 #时间间隔,每隔多长时间发送一次心跳,检测服务器是否还活着,默认美隔一秒发送一次心跳

authentication {


auth_type PASS #校验方式是密码

auth_pass 1111 #密码是1111

}

virtual_ipaddress {


192.168.17.50 # VRRP H虚拟地址

}

}

b、在/usr/local/src添加检测脚本(添加nginx是否存活脚本)

#!/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和keepalived启动

./nginx(启动nginx)

systemctl start keepalived.service(启动keepalived)

ps -ef | grep keepalived(查看进程)

(6)最终测试

a、在浏览器地址栏输入虚拟ip地址192.168.17.50,测试能否访问到nginx

ip a 查看主从服务器的网卡信息可以看到绑定了虚拟IP信息

b、把主服务器(192.168.17.129)nginx和keepalived停止,再输入192.168.17.50

systemctl stop keepalived.service

./nginx -s top

ps -ef | grep keepalived

19、nginx原理

(1)master和worker

ps -ef | grep nginx 查看进程,能看到master和worker进程

master进程将工作分配给worker

(2)worker如何工作的

争抢master分配的工作

(3)一个master和多个worker有好处

a、可以使用nginx -s reload热部署,利用nginx进行热部署

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

(4)设置多少个worker最合适

worker数和服务器的cpu数相等最为适宜的,设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗

(5)、连接数worker connection

问题:发送请求,占用了worker几个连接数?

答案:2或者4个(2个是访问静态资源来回,4个是访问动态资源)

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

答案:访问静态资源——1024

4/2

访问动态资源——1024

4/4



版权声明:本文为Mr_XiangShuai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。