0x6*_*16E 10 nginx reverse-proxy
我有一个 nginx 设置,它接收来自外部主机的请求并将它们代理到内部服务器。
配置看起来像这样:
server {
listen 10.0.0.66:443;
server_name my.example.com;
root /websites/my.example.com
ssl on;
ssl_certificate /websites/ssl/my.example.com.crt;
ssl_certificate /websites/ssl/my.example.com.key;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
location / {
proxy_pass https://10.0.0.100:3000/;
}
}
Run Code Online (Sandbox Code Playgroud)
出于实验/测试目的,我希望能够通过任意二进制文件运行内部主机回复的内容,并以二进制文件的回复内容进行响应。
对于例如,如果我想压缩HTML在代理我会贯穿htmlcompressor服务器的响应,然后发送输出作为代理的响应给客户端。最终结果将是最终客户端获得缩小的 html。
我知道有各种各样的 nginx 插件和示例可以为本地提供的数据完成此操作,但是如何为代理设置它?
cns*_*nst 10
那么,您想nginx
将来自客户端的请求代理到后端服务器,然后在将后端的回复返回给客户端之前,将此类回复通过另一个外部处理器进行管道传输?
我认为您目前无法使用nginx
Igor Sysoev 和 Nginx, Inc 提供的任何官方模块执行上述操作。可用于更改响应主体的最接近的是一些与 nginx 一起提供的过滤器模块,但默认情况下是关闭的,包括add_before_body
,add_after_body
和sub_filter
指令:
http://nginx.org/en/docs/http/ngx_http_addition_module.html
http://nginx.org/en/docs/http/ngx_http_sub_module.html
另外,也许gzip on;
是你真正想要的?
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
或者,如果你知道perl
并愿意运行一个完全实验性的模块,看看嵌入perl
到 中nginx
,默认情况下关闭一个官方的 nginx 模块,并且(有点明显)完全是实验性的:
http://nginx.org/en/docs/http/ngx_http_perl_module.html
另一种选择是使用某种 Fast-CGI 设置,您将请求重定向到该设置,反过来,您的 Fast-CGI 脚本将向后端发出请求,然后在返回之前进行最终处理回复给 nginx 以缓存并返回给用户。
还有proxy_set_body
(但fastcgi_set_body
还没有)更改请求的主体(例如,从客户端提供的内容),但似乎没有任何等效的指令或变量来获取响应的主体,以便通过以某种方式向后处理器发出后续请求。无论如何,过滤器模块可能是您想要的后处理器。
(此外,您确实意识到fork
通过常规执行人员进行回复和管道回复的幼稚方法会特别慢,对吗?)
总而言之,我认为gzip on;
这正是您要寻找的;否则,如果您可以修改原始的 webapp,我认为您最好的选择可能是在 webapp 本身中安装某种后处理器,这似乎是下一个最简单的解决方案。潜在地,您可以研究过滤器模块是如何实现的,例如前面提到的 ngx_http_addition_filter_module.c,以及一些更明显相关的过滤器,例如 ngx_http_gzip_filter_module.c,并实现您自己的嵌入式过滤器模块。或者聘请 Nginx, Inc. 为您编写此代码!但是,说gzip on;
真的,它可以正常工作,并且可能会给您带来更好的结果,而不会出现任何麻烦、性能或稳定性问题,并且默认情况下已经编译了它,您只需在其中启用它nginx.conf
.
归档时间: |
|
查看次数: |
20891 次 |
最近记录: |