Nginx的反向代理:实现灵活的请求转发和内容缓存
代理通常用于在多个服务器之间分配负载无缝地显示来自不同网站的内容或者通过 HTTP以外的协议将请求传递给应用服务器。二、将请求传递给代理的服务器当 NGINX 代理请求时它将请求发送到指定的代理服务器获取响应并将其发送回客户端。可以使用指定的协议将请求代理到 HTTP 服务器(另一个 NGINX 服务器或任何其他服务器)或非 HTTP 服务器(可以运行使用特定框架开发的应用程序如 PHP 或 Python)。要将请求传递给 HTTP 代理服务器则在一个 location 块内指定 proxy_pass 指令。例如展开代码语言JSON自动换行AI代码解释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指令代理多个服务器。示例展开代码语言JSON自动换行AI代码解释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和等号之间不能出现空格。不仅仅可以代理其他的服务器也可以代理本机的。展开代码语言JSON自动换行AI代码解释worker_processes 4; events { worker_connections 1024; } http { upstream backend { server 192.168.7.146:8889 weigth2; server 192.168.7.147:8890 weigth3; erver 192.168.7.148 weigth1; } server { listen 8888; location / { proxy_pass http://backend; } } server { listen 8889; } server { listen 8890; } server { listen 8891; } }五、restful介绍首先来看看常见的资源访问地址模式代码语言Bash自动换行AI代码解释https://blog.csdn.net/Long_xu?typeblognamexxx如果没有使用restful那么Nginx的配置文件需要这样配置展开代码语言JSON自动换行AI代码解释http { server { listen 8888; location /typeblognamexxx { 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 weigth2; server 192.168.7.147:8890 weigth3; erver 192.168.7.148 weigth1; } 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 weigth2; server 192.168.7.147:8890 weigth3; erver 192.168.7.148 weigth1; } 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开发filterhandlerupstream。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2434729.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!