nginx静态资源服务器(三)

如果你的项目满足第一篇和第二篇文章介绍的,那么恭喜你,解决问题了,但是很多项目并不是一下子就事先搭建nginx静态服务器的,都是在问题出现之后,才进行架构重构的。


之前我们遇到这样的一个问题,通过不同机构,获取该机构下的某张图片,请求的url大致是这样的:http://localhost/projectName/img/10000/dept/1 ,其中10000表示机构ID,1表示该机构部门下的图片1.jpg ,遇到这样的问题,我们也很尴尬,因为图片存放在本地并不是根据结构来的。


还记得我们第一章说的 root        C:\image; 的注释吗? 如果不改变请求的url,那么就是要存在C:\image\img\10000\dept\1.jpg 这样的文件,但是事实上却不是这样的,而是 C:\image\images\10000\1.jpg,这样就导致之前的方式不能直接效仿了,而且我们一般推荐把所有的静态资源都存放到固定格式下面,而不是随每个项目再创建文件,这样不利于维护,我们通过重写URL和正则表达式可以达到满足的效果。

还是老规矩:我们就需要修改nginx.conf文件

#user  nobody;
worker_processes  1;#推荐worker数为cpu核数,避免cpu不必要的上下文切换
events {
    #表示每个worker进程所能建立连接的最大值
    #一个nginx最大的连接数max=worker_connections*worker_processes;
    #对于http请求本地资源最大并发数量为max
    #如果http作为反向代理,最大并发数为max/2。因为每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/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;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        # serve static files(css|js|image..)
        #
		
		location ~* ^/projectName/img/ {
			rewrite ^/projectName/img/(\d+)/dept/(\d+)$ /images/$1/$2.jpg last;
			  break;
		}
		
        location ~ ^/projectName/image/  {
			rewrite ^/projectName/image/(.*)$ /images/$1.jpg last;
            break;
        }
		
		 location ~ ^/(images|javascript|js|css|flash|media|static)/  {
          root        C:\image;
          access_log  on;
          expires     30d;
        }
		
        #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;
        }
    }
}

其中特别重要的是这句话:
rewrite ^/projectName/img/(\d+)/dept/(\d+)$ /images/$1/$2.jpg last;

1)首先通过正则表达式将请求的url匹配上
2)将匹配上的url 重定向为 /images/$1/$2
3) $1和$2 分别指的是 /projectName/img/(\d+)/dept/(\d+) 中的第一个(\d+)和第二个(\d+),依次对应





猜你喜欢

转载自blog.csdn.net/lovelong8808/article/details/80269324