nginx:反向代理模块-proxy模块

从客户端接受HTTP协议,转发给上游服务器也是HTTP协议

模块:ngx_http_proxy_module,默认编译进nginx,使用--without-http_proxy_module禁用

功能:对上游服务使用http/https协议进行反向代理

1.proxy_pass 指令

语法:proxy_pass URL;

默认:空

放置位置:location,if in location,limit_except

   URL 参数规则:

        (1)URL必须以http://或者https://开头,接下来是 域名,IP,Unix socket地址或者upstream的名字,前两者可以在域名或者IP后加端口,最后是可选的URI

        (2)当URL参数中携带URI与否,会导致发向上游请求的URL不同:

                ①不携带URI,则将客户端请求中的URL直接转发给上游。location后是用正则表达式,@名字时,应采用这种方式

               ②携带URI,则对用户请求中的URL作如下操作:将location参数中匹配上的一段替换为该URI

     (3)该URL参数中可以携带变量

     (4)更复杂的URL替换,可以在location内的配置添加rewrite break语句

根据指令发往上游的请求

1.proxy_method指令(GET请求,或者POST请求)

   语法:proxy_method method;

   默认:空

   放置位置:http,server,location

2.proxy_http_version指令(使用keepalive时,需要改为1.1)
   语法:proxy_http_version 1.0 | 1.1

   默认:proxy_http_version 1.0;

   放置位置:http,server,location

3.proxy_set_header 指令(修改或添加新的头部。若value的值为空字符串,则整个header都不会向上游发送)

   语法:proxy_set_header field value;

   默认:proxy_set_header Host $proxy_host; proxy_set_header COnnection close;

   放置位置 :http,server,location

4.proxy_pass_request_headers指令(是否要把用户请求的头部发送给上游)

   语法:proxy_pass_request_headers  on |  off;

   默认:proxy_pass_request_headers on;

   放置位置:http,server,location

5.proxy_pass_request_body指令(是否要把用户请求的body发送给上游)

   语法:proxy_pass_request_body  on |  off;

   默认:proxy_pass_request_body on;

   放置位置:http,server,location

6.proxy_set_body指令

   语法:proxy_set_body value;

   默认:空

   放置位置:http,server,location

接收用户请求包体的指令

1.proxy_request_buffering指令

   语法:proxy_request_buffering  on | off;

   默认:proxy_request_buffering  on;

   放置位置:http,server,location

     ① on :客户端网速慢。上游服务并发处理能力低。适应高吞吐量场景

    ②off:更及时的响应。降低nginx读写磁盘的消耗。一旦开始发送内容,proxy_next_upstream功能失败

控制客户端包体的接收

2.client_body_buffer_size 指令

   语法:client_body_buffer_size size;

   默认:client_body_buffer_size 8k | 16k;

   放置位置:http,server,location

3.client_body_in_single_buffer 指令

    语法:client_body_in_single_buffer on | off

   默认:client_body_in_single_buffer off;

   放置位置:http,server,location

4.client_max_body_size指令(最大包体长度限制,仅对请求头部中含有Content-Lentgh有效超出最大长度后,返回413错误)

   语法:client_max_body_size size;

   默认:client_max_body_size 1M;

   放置位置:http,server,location

临时文件的路径格式

5.client_body_temp_path指令(接收用户请求body的临时文件)

   语法:client_body_temp_path path [level1 [ level2 [ level3 ] ] ](多级子目录,一个目录不能存放太多文件,存放太多文件,导致存取性能变差)

   默认:client_body_temp_path    client_body_temp;

   放置位置:http,server,location

6.client_body_in_file_only 指令

   语法:client_body_in_file_only on | clean | off;(on:用户的包体会一直存放在文件中。clean:用户上传的body会存放到文件中,请求处理完成删除)

   默认:client_body_in_file_only off;(包体必须存放在文件中,可能会定位问题)

   放置位置:http,server,location

7.clent_body_timeout 指令(读取包体超时,则返回408错误)

   语法:clent_body_timeout    time;

   默认:clent_body_timeout  60s;

   放置位置:http,server,location

 

与上游服务建立连接

1.proxy_connect_timeout 指令(控制握手时间)

   语法:proxy_connect_timeout   time;

   默认:proxy_connect_timeout   60s;

   放置位置:http,server,location

2.proxy_next_upstream指令(超时后,回想客户端生成http响应,响应码为502)

   语法:proxy_next_upstream    http_502 |  ....;

   默认:proxy_next_upstream  error  timeout

   放置位置:http,server,location

3.proxy_socket_keepalive指令(上游连接启用TCP keepalive)

   语法:proxy_socket_keepalive  on | off

   默认:proxy_socket_keepalive  off

   放置位置:http,server,location

4.keepalive指令(上游连接启用HTTPkeepalive,复用TCP连接)

   语法:keepalive connections;

   默认:空

   放置位置:upstream

5.keepalive_requests指令(标识一个连接最多可以执行多少个请求)

  语法:keepalive_requests  numbers;

   默认: keepalive_requests 100;

   放置位置:upstream

6.proxy_bind 指令

   语法:proxy_bind  address [ transparent ] | off;

   默认:空

   放置位置:http,server,location

7.proxy_ignore_client_abort指令(当客户端关闭连接,是否关闭与上游服务器的连接)

   语法:proxy_ignore_client_abort on | off

   默认:proxy_ignore_client_abort   off;

    放置位置:http,server,location

8.proxy_send_timeout指令(定时器与操作时间)

   语法:proxy_send_timeout  time;

   默认:proxy_send_timeout  60s

   放置位置:http,server,location

 

接收上游的响应

1.proxy_buffer_size 指令(接收上游的HTTP响应头部,限定了接收自上游的HTTPresponse  header的最大值)

   语法:proxy_buffer_size  size;

   默认:proxy_buffer_size  4k | 8k;

   放置位置:http,server,location

2.proxy_buffers 指令(接收上游HTTP包体,如果内存能存放下,则不往磁盘中写入)

   语法:proxy_buffers  number size;

   默认:proxy_buffer 8  4k | 8k;

   放置位置:http,server,location

3.proxy_buffering 指令(尽快释放上游服务器的连接)

   语法:proxy_buffering  on  |  off;

   默认:proxy_buffering  on;

   放置位置:http,server,location

4.proxy_max_temp_file_size 指令(限制写入磁盘中的最大值)

   语法:proxy_max_temp_file_size  size;

   默认:proxy_max_temp_file_size  1024M;

   放置位置:http,server,location

5.proxy_temp_file_write_size 指令(限制每一次向磁盘中写入的字节数)

   语法:proxy_temp_file_write_size  size;

   默认:proxy_temp_file_write_size  8k | 16k;

   放置位置:http,server,location

6.proxy_temp_path 指令(存放临时文件的目录)

   语法:proxy_temp_path  path [ level1 [ level2 [ level3 ] ] ];

   默认:proxy_temp_path  proxy_temp;

   放置位置:http,server,location

7.proxy_busy_buffers_size 指令(及时转发包体,当接收到一部分时,先向客户端转发这部分响应)

   语法:proxy_busy_buffers_size  size;

   默认:proxy_busy_buffers_size  8k | 16k;

   放置位置:http,server,location

接收上游时网络相关指令

7.proxy_read_timeout 指令(两次读取最长操作时间)

   语法:proxy_read_timeout   time;

   默认:proxy_read_timeout   60s;

   放置位置:http,server,location

8.proxy_limit_rate 指令(限制读取上游的响应速度)

   语法:proxy_limit_rate   rate;

   默认:proxy_limit_rate   0;(0代表不限制)

   放置位置:http,server,location

上游包体的持久化

9.proxy_store_access 指令(把临时的包体对应的文件改名到最终目录下权限的配置方法)

   语法:proxy_store_access   users:permissions ....;

   默认:proxy_store_access   user:rw;

   放置位置:http,server,location

10.proxy_store 指令(使用root指令改名到root对应的目录下)

   语法:proxy_store   on | off | string;

   默认:proxy_store   off;(不开启)

   放置位置:http,server,location

 

处理上游的响应头部

禁用上游响应头部的功能

1.proxy_ignore_headers指令(某些响应头部可以改变nginx的行为,使用proxy_ignore_headers可以禁止它们生效)

   语法:proxy_ignore_headers   field ....;

   默认:空

   放置位置:http,server,location

转发上游的响应

2.proxy_hide_header  指令(对于上游响应中的某些头部,设置不向客户端转发)

   语法:proxy_hide_header   field;

   默认:空

   放置位置:http,server,location

3.proxy_pass_header  指令(对于被proxy_hide_header禁用的头部,设置允许向客户端转发)

   语法:proxy_pass_header   field;

   默认:空

   放置位置:http,server,location

修改返回的Set-Cookie头部

4.proxy_cookie_domain  指令(修改域名)

   语法:proxy_cookie_domain   off                   proxy_cookie_domain  domain replacement;

   默认:proxy_cookie_domain   off

   放置位置:http,server,location

5.proxy_cookie_path 指令(URL中的内容做替换)

   语法:proxy_cookie_path  off                  proxy_cookie_path   path  replacement;

   默认:proxy_cookie_path  off

   放置位置:http,server,location

修改返回的location头部

6.proxy_redirect指令(URL中的内容做替换)

   语法:proxy_redirect  off      proxy_redirect  redirect  replacement       proxy_redirect   default;

   默认:proxy_redirect  default

   放置位置:http,server,location

### 各组件及其版本的功能与集成方式 #### 1. **langgenius/dify-api:0.6.6** `langgenius/dify-api:0.6.6` 是 Dify API 的核心容器镜像,提供了一个 RESTful 接口来管理 AI 应用程序的创建、训练和推理功能。它集成了多种工具支持,如搜索引擎、天气预报等[^1]。此镜像是整个系统的控制中心,负责接收外部请求并协调其他服务完成任务。 集成方式通常通过 Docker Compose 文件定义其运行环境变量和服务端口映射关系。例如: ```yaml version: '3' services: api: image: langgenius/dify-api:0.6.6 ports: - "8000:8000" environment: DATABASE_URL: postgres://user:password@db:5432/dify_db ``` --- #### 2. **postgres:15-alpine** PostgreSQL 数据库用于存储结构化数据,比如用户的配置文件、历史记录以及其他元数据信息。版本 `15-alpine` 表示 PostgreSQL 15 版本,并采用轻量级 Alpine Linux 基础镜像构建而成。该数据库对于持久保存应用状态至关重要[^3]。 为了确保高可用性和性能优化,在实际部署过程中可以考虑设置主从复制机制或者定期备份策略。以下是简单的 compose 配置片段: ```yaml db: image: postgres:15-alpine environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: dify_db volumes: - ./data:/var/lib/postgresql/data ``` --- #### 3. **redis:6-alpine** Redis 主要作为缓存层服务于高频读取操作场景下提升响应速度的任务需求。此外还可以充当消息队列角色实现异步处理逻辑。这里选用的是 Redis 6 版本搭配 alpine 发行版以减少资源消耗。 下面展示如何将其加入到 docker-compose.yml 中并与其它微服务交互: ```yaml cache: image: redis:6-alpine ports: - "6379:6379" ``` 随后可以在应用程序内部指定连接字符串指向这个实例地址。 --- #### 4. **semitechnologies/weaviate:1.19.0** Weaviate 是一种矢量搜索引擎,能够高效检索嵌入向量空间中的相似项。这使得复杂自然语言查询变得可行,从而增强了语义理解能力。在此项目里使用的特定标签号表明开发者希望锁定兼容性良好的稳定发行版而非最新边缘特性预览版。 启动 Weaviate 实例时需注意初始化参数设定以便适配目标工作负载特征: ```yaml weaviate: image: semitechnologies/weaviate:1.19.0 ports: - "8080:8080" environment: QUERY_DEFAULTS_LIMIT: 25 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' ``` --- #### 5. **langgenius/dify-sandbox:0.1.0** `sandbox` 容器扮演着隔离测试环境的角色,允许用户在一个受控区域内尝试新想法而不会影响生产流程。尽管当前仅处于早期迭代阶段 (v0.1.0),但它已经具备基本框架用来验证概念证明型实验成果。 典型应用场景可能涉及加载定制插件模块或是调整算法超参组合等等动作。相应部分声明如下所示: ```yaml sandbox: image: langgenius/dify-sandbox:0.1.0 depends_on: - db - cache ``` 上述例子强调了依赖链条顺序的重要性——即必须等待基础支撑设施完全就绪之后再激活高级业务单元。 --- #### 6. **nginx:latest** 最后提到 Nginx 负责反向代理职责,统一入口流量分发至下游多个后端节点上执行具体事务处理活动。由于官方维护积极频繁更新补丁修复漏洞等原因,“latest” 标签代表获取最近一次发布的通用二进制包集合[^2]。 下面是关于如何配置 SSL/TLS 加密通信链路的一个简单示范脚本节选: ```nginx server { listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; location / { proxy_pass http://api:8000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值