首页 » PHP教程 » php若何实现转发技巧_Nginx的反向代理实现灵活的请求转发和内容缓存

php若何实现转发技巧_Nginx的反向代理实现灵活的请求转发和内容缓存

访客 2024-12-18 0

扫一扫用手机浏览

文章目录 [+]

代理常日用于在多个做事器之间分配负载,无缝地显示来自不同网站的内容,或者通过 HTTP以外的协议将要求通报给运用做事器。

二、将要求通报给代理的做事器

当 NGINX 代理要求时,它将要求发送到指定的代理做事器,获取相应,并将其发送回客户端。
可以利用指定的协议将要求代理到 HTTP 做事器(另一个 NGINX 做事器或任何其他做事器)或非 HTTP 做事器(可以运行利用特定框架开拓的运用程序,如 PHP 或 Python)。

php若何实现转发技巧_Nginx的反向代理实现灵活的请求转发和内容缓存

要将要求通报给 HTTP 代理做事器,则在一个 location 块内指定 proxy_pass 指令。
例如:

php若何实现转发技巧_Nginx的反向代理实现灵活的请求转发和内容缓存
(图片来自网络侵删)

worker_processes 4;events {worker_connections 1024;}http {server {listen 8888;location / {proxy_pass http://192.168.7.146:8889;}}server { listen 8889; }server { listen 8890; }server { listen 8891; }}

此 示 例 配 置 将 在 此 location 处 理 的 所 有 请 求 传 递 到 指 定 地 址(www.example.com/link/)处的代理做事器。
该地址可以指定为域名或 IP 地址。
该地址还可能包括一个端口。

三、代理多个做事器

在一个 location 块内指定 proxy_pass 指令可以代理一个做事器,也可以利用upstream指令代理多个做事器。
示例:

worker_processes 4;events {worker_connections 1024;}http {upstream backend {server 192.168.7.146:8889;server 192.168.7.147:8890;}server {listen 8888;location / {proxy_pass http://backend;}}server { listen 8889; }server { listen 8890; }server { listen 8891; }}

backend 是模块名,里面就可以写上多个须要代理的做事器。
不能利用多个proxy_pass来代理,须要利用upstream来实现代理多个做事器。

四、代理多个做事器的负载均衡

可以利用weight来调度权重,实现负载均衡(把稳weight和等号之间不能涌现空格)。
不仅仅可以代理其他的做事器,也可以代理本机的。

worker_processes 4;events {worker_connections 1024;}http {upstream backend {server 192.168.7.146:8889 weigth=2;server 192.168.7.147:8890 weigth=3;erver 192.168.7.148 weigth=1;}server {listen 8888;location / {proxy_pass http://backend;}}server { listen 8889; }server { listen 8890; }server { listen 8891; }}五、restful先容

首先来看看常见的资源访问地址模式:

https://blog.csdn.net/Long_xu?type=blog&&name=xxx

如果没有利用restful,那么Nginx的配置文件须要这样配置:

http {server {listen 8888;location /type=blog&&name=xxx {proxy_pass http://192.168.7.146:8889;}}}

显得有些繁芜和固化。

如果利用restful,就可以这样配置:

http {server {listen 8888;location /FLY/blog {}location /FLY {}}}

如果conf的内容过长,还可以进行模块化配置,利用include引用:

比如把下面的:

# test.confworker_processes 4;events {worker_connections 1024;}http {upstream backend {server 192.168.7.146:8889 weigth=2;server 192.168.7.147:8890 weigth=3;erver 192.168.7.148 weigth=1;}server {listen 8888;location / {proxy_pass http://backend;}location /FLY/blog {}location /FLY {}}server { listen 8889; }server { listen 8890; }server { listen 8891; }}

改为:

# test.confworker_processes 4;events {worker_connections 1024;}http {upstream backend {server 192.168.7.146:8889 weigth=2;server 192.168.7.147:8890 weigth=3;erver 192.168.7.148 weigth=1;}include ./dir/.conf}

# server8888.confserver {listen 8888;location / {proxy_pass http://backend;}location /FLY/blog {}location /FLY {}}

# server8889.confserver {listen 8889;}

# server8890.confserver {listen 8890;}

# server8891.confserver {listen 8891;}

把下面把一个拆分为多个,每个server可以独立。

六、Nginx conf中http与server的关系

在conf文件中,是http协议包含server还是server 包含协议呢?它们是N对N还是1对N呢?

在打算机中,有很多N对N的场景,但是代码实现过程中,会将其转换为1对N的关系。
由于N对N是一个很繁芜的流程,不好处理。

也便是http与server的关系是N对N的关系;只是代码实现会细化变为1对N的逻辑。

七、进阶:Nginx 根本组件利用

这是一个前导,紧张理解如何将Nginx源码里供应的根本组件拆分出来利用,比如ngx_str、list,queue、hash、array等等。
后面会有专门章节先容Nginx 根本组件利用。

这里先对ngx_str进行一个大略的利用。

‬#include <stdio.h>#include "ngx_config.h"#include "ngx_conf_file.h"#include "nginx.h"#include "ngx_core.h"#include "ngx_string.h"//#include "ngx_palloc.h"//#include "ngx_array.h"//#include "ngx_hash.h"int main(){ngx_str_t str = ngx_string("Hello World!");printf("string length: %ld\n", str.len);printf("string: %s\n", str.data);return 0;}

编译:

gcc -o ngx_code ngx_code.c -I /home/fly/workspace/nginx-1.13.7/src/core/ -I /home/fly/workspace/nginx-1.13.7/src/event/ -I /home/fly/workspace/nginx-1.13.7/src/os/unix/ -I /home/fly/workspace/nginx-1.13.7/objs/ -I /home/fly/workspace/pcre-8.41/ -I /home/fly/workspace/openssl-1.1.0g/include/

把稳,库的路径要换本钱身的。

实行结果:

# ./ngx_codestring length: 12string: Hello World!

把编译过程做成makefile:

# 方便起见一样平常都会先定义编译器链接器CC = gccLD = gcc# 正则表达式表示目录下所有.c文件SRCS = $(wildcard .c)# OBJS表示SRCS中把列表中的.c全部更换为.oOBJS = $(patsubst %c, %o, $(SRCS))# -I指定头文件目录INCLUDE = -I /home/fly/workspace/nginx-1.13.7/src/core/ -I /home/fly/workspace/nginx-1.13.7/src/event/ -I /home/fly/workspace/nginx-1.13.7/src/os/unix/ -I /home/fly/workspace/nginx-1.13.7/objs/ -I /home/fly/workspace/pcre-8.41/ -I /home/fly/workspace/openssl-1.1.0g/include/# -L指定库文件目录,-l指定静态库名字(去掉文件名中的lib前缀和.a后缀)# LIB = -L./libs -ltomcrypt# 开启编译warning和设置优化等级# CFLAGS = -Wall -O2# 可实行文件的名字TARGET = ngx_code# .PHONE伪目标.PHONY:all clean# 要天生的目标文件all: $(TARGET)# 链接时候指定库文件目录及库文件名$(TARGET): $(OBJS)$(LD) -o $@ $^ $(LIB) # 编译时候指定头文件目录%.o:%.c$(CC) -c $^ $(INCLUDE) $(CFLAGS) clean:rm -f $(OBJS) $(TARGET)总结学会Nginx反向代理的conf文件配置。
理解nginx根本组件的源码组件:ngx_str、list、queue、hash、array、log、原子操作、共享内存、线程池、内存池、红黑树、http协议等等。
nginx module开拓:filter,handler,upstream。

"大众号:Lion莱恩呀

标签:

相关文章