Nginx的反向代理:实现灵活的请求转发和内容缓存
首先来看看常见的资源访问地址模式:代码语言:Bash自动换行AI代码解释如果没有使用restful,那么Nginx的配置文件需要这样配置:展开代码语言:JSON自动换行AI代码解释} } }显得有些复杂和固化。如果使用restful,就可以这样配置:展开代码语言:JSON自动换行AI代码解释如果conf的内容过长,还可以进行模块化配置,使用include引用:比如把下面的:展开代码语言:Bash自
restful介绍
首先来看看常见的资源访问地址模式:
代码语言:Bash
自动换行
AI代码解释
https://blog.csdn.net/Long_xu?type=blog&&name=xxx
如果没有使用restful,那么Nginx的配置文件需要这样配置:
展开
代码语言:JSON
自动换行
AI代码解释
http { server { listen 8888; location /type=blog&&name=xxx { proxy_pass http://192.168.7.146:8889; } } }
显得有些复杂和固化。
如果使用restful,就可以这样配置:
展开
代码语言:JSON
自动换行
AI代码解释
http { server { listen 8888; location /FLY/blog { } location /FLY { } } }
如果conf的内容过长,还可以进行模块化配置,使用include引用:
比如把下面的:
展开
代码语言:Bash
自动换行
AI代码解释
# test.conf 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; } location /FLY/blog { } location /FLY { } } server { listen 8889; } server { listen 8890; } server { listen 8891; } }
改为:
展开
代码语言:Bash
自动换行
AI代码解释
# test.conf 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; } include ./dir/*.conf }
展开
代码语言:Bash
自动换行
AI代码解释
# server8888.conf server { listen 8888; location / { proxy_pass http://backend; } location /FLY/blog { } location /FLY { } }
代码语言:Bash
自动换行
AI代码解释
# server8889.conf server { listen 8889; }
代码语言:Bash
自动换行
AI代码解释
# server8890.conf server { listen 8890; }
代码语言:Bash
自动换行
AI代码解释
# server8891.conf server { 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进行一个简单的使用。
展开
代码语言:C++
自动换行
AI代码解释
#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; }
编译:
代码语言:Bash
自动换行
AI代码解释
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/
注意,库的路径要换成自己的。
执行结果:
代码语言:Bash
自动换行
AI代码解释
# ./ngx_code string length: 12 string: Hello World!
把编译过程做成makefile:
展开
代码语言:Bash
自动换行
AI代码解释
# 方便起见一般都会先定义编译器链接器 CC = gcc LD = gcc # 正则表达式表示目录下所有.c文件 SRCS = $(wildcard *.c) # OBJS表示SRCS中把列表中的.c全部替换为.o OBJS = $(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。
更多推荐



所有评论(0)