前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx4层与7层配置详解

Nginx4层与7层配置详解

原创
作者头像
用户11167097
修改2024-07-15 15:22:46
140
修改2024-07-15 15:22:46
举报
文章被收录于专栏:负载均衡

1. Nginx概述

Nginx是一款轻量级、高性能的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,nginx的并发能力在同类型的网页服务器中表现较好。

nginx概述
nginx概述

Nginx 可以在大多数 Unix Linux OS 上编译运行,并有 Windows 移植版。 Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:

在连接高并发的情况下,Nginx是Apache服务不错的替代品。能够支持高达 50,000 个并发连接数的响应。

2. 正向代理与反向代理概述

2.1 正向代理

正向代理代理的是客户端,需要在客户端配置,我们访问的还是真实的服务器地址

2.2 反向代理

反向代理代理的是服务器端,客户端不需要任何配置,客户端只需要将请求发送给反向代理服务器即可,代理服务器将请求分发给真实的服务器,获取数据后将数据转发给你。隐藏了真实服务器,有点像网关。

2.3 区别与总结

正向代理与反向代理的区别

最根本的区别是代理的对象不同:

l 正向代理代理的是客户端,需要为每一个客户端都做一个代理服务器,客户端访问的路径是目标服务器。

l 反向代理代理的是真实服务器,客户端不需要做任何的配置,访问的路径是代理服务器,由代理服务器将请求转发到真实服务器。

3. Nginx 配置文件 (nginx.conf)

3.1 概述

默认在Linux上安装的Nginx,配置文件在安装的nginx目录下的conf目录下,名字叫做nginx.conf。

nginx.conf 主要由三部分组成

  • 全局块,
  • events 块
  • http 块

3.2 配置文件结构

nginx文件配置架构
nginx文件配置架构

3.3 真实配置文件概览

代码语言:javascript

代码语言:javascript
复制
代码语言:javascript
解释
# 全局快
------------------------------------------------------------------------------
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

------------------------------------------------------------------------------

# events块
events {
    worker_connections  1024;
}

# http块 
http {
------------------------------------------------------------------------------# http全局块
    include       mime.types;
    default_type  application/octet-stream;

    #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块
server {
# server全局块
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

# location块
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
}
 
# 可以配置多个server块 

}

3.3.1 全局块

就是配置文件从头开始到 events 块之间的内容,主要设置的是影响nginx服务器整体运行的配置指令比如 worker_process, 值越大,可以支持的并发处理量也越多,但是还是和服务器的硬件相关

3.3.2 events 块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

上述例子就表示每个 work process 支持的最大连接数为 1024. 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置

3.3.3 http 块

包括 http 全局块,以及多个 server 块

3.3.4 http 全局块

http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

3.3.5 server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机

而每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。

3.3.6 server 全局块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

代码语言:javascript
复制
解释
#这一行表示这个server块监听的端口是80,只要有请求访问了80端口,此server块就处理请求
listen       80;
#  表示这个server块代表的虚拟主机的名字
server_name  localhost;

3.3.7 location 块

一个 server 块可以配置多个 location 块。

主要作用是根据请求地址路径的匹配,匹配成功进行特定的处理

这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

代码语言:javascript

代码语言:javascript
复制
# 表示如果请求路径是/就是用这个location块进行处理
location / {
            root   html;
            index  index.html index.htm;
        }

3.4 Nginx常用命令

1.cd /usr/local/nginx/sbin/

2.·/nginx 启动

3../nginx -s stop 停止

4../nginx-s quit 安全退出

./nginx -s reload 重新加载配置文件

6.ps aux grep nginx 查看nginx进程

3.5 客户端测试脚本

在linux系统上编辑脚本。

vim ./sum/sh

代码语言:shell
复制
#!/bin/bash 

SERVER1_COUNT=0

SERVER2_COUNT=0

SERVER3_COUNT=0 

for i in {1..10}; do 

 RESPONSE=$(curl -s https://abc.web.com/) 

 if [ $RESPONSE == web01 ]; then 

 SERVER1_COUNT=$((SERVER1_COUNT + 1)) 

 elif [ $RESPONSE == web02 ]; then 

 SERVER2_COUNT=$((SERVER2_COUNT + 1)) 

 elif [ $RESPONSE == web03 ]; then 

 SERVER3_COUNT=$((SERVER3_COUNT + 1)) 

 fi

done 

echo "Server 1 received: $SERVER1_COUNT requests"

echo "Server 2 received: $SERVER2_COUNT requests"

echo "Server 3 received: $SERVER3_COUNT requests"

3.6 负载均衡算法

轮询(Round Robin): 这是默认的负载均衡算法。案例如下:

代码语言:javascript
复制
http {

 upstream backend {

 server 192.168.1.101:8080;

 server 192.168.1.102:8080;

 server 192.168.1.103:8080;

 }

 server {

 listen 80;

 location / {

 proxy_pass http://backend;

 }

 }

}

加权轮询(Weighted Round Robin): Nginx根据每个后端服务器的配置权重将请求分配给服务器。

代码语言:javascript
复制
http {

 upstream backend {

 server 192.168.1.101:8080 weight=3;

 server 192.168.1.102:8080 weight=2;

 server 192.168.1.103:8080 weight=1;

 }

 server {

 listen 80;

 location / {

 proxy_pass http://backend;

 }

 }

}

最少连接(Least Connections):Nginx会统计每个后端服务器当前的活动连接数,并将请求分配给活动连接数最少的服务器,以实现负载均衡。

代码语言:javascript
复制
http {

 upstream backend {

 least_conn;

 server 192.168.1.101:8080;

 server 192.168.1.102:8080;

 server 192.168.1.103:8080;

 }

 server {

 listen 80;

 location / {

 proxy_pass http://backend;

 }

 }

}

3.7 整体测试拓扑

整体测试图
整体测试图

3.7.1 Nginx4层负载测试

Nginx4层负载测试
Nginx4层负载测试

1、根据拓扑图,将节点中的IP配置好。

2、配置Nginx: 配置为支持TCP代理,设置TCP代理的相关配置,包括upstream服务器和监听端口等。

3、在安装web服务器中安装httpd服务,并配置网页的内容(web01、web02、web03)

4、准备测试环境:准备至少四个服务器,一个作为客户端,一个作为反向代理服务器,三个作为目标服务器。确保服务器之间可以相互访问,并且nginx服务器能够访问到目标服务器。

5、创建测试用例:在客户端服务器上,使用for循环脚本执行连接到nginx服务器的代理端口。验证连接是否成功建立以及数据是否正确传输。

3.6.2.1 Nginx侧配置过程

在官网下载nginx安装包,上传到linux进行安装。或者直接配置本地yum源,执行yum install -y nginx进行nginx服务的安装。

进入/etc/nginx/nginx.conf进行nginx文件的配置。配置的命令如下:

代码语言:javascript
复制
worker_processes 1; #开启一个业务进程,默认为1。

events {

 worker_connections 1024; ### nginx处理的并发数。

}

###定义TCP模块

stream { 

 ###对接多个后端负载的服务器/业务系统。

 upstream backendServer {

 ### 定义TCP模块上游服务器

 server 172.16.100.2:80; ###后端服务器的IP + 端口

 server 172.16.100.11:80;

 server 172.16.100.17:80;

 }

 ###定义服务器模块。

 server {

  listen 80; ###本次代理服务监听的端口

 ### 反向代理upstream

  proxy_pass backendServer; ###加载后端服务器模块

 }

}

注释:目前centos 7.9版本默认安装版本是1.20.1,但不支持steam模块,我们想做TCP转发,就实现不了。需要做以下配置。

目前centos 7.9版本默认安装版本是1.20.1,但不支持steam模块,我们想做mqtt转发,就实现不了。

1、备份原有的nginx

代码语言:linux
复制
mv /usr/sbin/nginx /usr/sbin/nginx.bak

cp -r /etc/nginx /etc/nginx.bak

2、下载nginx

wget http://nginx.org/download/nginx-1.20.1.tar.gz && tar xf nginx-1.20.1.tar.gz

3、安装依赖

代码语言:linux
复制
yum -y install libxml2 libxml2-dev libxslt-devel gd-devel perl-devel perl-ExtUtils-Embed GeoIP GeoIP-devel GeoIP-data

yum -y install --skip-broken gcc gcc-c++ autoconf automake gperftools

yum -y install --skip-broken zlib zlib-devel openssl-devel pcre-devel

4、编译

代码语言:linux
复制
cd nginx-1.20.1/

./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client\_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google\_perftools\_module --with-http\_addition\_module --with-http\_auth\_request\_module --with-http\_dav\_module --with-http\_degradation\_module --with-http\_flv\_module --with-http\_gunzip\_module --with-http\_gzip\_static\_module --with-http\_image\_filter\_module=dynamic --with-http\_mp4\_module --with-http\_perl\_module=dynamic --with-http\_random\_index\_module --with-http\_realip\_module --with-http\_secure\_link\_module --with-http\_slice\_module --with-http\_ssl\_module --with-http\_stub\_status\_module --with-http\_sub\_module --with-http\_v2\_module --with-http\_xslt\_module=dynamic --with-mail=dynamic --with-mail\_ssl\_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream\_ssl\_module --with-stream\_ssl\_preread\_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D\_FORTIFY\_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' --with-stream

5、生成nginx二进制文件

代码语言:Linux
复制
make -j2 # 不要输入make install ,会替换现有nginx,造成事故

直接在当前的文件下,输入上面的命令

6、测试,并把新的编译好的文件,复原到原来的目录

查看编译后的版本

代码语言:linux
复制
./nginx -v

./nginx -t

把编译好的文件,移植到原来安装的目录上。

代码语言:linux
复制
cd /tmp/nginx-1.20.1

cp objs/nginx /usr/sbin/

到/usb/sbin目录看看,备份的文件是nginx.bak,新移动过去的文件是nginx

现在可以在任何一个位置使用nginx命令查看版本,和检测语法。

3.6.2.2 客户端侧配置过程

根据拓扑图,把web服务器对应的节点的IP进行配置。

3.6.2.3 Web服务器配置过程

yum install -y httpd

vim /var/www/html/index.html

输入web01,接下来:x,保存。其他两台以此类推。

systemctl start httpd

systemctl enable httpd

systemctl status httpd ##查看服务状态

3.6.2.4 在客户端执行测试访问

在客户端中访问反向代理节点172.16.100.10。由于在nginx设置监听端口为80,默认访问的端口为80。http服务默认执向80端口。

执行 curl http://172.16.100.10

依次访问web01、web02、web03。

3.7.2 Nginx7层http负载测试

1、根据拓扑图,将节点中的IP配置好。

2、配置Nginx: 配置服务器和监听端口等。

3、在安装web服务器中安装httpd服务,并配置网页的内容(web01、web02、web03)

4、准备测试环境:准备至少四个服务器,一个作为客户端,一个作为反向代理服务器,三个作为目标服务器。确保服务器之间可以相互访问,并且nginx服务器能够访问到目标服务器。

5、创建测试用例:在客户端服务器上,使用for循环脚本执行连接到nginx服务器的代理端口。验证连接是否成功建立以及数据是否正确传输。

3.6.2.1 Nginx侧配置过程
代码语言:JavaScript
复制
worker_processes 1; ###开启一个业务进程,默认为1。

events {

 worker_connections 1024; ### nginx处理的并发数。

}

###定义http模块

http{

 ###对接多个后端负载的服务器/业务系统。

 upstream backendServer {

定义http模块上游服务器,以及相关的权重;
  server tweb01.com weight=3;

  server tweb02.com weight=2;

  server tweb03.com weight=1;

 }

 ###定义服务器模块。

 server {

  listen 80; ###本nginx代理服务监听的端口

  server_name abc.web.com; ###本nginx代理自我解析的域名

 location / {

  proxy_pass http://backendserver; #本次代理服务映射的后端服务器

  proxy_set_header Host $host; #用于获取nginx服务器的ip信息,说明这个流量是哪个nginx服务器转发的

  proxy_set_header X-Real-IP $remote_addr; #将客户端的真实IP地址传递给后端服务器,获取请求真实来源。

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #显示请求的源IP地址列表

  proxy_set_header X-Forwarded-Proto $scheme; #传递客户端请求的协议(HTTP或HTTPS)

  }

  }

 }

将nginx服务器中/etc/hosts文件中加入这行。

代码语言:linux
复制
  172.16.100.2 tweb01.com

  172.16.100.2 tweb02.com

  172.16.100.2 tweb03.com

  172.16.100.10 abc.web.com
3.6.2.2 客户端侧配置过程

根据拓扑图,把web服务器对应的节点的IP进行配置。

将客户端中/etc/hosts文件中加入这行。

vim /etc/hosts

代码语言:linux
复制
  172.16.100.10 abc.web.com

在linux系统上编辑脚本。

vim ./sum/sh

代码语言:shell
复制
#!/bin/bash 

SERVER1_COUNT=0

SERVER2_COUNT=0

SERVER3_COUNT=0 

for i in {1..10}; do 

 RESPONSE=$(curl -s https://abc.web.com/) 

 if [ $RESPONSE == web01 ]; then 

 SERVER1_COUNT=$((SERVER1_COUNT + 1)) 

 elif [ $RESPONSE == web02 ]; then 

 SERVER2_COUNT=$((SERVER2_COUNT + 1)) 

 elif [ $RESPONSE == web03 ]; then 

 SERVER3_COUNT=$((SERVER3_COUNT + 1)) 

 fi

done 

echo "Server 1 received: $SERVER1_COUNT requests"

echo "Server 2 received: $SERVER2_COUNT requests"

echo "Server 3 received: $SERVER3_COUNT requests"
3.6.2.3 Web服务器配置过程

yum install -y httpd

vim /var/www/html/index.html

输入web01,接下来:x,保存。其他两台以此类推。

systemctl start httpd

systemctl enable httpd

systemctl status httpd ##查看服务状态

3.6.2.4 在客户端执行测试访问

执行sh sum.sh,查看统计次数。

3.7.3 Nginx7层https负载测试

Nginx7层https负载
Nginx7层https负载

1、根据拓扑图,将节点中的IP配置好。

2、配置Nginx: 配置服务器和监听端口等。

3、在安装web服务器中安装httpd服务,并配置网页的内容(web01、web02、web03)

4、准备测试环境:准备至少四个服务器,一个作为客户端,一个作为代理服务器,两个作为目标服务器。确保服务器之间可以相互访问,并且nginx服务器能够访问到目标服务器。

5、创建测试用例:在客户端服务器上,使用for循环脚本执行连接到nginx服务器的代理端口。验证连接是否成功建立以及数据是否正确传输。

3.6.3.1 Nginx侧配置过程
代码语言:Javascript
复制
worker_processes 1; ###开启一个业务进程,默认为1。

events {

 worker_connections 1024; ### nginx处理的并发数。

}

###定义http模块

http {

 ###对接多个后端负载的服务器/业务系统。

 upstream backendServer {

 ### 定义http模块上游服务器

 server tweb01.com:80 weight=3;

 server tweb02.com:80 weight=2;

 server tweb03.com:80 weight=1;

 }

 ###定义服务器模块。

 server {

  listen 443 ssl; #本次代理服务监听的端口

  server_name abc.web.com; #本nginx代理自我解析的域名

 location / {

  ssl_certificate /etc/nginx/server.crt; #SSL证书和私钥的路径。

  ssl_certificate_key /etc/nginx/server.key; #SSL证书和私钥的路径。

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #这指定了支持的 SSL/TLS 协议版本。

  ssl_session_timeout 5m; #这个指令设置 SSL 会话的超时时间。

  ssl_ciphers HIGH:!aNULL:!MD5; #这个指令设置允许使用的加密算法(cipher suites)。HIGH 表示使用强安全性的加密算法。!aNULL 和 !MD5 是加密算法的选项,这里表示禁止使用匿名加密(aNULL)和 MD5 散列算法。

  ssl_prefer_server_ciphers on; #这个指令启用了服务器端的加密算法优先。这意味着服务器端的加密算法优先于客户端提议的算法,提高了安全性。

 location / {

  proxy_pass http://backend_servers; #本次代理服务映射的后端服务器

  proxy_set_header Host $host; #用于获取nginx服务器的ip信息,说明这个流量是哪个nginx服务器转发的

  proxy_set_header X-Real-IP $remote_addr; #将客户端的真实IP地址传递给后端服务器,获取请求真实来源。

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #显示请求的源IP地址列表

  proxy_set_header X-Forwarded-Proto $scheme; #传递客户端请求的协议(HTTP或HTTPS) }

  }

}

注意:这里的证书是open ssl生成的测试证书,只能用于测试。需要将生成的证书放到指定路径,证书的域名是反向代理的域名。

证书配置命令:

代码语言:linux
复制
openssl genrsa -des3 -out server.key 1024

openssl req -new -key server.key -out server.csr

openssl rsa -in server.key -out server.key

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

将nginx服务器中/etc/hosts文件中加入这行。

vim /etc/hosts

代码语言:Linux
复制
  172.16.100.2 tweb01.com

  172.16.100.2 tweb02.com

  172.16.100.2 tweb03.com

  172.16.100.10 abc.web.com
3.6.3.2 客户端侧配置过程

根据拓扑图,把web服务器对应的节点的IP进行配置。

将客户端中/etc/hosts文件中加入这行。

172.16.100.10 abc.web.com

在linux系统上编辑脚本。

vim ./sum/sh

代码语言:linux
复制
#!/bin/bash 

SERVER1_COUNT=0

SERVER2_COUNT=0

SERVER3_COUNT=0 

for i in {1..10}; do 

 RESPONSE=$(curl -s https://abc.web.com/) 

 if [ $RESPONSE == web01 ]; then 

 SERVER1_COUNT=$((SERVER1_COUNT + 1)) 

 elif [ $RESPONSE == web02 ]; then 

 SERVER2_COUNT=$((SERVER2_COUNT + 1)) 

 elif [ $RESPONSE == web03 ]; then 

 SERVER3_COUNT=$((SERVER3_COUNT + 1)) 

 fi

done 

echo "Server 1 received: $SERVER1_COUNT requests"

echo "Server 2 received: $SERVER2_COUNT requests"

echo "Server 3 received: $SERVER3_COUNT requests"
3.6.3.3 Web服务器配置过程

yum install -y httpd

vim /var/www/html/index.html

输入web01,接下来:x,保存。其他两台以此类推。

systemctl start httpd

systemctl enable httpd

systemctl status httpd ##查看服务状态

根据拓扑图,把web服务器对应的节点的IP进行配置。

将客户端中/etc/hosts文件中加入这行。

代码语言:linux
复制
  172.16.100.10 abc.web.com
3.6.3.4 在客户端执行测试访问

3.7.4 Nginx正向代理访问测试

Nginx正向代理访问测试
Nginx正向代理访问测试

这里是在第二个实验(http)的基础上做的。

1、根据拓扑图,将节点中的IP配置好。

2、配置Nginx: 配置服务器和监听端口等。

3、在安装web服务器中安装httpd服务,并配置网页的内容(web01、web02、web03)

4、准备测试环境:准备至少五个服务器,一个作为客户端,一个作为正向代理服务器,一个方向代理服务器、三个作为目标服务器。确保服务器之间可以相互访问,并且nginx服务器能够访问到目标服务器。

5、创建测试用例:在客户端服务器上,使用for循环脚本执行连接到nginx服务器的代理端口。验证连接是否成功建立以及数据是否正确传输。

3.6.4.1 Nginx侧配置过程
代码语言:Javascript
复制
worker_processes 1; #开启一个业务进程,默认为1。

events {

 worker_connections 1024; ### nginx处理的并发数。

}

###定义http模块

http {

  include mime.types; #包含 mime.types 文件,用户定义文件扩展名和对应的 MIME 类型。

  default_type application/octet-stream; #定义了默认的 MIME 类型。使用 application/octet-stream 作为默认的 MIME 类型。

  sendfile on; #启用操作系统的 sendfile 功能,利用操作系统提供的这种高效文件传输方式。

  keepalive_timeout 65; #定义客户端与服务器之间 keep-alive 连接的超时时间。

 ###定义服务器模块。

 server {

  listen 80; #本次代理服务监听的端口

  server_name webnginx.com;本次代理服务器的域名

  location / {

  resolver 172.16.100.14; #解析域名的DNS服务器地址

  proxy_pass http://abc.web.com; #要访问的服务器的IP或者域名

  proxy_set_header Host $host; #用于获取nginx服务器的ip信息,说明这个流量是哪个nginx服务器转发的

  proxy_set_header X-Real-IP $remote_addr; #将网站真实IP地址传递给客户端,获取请求真实来源。

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #显示请求的源IP地址列表

  proxy_set_header X-Forwarded-Proto $scheme; #传递访问请求的协议(HTTP或HTTPS) }

 }

}

将nginx服务器中/etc/hosts文件中加入这行。

代码语言:linux
复制
 172.16.100.10 abc.web.com

 172.16.100.14 webnginx.com
3.6.4.2 客户端侧配置过程

将nginx服务器中/etc/hosts文件中加入这行。

vim /etc/hosts

代码语言:linux
复制
   172.16.100.14 webnginx.com

在linux系统上编辑脚本。

vim ./sum/sh

代码语言:shell
复制
#!/bin/bash 

SERVER1_COUNT=0

SERVER2_COUNT=0

SERVER3_COUNT=0 

for i in {1..10}; do 

 RESPONSE=$(curl -s http://webnginx.com/) 

 if [ $RESPONSE == web01 ]; then 

 SERVER1_COUNT=$((SERVER1_COUNT + 1)) 

 elif [ $RESPONSE == web02 ]; then 

 SERVER2_COUNT=$((SERVER2_COUNT + 1)) 

 elif [ $RESPONSE == web03 ]; then 

 SERVER3_COUNT=$((SERVER3_COUNT + 1)) 

 fi

done 

echo "Server 1 received: $SERVER1_COUNT requests"

echo "Server 2 received: $SERVER2_COUNT requests"

echo "Server 3 received: $SERVER3_COUNT requests"
3.6.4.3 Web服务器配置过程

yum install -y httpd

vim /var/www/html/index.html

输入web01,接下来:x,保存。

systemctl start httpd

systemctl enable httpd

systemctl status httpd ##查看服务状态

3.6.4.4 在客户端执行测试访问

执行sh sun.sh

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Nginx概述
  • 2. 正向代理与反向代理概述
    • 2.1 正向代理
      • 2.2 反向代理
        • 2.3 区别与总结
        • 3. Nginx 配置文件 (nginx.conf)
          • 3.1 概述
            • 3.2 配置文件结构
              • 3.3 真实配置文件概览
                • 3.3.1 全局块
                • 3.3.2 events 块
                • 3.3.3 http 块
                • 3.3.4 http 全局块
                • 3.3.5 server 块
                • 3.3.6 server 全局块
                • 3.3.7 location 块
              • 3.4 Nginx常用命令
                • 3.5 客户端测试脚本
                  • 3.6 负载均衡算法
                    • 3.7 整体测试拓扑
                      • 3.7.1 Nginx4层负载测试
                      • 3.7.2 Nginx7层http负载测试
                      • 3.7.3 Nginx7层https负载测试
                      • 3.7.4 Nginx正向代理访问测试
                  相关产品与服务
                  轻量应用服务器
                  轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档