用Nginx搭建一个具备缓存功能的反向代理服务
具备缓存功能的反向代理服务
实战:用Nginx搭建一个具备缓存功能的反向代理服务-2025.1.9
目录
[toc]
环境
这是装在一台linux机器还是两台机器啊 很模糊啊 这一段
作者回复:1台测试机,通过不同的端口开了2个Nginx服务。
1、把之前创建的这个服务作为上游服务器
端口前加上127.0.0.1后,代表只能通过本机的ip来访问这个服务:
停止nginx,再打开nginx:
再次访问,可以看到原来的页面无法访问了:(因为nginx拒绝了浏览器发过去的链接)
2、搭建下nginx的反向代理
之前nginx用的是nginx1.14版本:
而反向代理我们使用openresty:
验证:
关于http_proxy_module:
3、如何配置一个缓存服务器
关于proxy_cache:
这些缓存如何使用呢?
测试下:
把上游站点停掉后,看访问是否能获取到访问结果呢?
可以看到,仍然可以访问这个站点:(是因为反向代理做了缓存了的。)
FAQ
老师没提供源码
难搞哦。。。
老师之前已经安装好了openresty,课堂上没带我们部署;
关于相关的配置文件,老师也没提供;
案例:缓存面向的是全部response
老师您好,缓存功能只能使用于静态资源服务吗?我配置的反向代理到web应用,生成了nginxcache这个目录,但是目录里面没有任何东西。
作者回复:缓存只用于反向代理。必须上游响应符合缓存条件才会存储到该目录。第四部分有3节课会深入这块
nginx的proxy_cache_path缓存后端的资源 这个缓存的是后端的静态资源的吧 如果静态资源都放在了nginx本地或者不是在后端,后端全是动态的逻辑处理 那这个缓存就用不上了了吧???
作者回复:缓存面向的是全部response,nginx不关心上游是动态生成的response还是磁盘上读取的静态资源。所以缓存的应用范围很广的,当上游宕机时也可以仍然使用stale缓存的。第4部分的课程有详细介绍。
老师 proxy cache 缓存 对于动态页面php 如果后台页面更新 而缓存没更新 会不会造成客户端访问出现问题? 是需要手动清理缓存还是重新设置超时时间?
作者回复:动态页面自身会考虑下游有nginx、squid这样的缓存服务,所以它在response header里,会注明本页面是否需要缓存,缓存多长时间。例如Set-Cookie这样的response默认是不缓存的。第4部分对proxy cache有3节课都在讲用法。
案例:有什么方法可以获取到客户端请求的真实IP吗
老师你好,我们使用stream对tcp请求做代理,但是有个问题就是应用端拿不到客户端的真实IP,获取出来的IP是代理服务器的IP,请问有什么方法可以获取到客户端请求的真实IP吗?
作者回复:两个方案,
1、使用proxy_protocol协议,nginx作为客户端或者服务器时都支持该协议。第113课有详细介绍。
2、使用IP透传DSR方案,需要修改上游服务的路由表,这节课在第4部分最后一节课,大概春节前会上线,你可以关注下。
案例:Openresty
我找不到Openresty配置目录,不仅要安装nginx还要安装Openresty是吗
作者回复:openresty里含有nginx,你安装好openresty后,如果你没有改prefix,那么nginx.conf就会在/usr/local/openresty/nginx/conf目录下。
老师 没有看到启动openresty呢
作者回复:Openresty启动后进程名还是Nginx,它只是把Lua代码以Nginx模块的方式嵌入到Nginx进程中了
Openresty也是Nginx,只不过它增加了几个Nginx模块,特别是http模块。所以,包括配置文件、端口都是一样的;
陶辉老师你好,生产环境如何判断是该使用nginx呢?还是openresty呢?
作者回复:如果不需要使用openresty提供的独有功能,那么尽量使用更稳定更轻量的nginx。
参考Openresty官网(https:cdopenresty-VERSION/./configuremakesudomakeinstall示例中的VERSION替换成OpenResty的版本号,比如1.11.2.1】后;openresty中的nginx默认安装路径是【/usr/local/openresty/nginx】;如需将nginx内容设置为linux托管开机自启,可参考:https:http{includemime.types;default_typeapplication/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request"'# '$status $body_bytes_sent "$http_referer"'# '"$http_user_agent""$http_x_forwarded_for"';#access_log logs/access.log main;proxy_cache_path/tmp/nginxcachelevels=1:2keys_zone=my_cache:10mmax_size=10ginactive=60muse_temp_path=off;sendfileon;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout65;#对传输内容进行压缩,节省宽带gzipon;gzip_min_length1;gzip_comp_level2;gzip_typestext/plainapplication/javascripttext/cssapplication/xmltext/javascriptapplication/x-httpd-phpimage/jpegimage/gifimage/png;#代理上游的服务器组upstreamlocal{server127.0.0.1:8080;}server{listen8081;server_namelocalhost;#charset koi8-r;#access_log logs/host.access.log main;#代理配置location/{proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forward-For$proxy_add_x_forwarded_for;proxy_cachemy_cache;proxy_cache_key$host$uri$is_args$args;proxy_cache_valid2003043022d;proxy_passhttp:#root html;#index index.html index.htm;}}
案例:server块里面配置一次,每个location会自动继承的
作者回复:server块里面配置一次,每个location会自动继承的
案例:Nginx自定义的http头部优先级最高
老师您好, 请问nginx的cache机制和http的Cache-Control头部在使用上是否有优先顺序,或是冲突的地方? 谢谢老师的解答^^
作者回复:有的,比如Nginx自定义的http头部优先级最高,其次是cache control,再次是cache valid指令,等等。
案例:$host和$http_host
有啥区别
老师我用反向代理一些有跳转的页面的时候会出现CSS样式加载不出来 然后我使用'$http_host
就可以加载出来,想问一下$host和$http_host
有啥区别上网找资料没看明白
作者回复:
这两个变量的生成方式不同:
http_host只会从请求头部中的Host:xxx中取值,
而host有三种取值方式:
1、先从请求行中取,比如http:
版权:此文章版权归 One 所有,如有转载,请注明出处!
链接:可点击右上角分享此页面复制文章链接
上次更新时间: