尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Nginx动静分离 负载均衡 反向代理
Nginx的静态处理能力很强但是动态处理能力不足因此在企业中常用动静分离技术。动静分离技术其实是采用代理的方式在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离静态页面交给Nginx处理动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中是通location配置段配合正则匹配实现静态与动态页面的不同处理方式1.前端Nginx收到静态请求直接从NFS中返回给客户端。2.前端Nginx收到动态请求转交给通过FastCGI交给PHP服务器处理。----如果得到静态结果直接从NFS取出结果交给Nginx然后返回给客户端。----如果需要数据处理PHP服务器连接数据库后将结果返回给Nginx3.前端Nginx收到图片请求以.jpg、.png、.gif等请求交给后端Images服务器处理。server { listen 80; server_name localhost; index index.php index.html; root /app/blog; location ~* \.(css|js)$ { #NFS root /var/html/static } location ~* \.(png|ico|gif|jpg|jpeg)$ { #location匹配将图片交给Image处理 proxy_pass http://10.10.0.23:80; #Image服务器要开启web服务 } location ~* \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/html/yd_laravel/public$fastcgi_script_name; include /usr/local/nginx/conf/fastcgi_params; } }proxy_pass配置实现反向代理功能。执行 telnet 10.10.0.23验证成功反向代理故障节点自动摘流配置用到check模块是nginx_upstream_check_module淘宝 Tengine 模块upstream web { server 192.168.156.14:8889; server 192.168.156.15:8889; check fall3 interval3000 rise2 timeout2000 typehttp; check_http_expect_alive http_2xx http_3xx; check_http_send GET /web/v2/alive/check HTTP/1.0\r\n\r\n; }轮询策略未指定 ip_hash/weight默认轮询check 参数说明Tengine 健康检查interval3000每 3000ms (3s) 探测一次后端fall3连续 3 次探测失败 → 标记节点 down摘除流量rise2连续 2 次探测成功 → 节点恢复 up重新接入流量timeout2000探测请求 2 秒超时判定失败探测接口GET /web/v2/alive/check返回 2xx/3xx 认为存活nginx反向代理真实IP在编译Nginx时可通过添加http_realip_module模块来获取真实客户端IP地址。何为真实IP地址呢请看下图既获取到的真实客户端IP是101既不是正向代理服的104也不是反向代理的105proxy_set_header配置获取真实IPupstream联合proxy_pass实现负载均衡upstream phpserver { server 10.141.8.55:8005; server 10.141.8.55:8006; } server { listen 80; server_name www.xxx.com; log_not_found off; access_log /var/log/nginx/html-access.log main; charset utf-8; location / { proxy_pass http://phpserver; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600; proxy_buffer_size 256k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; } }PHP脚本打印IP?php foreach($_SERVER as $k$v) echo $k . . $v . br /;在默认配置情况下如果要取得客户端真实IP地址的话只有取HTTP_X_FORWARDED_FOR的第一个逗号前的IP地址最靠谱nginx的TCP的反向代理Nginx默认只支持http的反向代理nginx在1.9版本之后想要支持tcp的反向代理需要在编译时增加tcp代理模块stream { upstream backend_server { server 10.100.138.15:8787; server 10.100.138.30:8787; } }nginx做TCP代理并不仅仅局限于WEB的URL请求还可以转发如memcached、MySQL等点到点的请求。TCP负载均衡原理上和LVS等是一致的工作在更为底层性能会高于原来HTTP负载均衡不少nginx的反向代理服务同时使用Http-basic模块来做HTTP验证。用于定义一个 Location 块且该块不能被外部 Client 所访问只能被 Nginx 内部配置指令所访问比如 try_files or error_pageupstream elasticsearch { server 127.0.0.1:9200; } server { location / { error_page 590 elasticsearch; error_page 595 protected_elasticsearch; if ($request_uri ~ ^/_cat/.*$) { return 590; } return 595; } location elasticsearch { proxy_pass http://elasticsearch; proxy_redirect off; } location protected_elasticsearch { auth_basic Protected Elasticsearch; auth_basic_user_file passwords; proxy_pass http://elasticsearch; proxy_redirect off; } }我们定义两个状态代码590-不需要验证595-需要验证使用nginx的location功能两个location都指向同一个集群但是其中一个需要认证添加$_SERVER服务器环境变量在PHP开发中为了区分线上生产环境还是本地开发环境如果我们能通过判断$_SERVER[APP_DEV]为 DEV还是PRO来区分该多好include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param APP_DEV PRO; # PRO or DEVNginx负载均衡策略nginx的负载均衡策略可以划分为两大类内置策略和扩展策略。内置策略包含加权轮询和ip hash在默认情况下这两种策略会编译进nginx内核只需在nginx配置中指明参数即可。扩展策略有很多如fair、通用hash、consistent hash等默认不编译进nginx内核。1、轮询默认每个请求按时间顺序逐一分配到不同的后端服务器如果后端服务器down掉能自动剔除。upstream backserver { server 192.168.0.14; server 192.168.0.15; }2、weight权重轮询策略指定轮询几率weight和访问比率成正比用于后端服务器性能不均的情况。upstream backserver { server 192.168.0.14 weight3;#30% server 192.168.0.15 weight7; }权重越高在被访问的概率越大如上例分别是30%70%。上述方式存在一个问题就是说在负载均衡系统中假如用户在某台服务器上登录了那么该用户第二次请求的时候因为我们是负载均衡系统每次请求都会重新定位到服务器集群中的某一个那么已经登录某一个服务器的用户再重新定位到另一个服务器其登录信息将会丢失这样显然是不妥的。3、ip_hash我们可以采用ip_hash指令解决这个问题如果客户已经访问了某个服务器当用户再次访问时会将该请求通过哈希算法自动定位到该服务器。每个请求按访问ip的hash结果分配这样每个访客固定访问一个后端服务器可以解决session的问题。用ip_hash做会话保持有很大的缺陷它是通过客户端ip来实现负载不会很均匀。upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }4、fair第三方upstream-fair模块按后端服务器的响应时间来分配请求响应时间短的优先分配。upstream backserver { server server1; server server2; fair; }5、url_hash第三方nginx_upstream_hash模块按访问url的hash结果来分配请求使每个url定向到同一个后端服务器后端服务器为缓存时比较有效。upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }6.Sticky策略第三方nginx-sticky-module模块它是基于cookie的一种nginx的负载均衡解决方案通过分发和识别cookie来使同一个客户端的请求落在同一台服务器上可以解决session的问题。upstream backserver{ sticky; server 172.31.3.82:9170; server 172.31.3.82:9171; server 172.31.3.82:9173; }upstream的参数列表如下down表示单前的server暂时不参与负载weight默认为1.weight越大负载的权重就越大。max_fails允许请求失败的次数默认为1.当超过最大次数时返回proxy_next_upstream模块定义的错误fail_timeout:max_fails次失败后暂停的时间。backup其它所有的非backup机器down或者忙的时候请求backup机器。所以这台机器压力会最轻。keepalive连接数keepalive的值指定了每个工作进程中保留的持续连接到nginx负载均衡器缓存的最大值。如果超过这个设置值的闲置进程想链接到nginx负载均衡器组最先连接的将被关闭。location对URL进行匹配.可以进行重定向或者进行新的代理负载均衡注nginx支持同时设置多组的负载均衡用来给不用的server来使用。
RELATED

相关推荐

.NET Windows Desktop Runtime桌面部署终极指南:让WinForms与WPF应用在客户电脑上丝滑运行

.NET Windows Desktop Runtime桌面部署终极指南:让WinForms与WPF应用在客户电脑上丝滑运行

.NET Windows Desktop Runtime桌面部署终极指南:让WinForms与WPF应用在客户电脑上丝滑运行 【免费下载链接】windowsdesktop 项目地址: https://gitcode.com/gh_mirrors/wi/windowsdesktop 把辛辛苦苦做好的 WPF 程序发给客户,对方双击后却弹出一…

📅 2026/10/21 6:35:01
奔驰模块化发动机平台与48V轻混系统深度解析

奔驰模块化发动机平台与48V轻混系统深度解析

1. 从“大排量”到“模块化”:奔驰动力总成的战略转身如果你和我一样,是个对汽车技术有点“轴”的人,那你肯定也注意到了,这几年奔驰的发动机舱里,正在发生一场静悄悄的革命。最直观的感受就是,以前那些V6、…

📅 2026/10/26 11:03:15
英飞凌SiC JFET技术解析:高可靠性与高频应用的新选择

英飞凌SiC JFET技术解析:高可靠性与高频应用的新选择

1. 一个被低估的“老将”为何重出江湖? 最近在功率半导体圈子里,一个老话题又热了起来:英飞凌的碳化硅JFET。对于很多刚入行或者主要关注MOSFET的朋友来说,JFET可能是个有点陌生的名字,甚至会觉得它是不是一种“过时”…

📅 2026/10/17 14:43:56
MORE NEWS

更多资讯

📰

从模仿到自我试错:强化学习开启智能驾驶新纪元|全网独家复现混合模仿-强化学习架构、突破人类驾驶经验数据上限与策略固化缺陷、助力端到端智驾零样本泛化与极限场景安全决策有效涨点

目录 一、端到端智驾量产瓶颈:纯模仿学习的经验天花板与致命缺陷 二、核心范式迭代:从纯模仿、纯强化到混合IL-RL架构 2.1 第一代:纯模仿学习(IL)——稳而不强、有上限 2.2 第二代:纯强化学习(RL)——强而不稳、难落地 2.3 第三代:混合IL-RL架构——稳强兼顾、可…

📰

ai-newtab测试指南:如何用Bun与无头Chrome验证「扩展+LLM Agent」这条完整链路

【免费下载链接】ai-newtab Claude generates a daily new tab page based on your browser history. 项目地址: https://gitcode.com/gh_mirrors/ai/ai-newtab 点击查看 免费下载 ai-newtab 是一款让 Claude LLM Agent 替你"读网"的 Chrome 新标签页扩展…

📰

Quark Shell 上架 Mac App Store 指南:WebKit 沙盒、安全与兼容性注意事项

桌面应用开发工具 【免费下载链接】quark-shell-mac Quark Shell for Mac helps web developers to create native-like Mac menubar app using HTML and JavaScript without writing any native code. 项目地址: https://gitcode.com/gh_mirrors/qu/quark-shell-ma…

📰

SEO布局指南:新站上线前必做的几件事

很多网站上线后流量惨淡,运营方第一反应是"内容不够""外链太少",却忽略了一个根本原因——网站从出生就缺了SEO基因。搜索引擎对一个新站的第一印象,几乎决定了它后续3-6个月的收录速度和排名起点。与其上线后反复修补&a…

📰

大模型推理引擎vLLM(26):INT8 高吞吐/低延迟 EP 代码梳理、疑问、流程差异、DeepEP 通信差异

目录 1 vllm/distributed/device_communicators/all2all.py 2 vllm/model_executor/layers/fused_moe/all2all_utils.py 3 vllm/model_executor/layers/fused_moe/batched_deep_gemm_moe.py 3.1 增加 N、K 参数 放宽 init assert 3.1.1 问题:这里为什么只需…

📰

arduino-esp32 上手指南:装好核心,跑通第一个 WiFi 程序

arduino-esp32 上手指南:装好核心,跑通第一个 WiFi 程序 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 你有一块 ESP32 开发板,想让它…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬