一、环境准备1.1 虚拟机规划使用 template 模板机准备3 台虚拟机proxy 服务器配置双网卡ens160连接服务端网段192.168.8.0/24ens192连接客户端网段192.168.4.0/241.2 proxy 网卡配置1添加第二块网卡VMware 操作编辑虚拟机设置 → 添加 → 网络适配器 → 完成网络连接选择自定义VMnet1仅主机模式→ 确定2配置 ens160192.168.8.50/24[rootproxy ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.50/24 connection.autoconnect yes[rootproxy ~]# nmcli connection up ens1603配置 ens192192.168.4.50/24# 查看网卡连接[rootproxy ~]# nmcli connection showNAME UUID TYPE DEVICE ????177d90f32-9878-4213-b54a-6f05a91fddd7 ethernet ens192 ens160 8f2b6d31-d69c-4812-9277-2ac35e534ca2 ethernet ens160# 删除中文自动识别连接[rootproxy ~]# nmcli connection delete 77d90f32-9878-4213-b54a-6f05a91fddd7# 重新添加网卡连接[rootproxy ~]# nmcli connection add ifname ens192 con-name ens192 type ethernet# 配置IP[rootproxy ~]# nmcli connection modify ens192 ipv4.method manual ipv4.addresses 192.168.4.50/24 connection.autoconnect yes# 激活网卡[rootproxy ~]# nmcli connection up ens1921.3 Windows 端配置 VMnet1配置 VMnet1 虚拟网卡192.168.4.1/24测试连通性C:\Users\15790ping 192.168.8.50 C:\Users\15790ping 192.168.4.50二、Nginx 反向代理反向代理客户端在公网服务器在内网。代理服务端隐藏服务器正向代理客户端在内网服务器在公网。代理客户端隐藏访问者2.1 基础概念单点故障架构中某节点故障导致全网瘫痪负载均衡多个至少两个没有上限主机组建集群提供同样的服务缓解单个服务器的压力提升架构的可靠性反向代理概述用户访问Nginx代理服务器代理服务器把请求转发给后端真实服务器实现负载均衡提升架构的可靠性提高安全性保护内网服务器安全Nginx 反向代理就是公网与内网之间的网络中转站公网用户仅能访问 Nginx 的公网 IP / 域名无法直接接触内网服务器。Nginx 在外网接收用户请求转发至内网业务服务内网服务只对接 Nginx绝不直接暴露公网。 业务处理完成后响应数据再经由Nginx 中转原路返回给公网用户。HTTP反向代理架构-实验拓扑图4网段类比为公网8网段类比为内网。工作原理必须理解对于公网的客户端来说nginx代理就是服务端对于nginx代理来说内网服务器才是服务端客户端请求到达代理代理服务器会拆开数据包然后再封装一个数据包发送给真正的服务器。服务器回应时发送到代理代理会再次拆开数据包重新封装之后再发送给对应的客户端工作原理的核心就是代理的拆包和再封装的操作如果4.1想访问8.100那么 客户端全程只和 192.168.4.50 通信完全不知道 192.168.8.100 的存在。Nginx 在这里做了两次 “身份转换”对客户端自己是服务端源 IP 是 192.168.4.50对后端自己是客户端源 IP是 192.168.8.502.2 核心语法格式http { upstream backend { #创建集群集群名称见名知意即可 server 192.168.8.100:80; #指定集群成员 server 192.168.8.200:80; #指定集群成员 } server { #虚拟web主机 listen 80; server_name localhost; #域名 location / { ... proxy_pass http://backend; #将请求调度至 web集群与上方集群名称一致 } } ...此处省略1万字... }2.3 Nginx 代理算法Nginx目前支持的算法轮询默认常用逐一循环调度weight指定权重权重值和访问率成正比ip_hash常用又叫源地址哈希根据客户端地址分配固定的后端服务器解决会话保持问题least_conn最小连接数目前仅了解把请求分配给当前活跃连接数最少的后端服务器适合请求耗时差异大的场景避免某台服务器被长连接占满2.4 集群主机状态关键字max_fails允许请求失败次数默认1失败达次数后暂停调度fail_timeout触发 max_fails 后暂停调度的时间单位秒down标记主机暂不参与负载均衡2.5 实验部署web1、web2、proxy根据拓扑图完成下方实验2.5.1 部署 web1192.168.8.100web1主机均需要安装nginx服务Nginx源码编译安装将nginx-1.22.1.tar.gz上传至虚拟机web1的/root目录[rootweb1 ~]# dnf -y install gcc pcre-devel openssl-devel make #安装依赖包[rootweb1 ~]# useradd nginx #创建用于用于启动服务[rootweb1 ~]# tar -xf /root/nginx-1.22.1.tar.gz #解压源码包[rootweb1 ~]# cd nginx-1.22.1 #切换目录[rootweb1 nginx-1.22.1]#[rootweb1 nginx-1.22.1]# ./configure \ #初始化--prefix/usr/local/nginx\#指定安装目录为/usr/local/nginx--usernginx\#指定用户名运行服务后进程的所有者--groupnginx\#指定组运行服务后进程的组--with-http_ssl_module#支持加密功能[rootweb1 nginx-1.22.1]# make make install #编译 并 编译安装[rootweb1 nginx-1.22.1]# ls /usr/local/nginx #查看安装目录有数据表示已安装web1主机编写测试页面内容为web1web1启动服务查看端口[rootweb1 ~]# echo web1web1 /usr/local/nginx/html/index.html #修改首页文件[rootweb1 ~]# /usr/local/nginx/sbin/nginx #启动nginx服务[rootweb1 ~]# ss -nutlp | grep :80 #查看端口[rootweb1 ~]# curl 127.0.0.1 #自己访问自己测试可以看到页面2.5.2 部署 web2192.168.8.200web2主机均需要安装nginx服务Nginx源码编译安装将nginx-1.22.1.tar.gz上传至虚拟机web2的/root目录[rootweb2 ~]# dnf -y install gcc pcre-devel openssl-devel make #安装依赖包[rootweb2 ~]# useradd nginx #创建用于用于启动服务[rootweb2 ~]# tar -xf /root/nginx-1.22.1.tar.gz #解压源码包[rootweb2 ~]# cd nginx-1.22.1 #切换目录[rootweb2 nginx-1.22.1]#[rootweb2 nginx-1.22.1]# ./configure \ #初始化--prefix/usr/local/nginx\#指定安装目录为/usr/local/nginx--usernginx\#指定用户名运行服务后进程的所有者--groupnginx\#指定组运行服务后进程的组--with-http_ssl_module#支持加密功能[rootweb2 nginx-1.22.1]# make make install #编译 并 编译安装[rootweb2 nginx-1.22.1]# ls /usr/local/nginx #查看安装目录有数据表示已安装web1主机编写测试页面内容为web1web1启动服务查看端口[rootweb2 ~]# echo web2web2 /usr/local/nginx/html/index.html #修改首页文件[rootweb2 ~]# /usr/local/nginx/sbin/nginx #启动nginx服务[rootweb2 ~]# ss -nutlp | grep :80 #查看端口[rootweb2 ~]# curl 127.0.0.1 #自己访问自己测试可以看到页面实际工作中两个主机提供的页面应该是相同的今天仅仅是为了做实验体验Nginx的反向代理因此做两个不一样的页面2.5.3 部署 proxy192.168.4.50proxy主机安装部署nginx服务proxy主机本身不做网站所以初始化时–with-http_ssl_module不是必须Nginx源码编译安装将nginx-1.22.1.tar.gz上传至虚拟机proxy的/root目录[rootproxy ~]# dnf -y install gcc pcre-devel openssl-devel make #安装依赖包[rootproxy ~]# useradd nginx #创建用于用于启动服务[rootproxy ~]# tar -xf /root/nginx-1.22.1.tar.gz #解压源码包[rootproxy ~]# cd nginx-1.22.1 #切换目录[rootproxy nginx-1.22.1]# ./configure \ #初始化--prefix/usr/local/nginx\#指定安装目录为/usr/local/nginx--usernginx\#指定用户名运行服务后进程的所有者--groupnginx\#指定组运行服务后进程的组--with-http_ssl_module#支持加密功能[rootproxy nginx-1.22.1]# make make install #编译 并 编译安装[rootproxy nginx-1.22.1]# ls /usr/local/nginx #查看安装目录有数据表示已安装proxy代理服务器修改nginx配置文件创建backend集群集群成员为web1、web2调用集群将请求调度至backend集群[rootproxy ~]# cp /usr/local/nginx/conf/nginx.conf /opt #备份配置文件[rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件...此处省略1万字... upstream backend{#创建集群backend集群名称见名知意即可server192.168.8.100:80;#指定集群成员server192.168.8.200:80;#指定集群成员#默认采用轮询算法第一次走第一个的话第二次一定是第二个轮着来}server{#虚拟web主机listen80;server_name localhost;#域名location /{... proxy_pass http://backend/;#将请求调度至 web集群与上方集群名称一致}}...此处省略1万字...}[rootproxy ~]# /usr/local/nginx/sbin/nginx #启动服务[rootproxy ~]# ss -nutlp | grep :80 #查看端口号如果是加密的https那么要修改端口号upstream backend { #创建集群backend集群名称见名知意即可 server 192.168.8.100:443; #指定集群成员 server 192.168.8.200:443; #指定集群成员 }listen 443;proxy_pass https://backend;2.5.4 客户端验证轮询效果什么是轮询 轮询就是负载均衡里最基础的分发策略指按顺序轮流把请求分配给后端服务器按顺序 “点名”挨个处理请求实现平均分配。client客户端访问验证Windows客户端访问验证如未及时更新则强制刷新防止缓存[rootclient ~]# curl 192.168.4.50 #访问代理服务器轮询访问实现负载均衡web1web1[rootclient ~]# curl 192.168.4.50 #访问代理服务器轮询访问实现负载均衡web2web22.6 集群状态关键字验证max_fails允许请求失败的次数默认为1即失败几次不再调度fail_timeout达到max_fails的次数之后暂停调度的时间单位秒down表示指定的集群成员主机暂不参与负载proxy主机修改配置文件验证关键字修改完记得重新加载nginx配置max_fails fail_timeout[rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件 ...此处省略1万字... upstream backend { #创建集群集群名称见名知意即可 server 192.168.8.100:80 max_fail2 fail_timeout30; #失败2次算失败失败后30秒内不再访问 server 192.168.8.200:80; #指定集群成员 } server { #虚拟web主机 listen 80; server_name localhost; #域名 location / { ... proxy_pass http://backend; #将请求调度至 web集群与上方集群名称一致 } } ...此处省略1万字... } [rootproxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置 [rootproxy ~]# ss -nutlp | grep :80 #查看端口号web1停止nginx服务模拟服务宕机[rootweb1 ~]# /usr/local/nginx/sbin/nginx -s stop #停止nginx服务web1启动nginx服务恢复服务[rootclient ~]# curl 192.168.4.50 #由于web1主机的nginx服务宕机所以一直访问都是由web2提供web2web2[rootclient ~]# curl 192.168.4.50 #由于web1主机的nginx服务宕机所以一直访问都是由web2提供web2web2[rootclient ~]# curl 192.168.4.50 #30秒后两个主机开始再次轮询web1web1down关键字[rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件...此处省略1万字... upstream backend{#创建集群集群名称见名知意即可server192.168.8.100:80max_fail2fail_timeout30;#失败2次算失败失败后30秒内不再访问server192.168.8.200:80 down;#使用down关键字标记此主机暂不参与调度}server{#虚拟web主机listen80;server_name localhost;#域名location /{... proxy_pass http://backend;#将请求调度至 web集群与上方集群名称一致}}...此处省略1万字...}[rootproxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置[rootproxy ~]# ss -nutlp | grep :80 #查看端口号客户端访问测试[rootclient ~]# curl 192.168.4.50 #由于web2主机的不参与调度所以一直访问都是由web1提供web1web1[rootclient ~]# curl 192.168.4.50 #由于web2主机的不参与调度所以一直访问都是由web1提供web1web12.7 Nginx算法验证weightip_hash1权重算法weightweight指定权重权重值和访问率成正比增加权重实现真正的负载均衡[rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件 ...此处省略1万字... upstream backend { #创建集群集群名称见名知意即可 server 192.168.8.100:80 weight2; #权重设置为2 server 192.168.8.200:80 weight1; #权重设置为1 } server { #虚拟web主机 listen 80; server_name localhost; #域名 location / { ... proxy_pass http://backend; #将请求调度至 web集群与上方集群名称一致 } } ...此处省略1万字... } [rootproxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置 [rootproxy ~]# ss -nutlp | grep :80 #查看端口号客户端访问验证此刻是有权重的轮询web1与web2处理结果2:1[rootclient ~]# curl 192.168.4.50web1web1[rootclient ~]# curl 192.168.4.50web1web1[rootclient ~]# curl 192.168.4.50web2web22源地址哈希ip_haship_hash又叫源地址哈希根据客户端地址分配固定的后端服务器没写ip_hash默认以轮询的算法[rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件 ...此处省略1万字... upstream backend { #创建集群集群名称见名知意即可 ip_hash; #源地址哈希 server 192.168.8.100:80 weight2; #权重设置为2 server 192.168.8.200:80 weight1; #权重设置为1 } server { #虚拟web主机 listen 80; server_name localhost; #域名 location / { ... proxy_pass http://backend; #将请求调度至 web集群与上方集群名称一致 } } ...此处省略1万字... } [rootproxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置 [rootproxy ~]# ss -nutlp | grep :80 #查看端口号客户端访问验证源地址不变永远都有一个服务器提供服务[rootclient ~]# curl 192.168.4.50web1web1[rootclient ~]# curl 192.168.4.50web1web1[rootclient ~]# curl 192.168.4.50web2web2也就是说如果源IP不改变永远是同一个服务端提供服务三、TCP/UDP 调度四层代理TCP可靠的三次握手面向连接的协议UDP非面向连接的协议3.1 模块与升级依赖模块ngx_stream_core_modulenginx从1.9版本以后开始支持此功能编译时增加**–with-stream**开启nginx升级只需要升级主程序主程序中定义了支持什么功能与配置文件网页文件日志都无关平滑升级、灰度发布升级分为版本升级和功能升级灰度发布又叫金丝雀发布/平滑升级特点业务不停止基本流程是初始化增加新功能–make编译–备份原程序–拷贝新程序–make upgrade 升级主程序[rootproxy ~]# cd nginx-1.22.1 #切换目录[rootproxy nginx-1.22.1]# ./configure \ #初始化--prefix/usr/local/nginx\#指定安装目录为/usr/local/nginx--usernginx\#指定用户名运行服务后进程的所有者--groupnginx\#指定组运行服务后进程的组--with-http_ssl_module --with-stream#支持加密功能、支持四层代理[rootproxy nginx-1.22.1]# make #编译[rootproxy nginx-1.22.1]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old #备份原程序[rootproxy nginx-1.22.1]# cp objs/nginx /usr/local/nginx/sbin/ #拷贝新的主程序[rootproxy nginx-1.22.1]# make upgrade #升级主程序。同时杀掉旧进程拉起新进程。这个过程服务依旧不会断开[rootproxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -V #查看主程序已开启四层代理解析前面的重新初始化和编译的操作是为了更新源目录之中的nginx即objs/nginx那么为什么mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old #备份原程序时服务一直没断因为处理服务的是进程而不是程序。虽然配置文件挪走了但是内存里的进程没掉make upgrade 升级主程序的同时还会杀掉旧进程拉起新进程。这个过程中服务始终不会断开3.2 四层代理配置转发 SSH 22 端口3.2.1 四层代理实验架构图客户端访问proxy代理服务器proxy主机代理web1与web2的sshd服务Linux 远程连接服务3.2.2 四层代理语法注意 四层代理不需要写入http{}配置中stream{#四层代理配置upstream sshbackend{#定义四层集群server192.168.8.100:22;#定义集群成员server192.168.8.200:22;#定义集群成员}server{listen12345;#监听端口proxy_pass sshbackend;#将请求转发至sshbackend集群}}3.2.3 配置proxy代理服务器[rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件 ... stream { #四层代理配置 upstream sshbackend { #定义四层集群 server 192.168.8.100:22; #定义集群成员 server 192.168.8.200:22; #定义集群成员 } } server { listen 12345; #监听端口 proxy_pass sshbackend; #将请求转发至sshbackend集群 } ... [rootproxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载nginx配置 [rootproxy ~]# ss -nutlp | grep :12345 #查看nginx已经启用12345端口3.3 客户端访问验证client反复执行命令ssh -p 12345 192.168.4.50每次连接的都是不同的主机、web1、web2轮询# 客户端 SSH 连接轮询访问 web1、web2[rootclient ~]# ssh -p 12345 192.168.4.50输入密码的时候需要输入的是被代理的主机的密码而不是proxy主机的密码做无密码连接时需要一级一级实现免密客户端 → 代理机 proxy客户端生成密钥把客户端公钥传给 proxy实现客户端免密登代理机代理机 proxy → 后端主机 在 proxy 上单独生成密钥把proxy 本机公钥传给后端服务器实现代理免密登后端四、Nginx 优化4.1 常见 HTTP 状态码常见的200403404500502一般情况下500是内部服务器问题502是代理的问题补充451网站因内容非法被封禁4.2 404 错误页面优化实验以web1主机为例[rootweb1 ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件 http { fastcgi_intercept_errors on; #开启错误页面重定向全局配置动态静态页面都生效 ... server { error_page 404 /404.html; #404报错将请求则打开404.html页面 #注意那个虚拟主机server {}配置了这句话才生效。如果希望所有都生效就需要在所有的虚拟web主机所有的server {}都配置error_page } } #注 fastcgi_intercept_errors on; 表示nginx会拦截php-fpm的报错使用自定义的错误页面 [rootweb1 ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置注意如果不加 fastcgi_intercept_errors on; 那么自定义的错误重定向404只会对静态页面生效创建404.html# 创建 404 页面[rootweb1 ~]# echo This is error page /usr/local/nginx/html/404.html# 重载配置[rootweb1 ~]# /usr/local/nginx/sbin/nginx -s reloadWindows客户端访问一个不存在的页面测试4.3 status 状态页面监控status模块–with-http_stub_status_module此模块支持查看nginx的连接数等信息web1虚拟机需升级nginx支持status模块利用前文灰度发布的方式进行升级1升级 Nginxweb1[rootweb1 ~]# cd nginx-1.22.1 #切换目录[rootweb1 nginx-1.22.1]# ./configure \ #初始化--prefix/usr/local/nginx\#指定安装目录为/usr/local/nginx--usernginx\#指定用户名运行服务后进程的所有者--groupnginx\#指定组运行服务后进程的组--with-http_ssl_module --with-stream\#支持加密功能、支持四层代理--with-http_stub_status_module#支持开启nginx状态模块[rootweb1 nginx-1.22.1]# make #编译]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old #备份原程序[rootweb1 nginx-1.22.1]# cp objs/nginx /usr/local/nginx/sbin/ #拷贝新的主程序[rootweb1 nginx-1.22.1]# make upgrade #升级主程序[rootweb1 nginx-1.22.1]# /usr/local/nginx/sbin/nginx -V #查看主程序已开启四层代理升级程序依旧是先初始化然后make编译备份旧程序拷贝新程序make upgrade升级2配置 status 页面修改nginx.conf配置文件开启status页面[rootweb1 ~]# vim /usr/local/nginx/nginx.conf #修改nginx主配置文件 server { ... location /status { #匹配用户的URL如果访问地址包括status stub_status on; #开启status页面 allow 192.168.8.1; #白名单允许 192.168.8.1访问 deny all; #拒绝其他所有主机访问状态页面 } ... } [rootweb1 ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置文件Windows客户端访问测试http://192.168.8.100/status3状态参数说明Active connections当前活动的连接数量当前访问总人数Accepts已经接受客户端的连接总数量有多少人曾经来过Handled已经处理客户端的连接总数量Requests客户端发送的请求数量Reading当前服务器正在读取客户端请求头的数量请求头客户现在正在发的请求要看什么页面要求服务器传过去Writing当前服务器正在写响应信息的数量指服务器正在给客户回应信息Waiting当前多少客户端在等待服务器的响应重点关注Requests和WaitingPVPage View)页面浏览量即网站页面在一定时间内被访问的页面总次数相同用户刷新相同页面也被计算一次反映了用户对网站内容的浏览情况可以通过访问日志得到。UVUnique Visitor独立访客数统计一定周期内访问网站的独立用户数量不重复计算同一用户的多次访问。可以通过访问日志或根据用户的唯一标识去重得到PV与UV都是衡量业务活跃度的重要指标尤其网站改版升级后可以进行对比来判断业务情况4.4 隐藏 Nginx 版本号倘若我们没有做404页面优化那么默认的404报错页面可以直接看到我们的nginx版本号每个软件都有Bug因此版本号需要隐藏如果未优化404错误页面访问错误页面则可以直接看到nginx版本使用curl -I大写的i 访问服务器头部信息也可以直接看到nginx版本# 未优化前暴露版本[rootweb1 ~]# curl -I 192.168.8.100HTTP/1.1200OK Server: nginx/1.22.1修改nginx.conf增加全局配置信息关闭显示nginx版本号[rootweb1 ~]# vim /usr/local/nginx/conf/nginx.conf #修改nginx配置文件http{... server_tokens off;#关闭nginx版本号显示...}[rootweb1 ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载nginx配置[rootweb1 ~]# curl -I 192.168.8.100 #访问服务器的头部信息HTTP/1.1200OK Server: nginx#nginx版本已隐藏...一行代码就搞定server_tokens off;4.5 页面压缩gzip修改nginx.conf全局配置信息开启页面压缩提高服务器相应速度每种文件格式的写法可以参见配置文件/usr/local/nginx/conf/mime.types[rootweb1 ~]# vim /usr/local/nginx/conf/nginx.conf #修改nginx配置文件http{...gzipon;#开启页面压缩gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript;#对这些类型的文件进行压缩gzip_min_length 1k;#小于1k的不压缩gzip_comp_level6;#压缩等级为6速度居中压缩比例居中...}[rootweb1 ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置./configure --help之中–with开头的是可以启用的模块–without开头的是本身自带可以禁用的conf/mime.types文件中记录了文件的格式需要压缩的格式要对照里面的格式左侧的内容4.6 并发量优化常见压力测试工具ab压力测试工具命令格式:ab -c 模拟人数 -n 请求总数 地址/注意末尾的斜线其他常见的压力测试工具http_load、webbench、siege注意ab命令需要由http-tools命令获取[rootweb1 ~]# dnf -y install httpd-tools #安装软件提供ab命令[rootweb1 ~]# ab -c 2000 -n 2000 http://192.168.8.100/ #模拟2000次访问... socket: Too manyopenfiles(24)#报错信息可以看到Nginx是有并发量的限制的达到上限就会报错修改配置突破限制修改nginx.conf配置文件突破并发量限制[rootweb1 ~]# vim /usr/local/nginx/conf/nginx.conf #修改nginx配置文件... worker_processes1;#nginx工作进程的数量与CPU数量保持一致lscpu查看cpu数量... events{worker_connections100000;#每个进程处理的并发量数量修改为100000}...[rootweb1 ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置注意linux内核默认最大打开数量为1024因此还需要进行ulimit配置优化Linux内核参数最大文件数量永久修改内核参数需要修改配置文件/etc/security/limits.conf重启生效[rootweb1 ~]# ulimit -n #查看文件最大连接数默认为1024[rootweb1 ~]# ulimit -n 100000 #将内核最大文件连接数修改为100000所以我们需要突破两层限制一层进程的限制一层内核的限制ab 压力测试# 测试2000并发2000请求[rootweb1 ~]# ab -c 2000 -n 2000 http://192.168.8.100/ #模拟2000次访问补充永久设置最大文件数量知晓即可无须操作[rootweb1 ~]# vim /etc/security/limits.conf...此处省略1万字... 约60行左右有模板在模板下方新增 * soft nofile100000* hard nofile100000...此处省略1万字...#该配置文件分4列分别如下#用户或组 软限制或硬限制 需要限制的项目 限制的值重启系统生效五、总结掌握Nginx七层代理的应用及配置方式掌握Nginx四层代理的应用及配置方式掌握Nginx集群常用算法掌握Nginx优化配置404错误页面优化status状态页面隐藏Nginx版本号Nginx页面压缩Nginx并发量