关于nginx实现静态化的需求

zhuyingxi1 发布于 2013/08/16 09:19
阅读 3K+
收藏 1

目前网站使用SpringMVC restful方式,URL样式如下:

http://127.0.0.1/main/64000

先用户要求做静态化,访问以上URL浏览器rewrite到http://127.0.0.1/main/64000.shtml

如何不改变应用服务器端代码,让nginx将第一次访问的页面静态化到xxx/cache目录,第二次访问直接获取静态页面内容

静态页面内容超时时间为2小时,2小时后重新静态化该页面(该需求可用java或者shell定时清空cache目录实现,不要求一定使用nginx)

主要求nginx静态化和rewrite配置,谢谢。

加载中
1
iSea
iSea

按照自己的规则直接做rewrite就行了,比如访问你的

http://127.0.0.1/main/64000.shtml 

直接rewrite到

http://127.0.0.1/main/64000

^/main/([0-9]+)\.shtml$ /main/$1 last;

iSea
iSea
回复 @zhuyingxi1 : 是的,结合缓存,先地址rewrite到带.shtml的,然后如果没有这个文件,就后后端rewrite回到不带.shtml的url,然后缓存该页面
z
zhuyingxi1
您说的这个我清楚,但是目前服务器是动态数据,并不存在真实的64000.shtml这个文件,我是希望访问/main/64000的时候nginx代理请求,将response静态化到/cache/64000.shtml中,然后rewrite直接访问/cache/64000.shtml,而浏览器的URL显示http://hostname/main/64000.shtml
iSea
iSea
反过来也是可行的
0
小马-过河
小马-过河
可以伪静态化
0
Ken5233
Ken5233

请教下楼主,顺便借贵宝地发问: 

在hosts下新增一个域名,指向本机;如: main.com ,当我访问 main.com时正常;想要实现 xxx.main.com 时,却总是显示无法访问。想问下,难道nginx不支持这样吗?我的配置如下:

upstream webserver {  
      server 10.1.9.216:8080 down;
      #server 10.1.10.54:80 weight=5;  
      server 10.1.9.239:8080 weight=5;
    }

    # server for sub-domain
    server {
	listen 80;
	server_name ~^(.*)\.main\.com$;
	set $name $1;
	#rewrite ^ http://www.afen.cn/$name$request_uri ;
	rewrite ^ http://main.com/shop/member?x=$1&y=$name last;
    }
    
    
    #server {
	#listen 80;
	#server_name *.main.com;
	
	#location / {
	    #index index.htm index.html index.jsp;
	    #proxy_pass http://main.com/shop/member!login.action?x=$1;
	    #proxy_redirect    off;
     	    #proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
     	    #proxy_set_header  X-Real-IP  $remote_addr;
     	    #proxy_set_header  Host $http_host;
	#}
    #}
    
    server {
        listen       80;
        server_name  main.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   html;
            index  index.html index.htm index.jsp index.ftl;
	    proxy_pass http://webserver;
	    proxy_redirect    off;
     	    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
     	    proxy_set_header  X-Real-IP  $remote_addr;
     	    proxy_set_header  Host $http_host;
        }
	
	location ~ .*\.(gif|jpg|jpeg|png|htm|html|bmp|flv|ico|swf)$
   	{
	    proxy_pass http://webserver;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_cache cache_one;
            proxy_cache_valid 200 302 1h;
            proxy_cache_valid 301 1d;
            proxy_cache_valid any 1m;
     	    expires      30d;
   	}
   	location ~ .*\.(js|css)?$
   	{
	    proxy_pass http://webserver;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_cache cache_one;
            proxy_cache_valid 200 302 1h;
            proxy_cache_valid 301 1d;
            proxy_cache_valid any 1m;
     	    expires      1h;
   	}

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

iSea
iSea
回复 @helloming : 就是说你的顶级域名已经通过host配置指向你的本地主机了,但是泛域名却没有解析到你的本地主机,所以访问的时候这个泛域名是无法访问的。你的nginx配置绑定的泛域名也就不起作用了。
Ken5233
Ken5233
回复 @ISea : 不好意思,你能指明白些吗?
iSea
iSea
回复 @helloming : 但是你的域名没有指向主机呀,所以根本就没有访问进到nginx这层。。。
Ken5233
Ken5233
回复 @ISea :  我的配置中,已经声明了泛域名了吧,做了rewrite呀
iSea
iSea
回复 @helloming : 你这个是泛域名解析,host好像是没法做到的
下一页
0
小虫0302
小虫0302

结合为静态来做就可以了

http://127.0.0.1/main/64000

先判断是否有静态缓存,没有就生成整个页面缓存,有就读取缓存, 过期也重新生成。

返回顶部
顶部