Nginx的靜態(tài)處理能力很強(qiáng),但是動態(tài)處理能力不足,因此,在企業(yè)中常用動靜分離技術(shù)。動靜分離技術(shù)其實(shí)是采用代理的方式,在server{}段中加入帶正則匹配的location來指定匹配項(xiàng),在Nginx的配置中,是通過location配置段配合正則匹配實(shí)現(xiàn)靜態(tài)與動態(tài)頁面的不同處理方式。
nginx location的正則法則:
~ 為區(qū)分大小寫的匹配。
~* 不區(qū)分大小寫的匹配(匹配firefox的正則同時(shí)匹配FireFox)。
!~ 不匹配的
!~* 不匹配的
. 匹配除換行符以外的任意字符
location 匹配的優(yōu)先級(與location在配置文件中的順序無關(guān))
= 精確匹配會第一個(gè)被處理。如果發(fā)現(xiàn)精確匹配,nginx停止搜索其他匹配。
普通字符匹配,正則表達(dá)式規(guī)則和長的塊規(guī)則將被優(yōu)先和查詢匹配,也就是說如果該項(xiàng)匹配還需去看有沒有正則表達(dá)式匹配和更長的匹配。
^~ 則只匹配該規(guī)則,nginx停止搜索其他匹配,否則nginx會繼續(xù)處理其他location指令。
最后匹配理帶有"~"和"~*"的指令,如果找到相應(yīng)的匹配,則nginx停止搜索其他匹配;當(dāng)沒有正則表達(dá)式或者沒有正則表達(dá)式被匹配的情況下,那么匹配程度最高的逐字匹配指令會被使用。
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; }
注意一點(diǎn)的是:
我之前走了岔路,想用Application相對路徑+文件路徑的正則來匹配,調(diào)試了半天都沒有通過。在線的正則匹配不支持nginx的規(guī)則。
經(jīng)同事提醒,可以使用文件的相對路徑正則+root到相應(yīng)靜態(tài)文件的目錄,例如
root /home/www/static/show;
而不是location的正則。
參考文獻(xiàn):
https://www.jianshu.com/p/4a3dd77fe3e5
http://blog.csdn.net/gzh0222/article/details/7845981
http://blog.csdn.net/kobejayandy/article/details/20805059