nginx配置实例

注:没事测试负载均衡都要重启tomcat

反向代理1

1.实现效果

打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页

2.准备工作

在liunx系统安装tomcat

使用默认端口 8080

tomcat 安装文件放到 liunx 系统中,解压

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

具体操作如下

#下载tomcat压缩包 用filezilla 进行发送到linux中
#我这里是 安装到/usr/src 文件下
进入linux系统后
[root@localhost ~]# cd /usr/src
#进行解压
[root@localhost src]# tar -xvf apache-tomcat-9.0.36.tar.gz
#将apache-tomcat-9.0.36改为tomcat8080
#可使用filezilla 也可以使 一下命令
[root@localhost ~]# mv /usr/src/apache-tomcat-9.0.36 /usr/src/tomcat8080
#进入apache-tomcat-9.0.3/bin中
[root@localhost ~]# cd /usr/src/tomcat8080/bin
#启动tomcat
[root@localhost ~]# /usr/src/tomcat8080/bin/startup.sh
#关闭tomcat
[root@localhost ~]# /usr/src/tomcat8080/bin/startdown.sh
#查看日志
[root@localhost ~]# cd /usr/src/tomcat8080/logs/
[root@localhost logs]# tail -f catalina.out
#关闭tomcat端口端口号
[root@localhost tomcat:8081]# ps -ef | grep tomcat
root       8891      1  0 16:18 pts/0    00:00:51 /usr/bin/java -Djava.util.logging.config.file=/usr/src/tomcat8080/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/src/tomcat8080/bin/bootstrap.jar:/usr/src/tomcat8080/bin/tomcat-juli.jar -Dcatalina.base=/usr/src/tomcat8080 -Dcatalina.home=/usr/src/tomcat8080 -Djava.io.tmpdir=/usr/src/tomcat8080/temp org.apache.catalina.startup.Bootstrap start
root      11218   6788  0 18:46 pts/0    00:00:00 grep --color=auto tomcat
#根据id关闭
[root@localhost tomcat:8081]# kill -9 8891
[root@localhost tomcat:8081]# ps -ef | grep tomcat
root      11234   6788  0 18:47 pts/0    00:00:00 grep --color=auto tomcat

查看已经开放的端口号

#这是关闭状态的防火墙
[root@localhost ~]# firewall-cmd --list-all
FirewallD is not running
#开启防火墙
[root@localhost ~]# systemctl start firewalld
#防火墙
[root@localhost ~]# systemctl stop firewalld
#查看所有端口
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client ssh
  ports: 80/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
#没有8080端口 请添加端口
[root@localhost ~]# firewall-cmd --add-port=8080/tcp --permanent
#重启防火墙
[root@localhost ~]# firewall-cmd --reload

在 windows 系统中通过浏览器访问 tomcat 服务器

nginx配置实例_第1张图片

3.访问过程分析

4.具体配置

**第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置 **

具体位置如下

具体操作如下

nginx配置实例_第2张图片

**第二步 在 nginx 进行请求转发的配置(反向代理配置) **

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vi nginx.conf

nginx配置实例_第3张图片

重启nginx一定要重启

[root@localhost conf]# cd  /usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s reload

5.最终测试

nginx配置实例_第4张图片

反向代理2

1、实现效果

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

nginx 监听端口为 9001,

#没有8080端口 请添加端口
[root@localhost ~]# firewall-cmd --add-port=9001/tcp --permanent
#重启防火墙
[root@localhost ~]# firewall-cmd --reload
#查看所有端口
[root@localhost ~]# firewall-cmd --list-all

访问 http://192.168.61.132:9001/edu/ 直接跳转到 127.0.0.1:8081

访问 http://192.168.61.132:9001/vod/ 直接跳转到 127.0.0.1:8082

2、准备工作

(1)准备两个 tomcat 服务器,一个 8081 端口,一个 8082 端口

nginx配置实例_第5张图片

修改tomcat端口号(文件名不能有:)

#将名字更改为tomcat8081 和tomcat8082
[root@localhost ~]# mv /usr/src/apache-tomcat-9.0.36 /usr/src/tomcat8080
[root@localhost ~]# cd /usr/src/tomcat8081/conf
[root@localhost conf]# vi server.xml
修改3个地方的端口 只要不和8082端口一样即可
#1

  
#2

#3

    
               
[root@localhost ~]# cd /usr/src/tomcat8082/conf
[root@localhost conf]# vi server.xml
#1

  
#2

#3
 
    

启动tomcat

[root@localhost /]# /usr/src/tomcat8081/bin/startup.sh
[root@localhost /]# /usr/src/tomcat8082/bin/startup.sh

关闭tomcat

[root@localhost /]# /usr/src/tomcat8081/bin/shutdown.sh
[root@localhost /]# /usr/src/tomcat8082/bin/shutdown.sh

添加端口号

[root@localhost bin]# firewall-cmd --add-port=8081/tcp --permanent
success
[root@localhost bin]# firewall-cmd --add-port=8082/tcp --permanent
success
[root@localhost bin]# firewall-cmd --reload
success

http://192.168.61.132:8081/ http://192.168.61.132:8082/ 连接即可

(2)创建文件夹和测试页面

注:其中一个 理解即可

端口8081的为webapps/edu/a.html | 端口8082的为webapps/vod/a.html

nginx配置实例_第6张图片

测试页面

nginx配置实例_第7张图片

3、具体配置

(1)找到 nginx 配置文件,进行反向代理配置

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vi nginx.conf

添加如下操作 具体如何添加 (改注释也可以 自己添加也可以 但是最好还是修改注释)

nginx配置实例_第8张图片

 server {
        listen       9001;
        server_name  192.168.61.132;

        location ~ /edu/ {
            proxy_pass http://127.0.0.1:8081;
        }
         location ~ /vod/ {
            proxy_pass http://127.0.0.1:8082;
        }
    }

重启nginx

[root@localhost conf]# cd /usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s reload

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

#查看端口号 是否都有 如果没有请添加
[root@localhost conf]# firewall-cmd --list-all
#添加端口
[root@localhost ~]# firewall-cmd --add-port=8080/tcp --permanent
#重启防火墙
[root@localhost ~]# firewall-cmd --reload

4、最终测试

img

负载均衡

1、实现效果

(1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8081

和 8082端口中

2、准备工作

注:以下操作均可以模仿反向代理2中准备工作

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

(2)在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建

页面 a.html,用于测试

3、在 nginx 的配置文件中进行负载均衡的配置

注:把先前使用的反向代理给注释了 如果使用的是同一个nginx.conf请注释

img

  #gzip  on;
    upstream myserver{
        server 192.168.61.132:8081;
        server 192.168.61.132:8082;
    }
    server {
        listen       80;
        server_name  192.168.61.132;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            proxy_pass http://myserver;
            index  index.html index.htm;
        }

输入 http://192.168.61.132/edu/a.html 即可查询 刷新便会在2个html中来回转换 这就是负载均衡

4、nginx 分配服务器策略

第一种 轮询(默认)

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

第二种 weight

weight 代表权重默认为 1,权重越高被分配的客户端越多

img

第三种 ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器

img

第四种 fair(第三方)

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

img

动静分离

1、什么是动静分离

img

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和

静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx

处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,

一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;

另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏

览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源

设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,

所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,

不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一

个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,

如果有修改,则直接从服务器重新下载,返回状态码 200。

2、准备工作

在 liunx 系统中准备静态资源,用于进行访问

img

内容大致为 www中有a.html image中有1.jpg

3、具体配置

在 nginx 配置文件中进行配置

#动态
location /www/ {
     root   /data/;
     index  index.html index.htm;
}
#静态
location /image/ {
    root   /data/;
    autoindex  on;
}

img

4、最终测试

(1)浏览器中输入地址

http://192.168.61.132/image/1.jpg

nginx配置实例_第9张图片

因为配置文件 autoindex on

img

重点是添加 location,

最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功,之需要删除后端 tomcat

服务器上的某个静态文件,查看是否能访问,如果可以访问说明静态资源 nginx 直接返回

了,不走后端 tomcat 服务器

nginx原理

1、mater 和 worker

img

img

2、worker 如何进行工作的

3、一个 master 和多个 woker 有好处

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

(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,

继续进行争抢,实现请求过程,不会造成服务中断

4、设置多少个 woker 合适

worker 数和服务器的 cpu 数相等是最为适宜的

5、连接数 worker_connection

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

答案:2 或者 4 个

img

第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的

最大并发数是多少?

l 普通的静态访问最大并发数是: worker_connections * worker_processes /2,

l 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *

worker_processes/4。

nginx 搭建高可用集群

Keepalived+Nginx 高可用集群(主从模式)

一、什么是主从模式

nginx配置实例_第10张图片

二、准备工作

  1. 需要2台服务器 192.168.61.133(主) 192.168.61.134(从) 一主一从

  2. 2台服务器中都要安装 nginx和keepalived

    安装nginx省略

    安装keepalived

    #在usr/src中下载安装包
    cd /usr/src/
    #安装keepalived
    yum install keepalived -y
    #查看是否安装
    rpm -q -a keeplived
    #keepalived的配置文件目录
    cd /etc/keepalived
    #修改配置文件
    vi keepalived.conf
    

三、配置文件

主虚拟机

1.修改keepalived.conf

global_defs { 
   notification_email { 
     [email protected] 
     [email protected] 
     [email protected] 
   } 
   notification_email_from [email protected] 
   smtp_server 192.168.61.133
   smtp_connect_timeout 30 
   router_id LVS_DEVEL 
} 

vrrp_script chk_http_port { 
  
   script "/usr/local/src/nginx_check.sh" 
   interval 2      #(检测脚本执行的间隔) 
   weight 2 
  
} 
  
vrrp_instance VI_1 {     
	state MASTER   # 备份服务器上将 MASTER 改为 BACKUP       
	interface ens33  //网卡     
	virtual_router_id 51   # 主、备机的 virtual_router_id 必须相同    
	priority 100     # 主、备机取不同的优先级,主机值较大,备份机值较小 
    advert_int 1 
	authentication { 
        auth_type PASS 
        auth_pass 1111 
    } 
    virtual_ipaddress { #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
		192.168.61.50
    } 
} 

2.在/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 

从虚拟机

1.只修改keepalived.conf

global_defs { 
   notification_email { 
     [email protected] 
     [email protected] 
     [email protected] 
   } 
   notification_email_from [email protected] 
   smtp_server 192.168.61.134
   smtp_connect_timeout 30 
   router_id LVS_DEVEL 
} 
  
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 
	authentication { 
        auth_type PASS 
        auth_pass 1111 
    } 
    virtual_ipaddress {       
		192.168.61.50
    } 
} 

2.在/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 

启动nginx和keepalived(2台都要启动)

#启动nginx
/usr/local/nginx/sbin/nginx
#关闭nginx
/usr/local/nginx/sbin/nginx -s stop
#启动keepalived
systemctl start keepalived.service 
#查看进程
ps -ef | grep keepalived

四、最终测试

      auth_type PASS 
        auth_pass 1111 
    } 
    virtual_ipaddress {       
		192.168.61.50
    } 
} 

2.在/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 

启动nginx和keepalived(2台都要启动)

#启动nginx
/usr/local/nginx/sbin/nginx
#关闭nginx
/usr/local/nginx/sbin/nginx -s stop
#启动keepalived
systemctl start keepalived.service 
#查看进程
ps -ef | grep keepalived

五、最终测试

在浏览器地址栏输入 虚拟ip 地址 192.168.61.50

你可能感兴趣的:(nginx,nginx)