nginx的代理服务器

简介

        Nginx是一款高性能的开源Web服务器和反向代理服务器,它以其稳定性、低资源消耗以及高并发处理能力而闻名。Nginx作为代理服务器,主要提供两种模式的服务:正向代理和反向代理。

 实验准备

        四台虚拟机:一台nginx代理服务器、两台后端服务器、一台客户端,关闭防火墙以及SELiunx;VMware关闭NAT模式的DHCP

IP地址
nginx服务器192.168.0.100/24
后端服务器1192.168.0.110/24
后端服务器2192.168.0.120/24
客户端192.168.0.50/24

        后端服务器安装httpd

[root@web1 ~]# echo 192.168.0.110 > /var/www/html/index.html

[root@web2 ~]# echo 192.168.0.120 > /var/www/html/index.html

反向代理单台Web服务器 

        nginx配置

vim /usr/local/nginx/conf/conf.d/web-service.conf        #配置完成重启服务

        测试

动静分离 

        web1安装php

yum install -y php

systemctl restart httpd.service

         nginx配置

vim /usr/local/nginx/conf/conf.d/web-service.conf

        重启nginx服务

        测试

缓存功能 

        缓存功能默认关闭状态,需要先动配置才能启用

proxy_cache zone_name | off;         默认off #指明调用的缓存,或关闭缓存机制;Context:http, server, location,zone_name 表示缓存的名称.需要由proxy_cache_path事先定义

proxy_cache_valid [code ...] time;        #定义对特定响应码的响应内容的缓存时长

proxy_cache_path;        #定义可用于proxy功能的缓存

        非缓存场景压测

 [root@web2 ~]# cat /var/log/messages > /var/www/html/log.html

[root@client ~]# yum install -y httpd-tools

 [root@client ~]# ab -n1000 -c100 http://www.hello.com/log.html
Server Software:        nginx/1.26.2
Server Hostname:        www.hello.com
Server Port:            80

Document Path:          /log.html
Document Length:        313163 bytes

Concurrency Level:      100
Time taken for tests:   3.530 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      313444000 bytes
HTML transferred:       313163000 bytes
Requests per second:    283.31 [#/sec] (mean)
Time per request:       352.972 [ms] (mean)
Time per request:       3.530 [ms] (mean, across all concurrent requests)
Transfer rate:          86720.17 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   46 180.5     13    1075
Processing:    16  296 225.7    206    1470
Waiting:        2   39  48.9     21     473
Total:         17  342 299.0    231    2540

Percentage of the requests served within a certain time (ms)

        配置缓存功能

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

vim /usr/local/nginx/conf/conf.d/web-service.conf

        重启服务 

        测试

[root@client ~]# ab -n1000 -c100 http://www.hello.com/log.html
Server Software:        nginx/1.26.2
Server Hostname:        www.hello.com
Server Port:            80

Document Path:          /log.html
Document Length:        313163 bytes

Concurrency Level:      100
Time taken for tests:   3.627 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      313421000 bytes
HTML transferred:       313163000 bytes
Requests per second:    275.69 [#/sec] (mean)
Time per request:       362.720 [ms] (mean)
Time per request:       3.627 [ms] (mean, across all concurrent requests)
Transfer rate:          84383.28 [Kbytes/sec] received

        验证缓存目录结构

 负载均衡(七层)

        命令含义

weight=number         #设置权重,默认为1,实现类似于LVS中的WRR,WLC等

max_conns=number         #给当前后端server设置最大活动链接数,默认为0表示没有限制

max_fails=number         #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检 测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性 检查,而非周期性的探测

fail_timeout=time         #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再 次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒

backup         #设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器

down         #标记为down状态,可以平滑下线后端服务器

resolve         #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不用重启 Nginx

hash KEY [consistent];         #基于指定请求报文中首部字段或者URI等key做hash计算,使用consistent参数,将使用ketama一致性 hash算法,适用于后端是Cache服务器(如varnish)时使用,consistent定义使用一致性hash运算,一致 性hash基于取模运算

hash $request_uri consistent;         #基于用户请求的uri做hash

hash $cookie_sessionid         #基于cookie中的sessionid这个key进行hash调度,实现会话绑 定

ip_hash;         #源地址hash调度方法,基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计 算,以实现会话保持

least_conn;        #最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC

        实验

vim /usr/local/nginx/conf/conf.d/proxy-web.conf

        配置完成重启服务

        测试

负载均衡(四层) 

        Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于 DNS的域名解析,其配置方式和指令和http 代理类似,可以实现后端服务器分组转发、权重分配、状态监测、 调度算法等高级功能。

        负载均衡实例:DNS

        后端服务器配置DNS

yum install -y bind

        基础配置在下方连接 

http://t.csdnimg.cn/7zmoWicon-default.png?t=N7T8http://t.csdnimg.cn/7zmoW        192.168.0.110

vim /etc/named.rfc1912.zones

cp -a /var/named/named.localhost /var/named/hello.com.zone 

vim /var/named/hello.com.zone

systemctl restart named

        192.168.0.120

         配置与192.168.0.110相同,只需修改部分内容

vim /var/named/hello.com.zone

systemctl restart named 

        nginx 

        添加子配置文件

[root@Nginx ~]# mkdir /usr/local/nginx/conf/tcp.conf

[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf

         配置子配置文件

vim /usr/local/nginx/conf/tcp.conf/dns.conf

         重启nginx服务

        测试

         在客户端中进行dns解析

dig www.hello.com @192.168.0.100

 FistCGI

CGI历史

        最早的Web服务器只能简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏 览器,也就是静态html文件,但是后期随着网站功能增多网站开发也越来越复杂,以至于出现动态技 术,比如像php(1995年)、java(1995)、python(1991)语言开发的网站,但是nginx/apache服务器并不 能直接运行 php、java这样的文件,apache实现的方式是打补丁,但是nginx缺通过与第三方基于协议实 现,即通过某种特定协议将客户端请求转发给第三方服务处理,第三方服务器会新建新的进程处理用户 的请求,处理完成后返回数据给Nginx并回收进程,最后nginx在返回给客户端,那这个约定就是通用网 关接口(common gateway interface,简称CGI),CGI(协议) 是web服务器和外部应用程序之间的接口 标准,是cgi程序和web服务器之间传递信息的标准化接口。

FastCGI历史

        CGI协议虽然解决了语言解析器和 Web Server 之间通讯的问题,但是它的效率很低,因为 Web Server 每收到一个请求都会创建一个CGI进程,PHP解析器都会解析php.ini文件,初始化环境,请求结束的时候 再关闭进程,对于每一个创建的CGI进程都会执行这些操作,所以效率很低,而FastCGI是用来提高CGI性 能的,FastCGI每次处理完请求之后不会关闭掉进程,而是保留这个进程,使这个进程可以处理多个请 求。这样的话每个请求都不用再重新创建一个进程了,大大提升了处理效率。

FastCHI配置命令

 fastcgi_pass address:port;        #转发请求到后端FastCGI服务器

fastcgi_index name;        #FastCGI默认的主页资源

fastcgi_param parameter value [if_not_empty];        #传递给FastCGI服务器的参数

                #可以是文本,变量或组合,可用于将Nginx的内置变量赋值给自定义 key

fastcgi_param REMOTE_ADDR $remote_addr;         #客户端源IP

fastcgi_param REMOTE_PORT $remote_port;         #客户端源端口

fastcgi_param SERVER_ADDR $server_addr;         #请求的服务器IP地址

fastcgi_param SERVER_PORT $server_port;         #请求的服务器端口

fastcgi_param SERVER_NAME $server_name;         #请求的server name

FastCGI实验

        nginx与php-fpm在同一服务器

         源码编译nginx

         解压插件

tar zxf memc-nginx-module-0.20.tar.gz

tar zxf srcache-nginx-module-0.33.tar.gz

tar zxf echo-nginx-module-0.63.tar.gz

        进入目录检查环境

 cd nginx-1.26.2/

 ./configure --prefix=/usr/local/nginx \
> --add-module=/root/echo-nginx-module-0.63 \
> --add-module=/root/memc-nginx-module-0.20 \
> --add-module=/root/srcache-nginx-module-0.33 \
> --user=nginx \
> --group=nginx \
> --with-http_v2_module \
> --with-http_realip_module \
> --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --with-stream \
> --with-stream_ssl_module \
> --with-stream_realip_module \
> --with-pcre

        编译文件并安装

 make && make install

        启动nginx 

源码编译PHP

        解决依赖

yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel oniguruma-devel

         解压php压缩包

tar zxf php-8.3.9.tar.gz

cd php-8.3.9/

./configure --help        #查看帮助

         检测环境

./configure --prefix=/usr/local/php \
> --with-config-file-path=/usr/local/php/etc \
> --enable-fpm \
> --with-fpm-user=nginx \
> --with-fpm-group=nginx \
> --with-curl \
> --with-iconv \
> --with-mhash \
> --with-zlib \
> --with-openssl \
> --enable-mysqlnd \
> --with-mysqli \
> --with-pdo-mysql \
> --disable-debug \
> --enable-sockets \
> --enable-soap \
> --enable-xml \
> --enable-ftp \
> --enable-gd \
> --enable-exif \
> --enable-mbstring \
> --enable-bcmath \
> --with-fpm-systemd

        编译并安装

 make && make install

php配置优化 

[root@Nginx ~]# cd /usr/local/php/etc/

[root@Nginx etc]# cp -p php-fpm.conf.default php-fpm.conf

[root@Nginx etc]# vim php-fpm.conf

 

 [root@Nginx etc]# cd php-fpm.d/

[root@Nginx php-fpm.d]# cp -p www.conf.default www.conf

[root@Nginx php-fpm.d]# cd /root/php-8.3.9/

[root@Nginx php-8.3.9]# cp -p php.ini-production /usr/local/php/etc/php.ini

[root@Nginx php-8.3.9]# vim /usr/local/php/etc/php.ini

[root@Nginx php-8.3.9]# cd /root/php-8.3.9/sapi/fpm/ 

[root@Nginx fpm]# cp php-fpm.service /lib/systemd/system/

[root@Nginx fpm]# vim /lib/systemd/system/php-fpm.service

 

[root@Nginx fpm]# systemctl daemon-reload 

[root@Nginx fpm]# systemctl start php-fpm.service

        添加环境

[root@Nginx fpm]# vim ~/.bash_profile 

 [root@Nginx fpm]# source ~/.bash_profile

php的nginx配置 

[root@Nginx ~]# mkdir /data/web/php

[root@Nginx ~]# vim /data/web/php/index.php

 

 [root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf

[root@Nginx ~]# vim /usr/local/nginx/conf/conf.d/php.conf 

 

[root@Nginx ~]# nginx -s reload 

        测试

         测试客户端需要有dns解析

php缓存优化 

        php动态拓展模块/缓存模块

        模块下载

PECL :: Package :: memcache (php.net)icon-default.png?t=N7T8http://pecl.php.net/package/memcache        安装memcache模块

[root@Nginx ~]# tar zxf memcache-8.2.tgz

[root@Nginx ~]# cd memcache-8.2/

[root@Nginx memcache-8.2]# yum install -y autoconf

[root@Nginx memcache-8.2]# phpize

 [root@Nginx memcache-8.2]# ./configure && make && make install        #安装

         配置php加载memcache模块

[root@Nginx memcache-8.2]# vim /usr/local/php/etc/php.ini

 [root@Nginx memcache-8.2]# systemctl reload php-fpm.service

        部署memcached

 [root@Nginx memcache-8.2]# yum install -y memcached

cat /etc/sysconfig/memcached        #memcached路径

systemctl enable --now memcached.service

netstat -antlupe | grep mem

         添加测试文件和图形监控文件

[root@Nginx ~]# cd memcache-8.2/

[root@Nginx memcache-8.2]# cp example.php memcache.php /data/web/php/

[root@Nginx ~]# vim /data/web/php/memcache.php

        无优化压力测试

         开启memcache压力测试

        测试

访问 http://php.hello.com/example.php 不断刷新

访问 http://php.hello.com/memcache.php 查看命中效果

php 高速缓存

        通过nginx的模块直接对memcache进行访问

        需要在nginx源码安装时添加的模块

vim /usr/local/nginx/conf/conf.d/php.conf 

         压力测试

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值