当前位置:Gxlcms > PHP教程 > nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL

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

时间:2021-07-01 10:21:17 帮助过:43人阅读

一,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教程有兴趣的朋友有所帮助。

人气教程排行