nginx配置靜態文件


一、背景

我們在使用nginx的時候會進行靜態資源的配置,網上有很多方法,這里記錄一下自己遇到的問題。

 二、nginx下載與目錄結構

下載nginx的服務器:下載地址,下載完成后解壓一下就可以了。

核心目錄結構如下

# 相同 1. html文件夾 默認的文件,存放默認的html 2.logs文件夾 記錄錯誤和運行日志,這個可以進行排錯 3.conf文件夾 最為重要的文件,用於uri的配置 # 不同 # nginx.exe Windows下的nginx啟動目錄 # sbin文件 Linux下的nginx啟動目錄

三、基礎命令

列舉一些常用的指令,在不同的語法上,運行的指令都差不多。

# windows下的 # 啟動nginx nginx start # nginx重載 nginx -s reload # nginx停止 nginx -s stop # nginx退出 nginx -s quit # linux下的(與前面一致) ./nginx [args]

四、路由配置

4.1 location配置

4.1.1 路由配置含義

# 路由匹配前綴內容 =:精確匹配 ^~:精確前綴匹配 ~:區分大小寫的正則匹配 ~*:不區分大小寫的正則匹配 /uri:普通前綴匹配 /:通用匹配

4.1.2 規則路由與請求uri

# 規則設置 location = / { echo "規則A"; } location = /login { echo "規則B"; } location ^~ /static/ { echo "規則C"; } location ^~ /static/files { echo "規則X"; } location ~ \.(gif|jpg|png|js|css)$ { echo "規則D"; } location ~* \.png$ { echo "規則E"; } location /img { echo "規則Y"; } location / { echo "規則F"; } # uri配置下的請求路由 請求uri 匹配路由規則 http://localhost/ 規則A
http://localhost/login 規則B
http://localhost/register 規則F
http://localhost/static/a.html 規則C
http://localhost/static/files/a.txt 規則X
http://localhost/a.png 規則D
http://localhost/a.PNG 規則E
http://localhost/img/a.gif 規則D
http://localhost/img/a.tiff 規則Y

4.1.3 路徑選擇

在進行配置的時候需要使用到一些路徑的管理,這里包括兩個方法root和alias,其中alias只能在location中使用,而root可以任意使用。其中root和alias的區別如下:

1. root

root的默認是html的根目錄,把資源都放到html下基本不會出現問題,然后搜索的路徑就是root和請求的路徑一起作為搜索路徑,這樣就可以實現整個路由的訪問和資源的獲取。

# 請求公式 搜索路徑=root+請求路徑 # location配置 location \ { root html; } # 請求路由 http:localhost/video/1.webm # 搜索路徑就是 root下的video文件夾下的1.webm資源

2. alias

alias會替換原來的路徑,因此需要在最后添加反斜杠(\)這樣來拼接路由,否則就會直接是請求的路由和alias連接在一起。這樣的做法可以進行任意路徑的匹配,尤其是在不使用默認的html目錄文件作為映射資源的時候更為重要。

# 請求公式 搜索路由 = 配置路由 # location配置 location \ { alias E:\\sources\\; } # 請求路由 http:localhost/video/1.webm # 搜索路徑 # 就是alias文件下的video文件夾中1.webm資源 E:\\sources\video/1.webm

4.2 實例

如我需要在nginx下使用video來進行視頻數據的代理請求,就會訪問下面這樣的url,如果不將其放在默認的HTML下那么在url請求就會出現一些不合理的結果。

# 訪問的url路由
http://localhost/video/1291543.webm

首先需要配置它的路由/video/

目錄結構是video目錄在這個文件目標文件下面,不在默認的html文件中。

使用root的配置情況如下,需要指定video所在文件的上級目錄文件,而不是video文件本身所在的層級。

location  /video/ { #指定視頻、音頻存放路徑 alias E:\\web_server\\nginx-1.18.0\\; autoindex on; }

在video文件夾所在級目錄就會出現,如果帶上video的訪問就會出現下面的問題,如果不帶video文件訪問就會出現和訪問通配路由沖突的情況,或者在video的文件夾下面在嵌套一層video這都不合理。

CreateFile()"E:\web_server\nginx1.18.0\video/video/1291543.webm"

出現上述的情況,因為存在一個通配路由/,因此直接使用url匹配會出現定位會沖突或者無此路由規則,解決辦法可以使用正則匹配高於一般的路由配置或者直接使用alias。

因此使用alias的配置如下

location  /video/ { #指定視頻、音頻存放路徑 alias E:\\web_server\\nginx-1.18.0\\video\\; autoindex on; }

這樣就可以直接訪問video下面的數據信息,如果還是訪問不到就關閉所有的nginx進程重新啟動。

4.3 其他配置

nginx的其他配置

include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型 sendfile on; #開啟高效文件傳輸模式, autoindex on; #開啟目錄列表訪問,合適下載服務器,默認關閉。 tcp_nopush on; #防止網絡阻塞 tcp_nodelay on; #防止網絡阻塞 keepalive_timeout 120; #長連接超時時間,單位是秒 gzip on; #開啟gzip壓縮輸出

4.4 url訪問

通過上述內容,最后設計的nginx代理內容如下,包括文件位置、路由設置、url如何訪問

# 目錄文件結構 video和nginx.exe目錄同級 # nginx配置 # alias版本: location /video/ { #指定視頻、音頻存放路徑 alias E:\\web_server\\nginx-1.18.0\\video\\; autoindex on; } # root版本 location /video/ { #指定視頻、音頻存放路徑 root E:\\web_server\\nginx-1.18.0; autoindex on; } # url訪問 # 在video中添加這個視頻資源就可以了 http://localhost/video/1291543.webm

五、總結

1.nginx的信息會記錄在log文件中,可以查看運行記錄來查看日志信息,以此查詢出錯原因。

2.可以通過結束進程重新啟動nginx來更新數據,單純的使用reload加載可能會出現一些問題,就是運行了多個進程。

參考

以下的博客有更加詳細的記載。

路由配置詳細介紹

root和alias區別

nginx的其他配置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM