欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL

程序员文章站 2022-05-10 13:48:54
...
一,nginx反向代理配置

#tomcat

Java代码

  1. upstream tomcat_server{
  2. server 127.0.0.1:8080;
  3. }
  4. erver{
  5. listen 80;
  6. server_name www.codes51.com;
  7. location / {
  8. proxy_redirect off;
  9. proxy_set_header Host $host;
  10. proxy_set_header X-Real-IP $remote_addr;
  11. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  12. proxy_pass http://tomcat_server;
  13. }

显然就是用户访问www.codes51.com(需要设置本地localhost,将www.codes51.com指向nginx所在IP)的时候(或将www.codes51.com直接写在nginx所在的IP地址),将请求转到到后台的tomcat服务器,即127.0.0.1:8080,并将请求到的数据转发给client

二,动静态请求相分离

神马意思?图片,JS,HTML等静态的东西去访问一台专门的服务器,而动态的请求去访问另一台服务器。就这么简单,上例子:

Java代码

  1. server {
  2. listen 192.168.154.128:80;
  3. server_name image.codes51.com;
  4. index index.html;
  5. #proxy_pass http://tomcat_server;
  6. #charset koi8-r;
  7. #access_log logs/host.access.log main;
  8. location / {
  9. root html;
  10. #index index.html index.htm;
  11. proxy_redirect off;
  12. proxy_set_header Host $host;
  13. proxy_set_header X-Real-IP $remote_addr;
  14. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  15. }
  16. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  17. {
  18. valid_referers none blocked 192.168.154.128 192.168.154.1;
  19. if ($invalid_referer)
  20. {
  21. rewrite ^ /403.jpg break;
  22. }
  23. if (!-f $request_filename) {
  24. rewrite ^ /404.jpg last;
  25. }
  26. expires 30d;
  27. }
  28. #error_page 404 /404.html;
  29. # redirect server error pages to the static page /50x.html
  30. #
  31. error_page 500 502 503 504 /50x.html;
  32. location = /404.jpg {
  33. root html;
  34. }
  35. }
  36. tomcat
  37. upstream tomcat_server{
  38. server 127.0.0.1:8080;
  39. }
  40. server{
  41. listen 192.168.154.128;
  42. server_name www.codes51.com;
  43. location / {
  44. proxy_redirect off;
  45. proxy_set_header Host $host;
  46. proxy_set_header X-Real-IP $remote_addr;
  47. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  48. proxy_pass http://tomcat_server;
  49. }
  50. }

上面这种方式是通过设定不同的域名,可不可以在同一个域名中,通过判断后缀来将动态与静态请求相分离呢?

Java代码

  1. #tomcat
  2. upstream tomcat_server{
  3. server 127.0.0.1:8080;
  4. }
  5. server{
  6. listen 192.168.154.128;
  7. server_name www.codes51.com;
  8. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  9. {
  10. root html;
  11. }
  12. location ~ .*\.(jsp|do)$ {
  13. proxy_redirect off;
  14. proxy_set_header Host $host;
  15. proxy_set_header X-Real-IP $remote_addr;
  16. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  17. proxy_pass http://tomcat_server;
  18. }

OK!同一个域名,根据后缀不同,请求不同的服务,实现动态静态请求相分离。仔细想一想,如果又出现了一种静态的文件,比如*.abc ,那难道又去修改那个配制文件吗?显然不太合理,所以可以考虑将所有的表态文件放在同一个根目录下面,比如/static那么可以将上面的静态页面请求修改一下:

Java代码

  1. location /static
  2. {
  3. root html/static;
  4. }

咦这样是不是就好一些了,而且文件的存放也比较有规范了。

三,nginx缓存应用

nginx具有web缓存服务,proxy_cache,但是有一个问题就是,proxy_cache不能清除指定的URL缓存,只能设置URL过期时间,但是有问题,有人就会很快解决问题,nginx第三方模块ngx_cache_purge能清除指定URL。

nginx安装时需要将ngx_cache_purege加载进去。

Java代码

  1. ./configure --user=www --group=www --add-module=/root/dxm/nginx/ngx_cache_purge-1.2

其中,/root/dxm/nginx/ngx_cache_purge-1.2为ngx_cache_purge解压路径(附件中提供ngx_cache_purge tar包下载)

现在来一段实例,实现图片缓存:

话说proxy_tem_path,与proxy_cache_path必须在同一个分区之下!

Java代码

  1. proxy_temp_path /usr/local/nginx/proxy_temp;
  2. proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g;


Java代码

  1. upstream tomcat_server{
  2. server 127.0.0.1:8080;
  3. }
  4. server{
  5. listen 192.168.154.128;
  6. server_name www.codes51.com;
  7. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  8. {
  9. proxy_cache cache_one;
  10. proxy_cache_methods GET HEAD POST;
  11. proxy_cache_min_uses 1;
  12. proxy_cache_valid 200 302 10m;
  13. proxy_cache_valid 404 1m;
  14. proxy_cache_valid any 1m;
  15. proxy_cache_key "$host:$server_port$uri$is_args$args";
  16. proxy_redirect off;
  17. proxy_set_header Host $host;
  18. proxy_set_header X-Real-IP $remote_addr;
  19. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  20. proxy_pass http://tomcat_server;
  21. }
  22. location ~ .*\.(jsp)$ {
  23. proxy_redirect off;
  24. proxy_set_header Host $host;
  25. proxy_set_header X-Real-IP $remote_addr;
  26. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  27. proxy_pass http://tomcat_server;
  28. }
  29. location ~ /purge(/.*)
  30. {
  31. allow 192.168.154.128;
  32. allow 192.168.154.1;
  33. deny all;
  34. proxy_cache_purge cache_one $host:$server_port$1$is_args$args;
  35. }

恩,静态页面缓存,动态请求不缓存!

大家看一下最后一段的那个purege配置,很显然,表示哪些IP可以手动清除指定的URL



以上就介绍了nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。