nginx location的正則法則:
~ 為區分大小寫的匹配。
~* 不區分大小寫的匹配(匹配firefox的正則同時匹配FireFox)。
!~ 不匹配的
!~* 不匹配的
. 匹配除換行符以外的任意字符
location 匹配的優先級(與location在配置文件中的順序無關)
= 精確匹配會第一個被處理。如果發現精確匹配,nginx停止搜索其他匹配。
普通字符匹配,正則表達式規則和長的塊規則將被優先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
^~ 則只匹配該規則,nginx停止搜索其他匹配,否則nginx會繼續處理其他location指令。
最后匹配理帶有"~"和"~*"的指令,如果找到相應的匹配,則nginx停止搜索其他匹配;當沒有正則表達式或者沒有正則表達式被匹配的情況下,那么匹配程度最高的逐字匹配指令會被使用。
location / { proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } #error_page 404 /404.html; location ~* \.(html|htm|shtml|gif|jpg|jpeg|bmp|png|ico|js|mp4|css)$ { root /home/www/static/show; #expires expires 3d; }
注意一點的是:
我之前走了岔路,想用application相對路徑+文件路徑的正則來匹配,調試了半天都沒有通過。在線的正則匹配不支持nginx的規則。
經同事提醒,可以使用文件的相對路徑正則+root到相應靜態文件的目錄,例如
root /home/www/static/show;
而不是location的正則。
參考文獻:
http://blog.csdn.net/gzh0222/article/details/7845981
http://blog.csdn.net/kobejayandy/article/details/20805059