最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nginx優(yōu)化與防盜鏈配置過程

 更新時間:2026年03月02日 09:10:25   作者:木合杉  
本文介紹了Nginx配置的最佳實(shí)踐,包括隱藏版本號、分割日志文件、啟用壓縮、圖片緩存、并發(fā)設(shè)置以及優(yōu)化其他配置

隱藏版本號

隱藏Nginx的版本號是一種安全實(shí)踐,因?yàn)橥ㄟ^查看服務(wù)器的版本號,潛在攻擊者可能會利用已知的漏洞來攻擊服務(wù)器。

curl -I http://192.168.41.10

通過Nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

在Nginx的配置文件(通常是nginx.conf)中添加或修改server_tokens指令。這個指令控制Nginx在HTTP響應(yīng)頭中是否顯示版本號。

http {
    server_tokens off;
    # other configurations...
}

server_tokens設(shè)置為off將隱藏版本號。在修改配置后,重新加載Nginx配置以使更改生效。

修改nginx.h源碼文件重新編譯安裝

vim /opt/nginx-1.22.0/src/core/nginx.h
#define NGINX_VERSION  "1.22.0"

可以將其修改為一個自定義的字符串,例如:

#define NGINX_VERSION  "Custom Version"

重新編譯

cd /opt/nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install

分割日志文件

基于原日志文件分割當(dāng)天日志

建立腳本

#!/bin/bash
#獲取當(dāng)前的日期,年-月-日
d=$(date +%Y-%m-%d)

#定義存儲的目錄
dir="/usr/local/nginx/logs"

#定義分割的源日志
logs_file="/usr/local/nginx/logs/access.log"
logs_error="/usr/local/nginx/logs/error.log"

#定義出nginx的pid文件
pid_file='/usr/local/nginx/run/nginx.pid'

if [ ! -d "$dir" ]
then
  mkdir -p $dir
fi

#mv來對原日志文件重命名
mv ${logs_file} ${dir}/access_$wppm3vysvbp.log
mv ${logs_error} ${dir}/error_$wppm3vysvbp.log
#mv /usr/local/ngin/logs/access.log /usr/local/nginx/logs/access_2023_11_15.log

kill -USR1 $(cat ${pid_file})
#向nginx程序傳送一個信號 USR1,讓nginx重新生成一個新的日志文件

find ${dir} -mtime +30 -exec rm -rf {} \;
#把30天之前修改過的文件,刪除。清楚一下過期的日志文件。

賦權(quán)執(zhí)行腳本

chmod 777 nginxlog.sh
. nginxlog.sh

設(shè)置定時任務(wù)

crontab -e
0 0 * * * /opt/nginxlog.sh  

網(wǎng)頁壓縮

啟用壓縮:

在 Nginx 配置文件中,你需要啟用 gzip 模塊。通常,這個模塊已經(jīng)默認(rèn)啟用,但你可以確保以下配置存在:

gzip on;

這將啟用壓縮功能。

設(shè)置壓縮類型:

使用 gzip_types 指令來指定需要壓縮的 MIME 類型。例如:

gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

這是一個示例,你可以根據(jù)你的應(yīng)用程序的需要添加或移除適當(dāng)?shù)?MIME 類型。

壓縮級別:

通過 gzip_comp_level 設(shè)置壓縮級別。級別范圍是 1 到 9,級別越高,壓縮效果越好,但 CPU 消耗也會增加。默認(rèn)級別是 1。

gzip_comp_level 6;

最小壓縮文件大?。?/strong>

使用 gzip_min_length 指令設(shè)置允許壓縮的最小文件大小。小于該大小的文件將不會被壓縮。

gzip_min_length 1000;

壓縮緩沖區(qū)大?。?/strong>

使用 gzip_buffers 指令設(shè)置壓縮緩沖區(qū)的大小。

gzip_buffers 4 16k;

這里的 4 表示緩沖區(qū)的數(shù)量,16k 表示每個緩沖區(qū)的大小。

禁用壓縮的 User-Agent:

如果有一些 User-Agent 不支持壓縮,你可以使用 gzip_disable 指令將其排除。

gzip_disable "MSIE [1-6]\.";

上述配置將禁用對 MSIE 6 及以下版本的 Internet Explorer 的壓縮。

啟用壓縮的文件擴(kuò)展名:

使用 gzip_proxied 指令來定義啟用壓縮的文件擴(kuò)展名。

gzip_proxied any;

這將允許任何請求啟用壓縮。

開啟壓縮的 HTTP 版本:

使用 gzip_http_version 指令可以指定在哪個 HTTP 版本下啟用壓縮。

gzip_http_version 1.1;

重啟 Nginx:

修改配置后,確保重新加載或重啟 Nginx 以使更改生效:

sudo systemctl reload nginx

請注意,啟用壓縮可能會增加 CPU 的負(fù)擔(dān),因此在生產(chǎn)環(huán)境中應(yīng)該根據(jù)服務(wù)器的性能和網(wǎng)絡(luò)帶寬來調(diào)整相關(guān)配置。適當(dāng)?shù)呐渲每梢燥@著提高頁面加載速度,特別是對于具有大量文本內(nèi)容的網(wǎng)頁。

圖片緩存

Nginx 可以通過配置來緩存圖片以提高網(wǎng)站性能和加載速度。這種緩存可以減少對后端服務(wù)器的請求,提升用戶體驗(yàn)

設(shè)置緩存路徑:

首先,需要定義用于存儲緩存的路徑??梢栽?Nginx 配置文件中添加類似如下的配置:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
  • /path/to/cache 是用于存儲緩存的路徑。
  • levels=1:2 指定存儲目錄的層次結(jié)構(gòu)。
  • keys_zone=my_cache:10m 定義緩存鍵值對的名稱和大小。
  • max_size=10g 設(shè)置緩存的最大大小。
  • inactive=60m 定義緩存文件在一定時間內(nèi)未被訪問時被認(rèn)為是不活躍的,Nginx會刪除這些不活躍的緩存文件。
  • use_temp_path=off 禁用臨時路徑。

配置緩存規(guī)則:

接下來,需要為圖片文件配置緩存規(guī)則。在 Nginx 配置文件中的 server 塊中添加類似如下的配置:

location ~* \.(png|jpg|jpeg|gif|ico)$ {
    proxy_cache my_cache;
    proxy_cache_valid 200 60m;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_pass http://backend_server;
}
  • location 指定了匹配圖片文件的位置。
  • proxy_cache my_cache; 將圖片文件緩存到名為 my_cache 的緩存區(qū)域。
  • proxy_cache_valid 200 60m; 定義緩存的有效期,這里是 60 分鐘。
  • proxy_cache_key 設(shè)置緩存鍵值,這里使用了一些請求信息作為鍵值。
  • proxy_pass 定義了后端服務(wù)器的地址。

重啟 Nginx:

修改配置后,確保重新加載或重啟 Nginx 以使更改生效:

sudo systemctl reload nginx

這樣配置后,Nginx 將會緩存圖片文件,當(dāng)有用戶請求圖片時,Nginx 會先檢查緩存中是否存在對應(yīng)的文件,如果存在且在有效期內(nèi),就會直接返回緩存的文件,而不去請求后端服務(wù)器。這有助于提高網(wǎng)站性能和減少對服務(wù)器的請求壓力。記得根據(jù)實(shí)際需求和服務(wù)器資源進(jìn)行適當(dāng)?shù)恼{(diào)整。

并發(fā)設(shè)置,連接超時

Nginx 的并發(fā)設(shè)置涉及到多個配置參數(shù),其中最重要的是 worker_processesworker_connections。這兩個參數(shù)用于配置 Nginx 的工作進(jìn)程和每個工作進(jìn)程的最大并發(fā)連接數(shù)。

worker_processes:

worker_processes 指令用于設(shè)置 Nginx 啟動時的工作進(jìn)程數(shù)。一般來說,可以設(shè)置為服務(wù)器的 CPU 核心數(shù),以充分利用系統(tǒng)資源。例如,如果你的服務(wù)器有 4 個 CPU 核心,可以設(shè)置為:

worker_processes 4;

注意:設(shè)置過多的工作進(jìn)程可能會導(dǎo)致系統(tǒng)資源不足,而設(shè)置過少可能無法充分利用服務(wù)器性能。建議根據(jù)服務(wù)器的硬件配置和負(fù)載情況進(jìn)行調(diào)整。

worker_connections:

worker_connections 指令用于設(shè)置每個工作進(jìn)程的最大并發(fā)連接數(shù)。這個值的設(shè)定取決于服務(wù)器硬件資源和系統(tǒng)的 ulimit(打開文件描述符限制)。通常,可以設(shè)置為 1024 或更高。例如:

events {
    worker_connections 1024;
}

在高并發(fā)情況下,可能需要進(jìn)一步增加這個值,但要確保不超過系統(tǒng)的 ulimit 限制。

還可以通過修改系統(tǒng)的 ulimit 設(shè)置來提高文件描述符的限制。例如,在 Linux 系統(tǒng)中,可以通過以下命令修改:

ulimit -n 4096

這樣會將打開文件描述符的限制提高到 4096。

優(yōu)化其他配置:

在高并發(fā)環(huán)境下,還可以通過優(yōu)化其他一些配置來提高性能,如:

  • 啟用事件驅(qū)動模型:在 nginx.conf 文件中,確保 use epoll;use kqueue;(根據(jù)系統(tǒng)類型)已啟用。
  • 啟用 sendfile:在 nginx.conf 文件中,確保 sendfile on; 已啟用。
  • 啟用 TCP nodelay:在 nginx.conf 文件中,確保 tcp_nodelay on; 已啟用。
  • 啟用 TCP nopush:在 nginx.conf 文件中,確保 tcp_nopush on; 已啟用。

總體而言,Nginx 的并發(fā)設(shè)置需要根據(jù)具體的服務(wù)器硬件、網(wǎng)絡(luò)環(huán)境和應(yīng)用負(fù)載來進(jìn)行調(diào)整,因此需要不斷優(yōu)化和測試以達(dá)到最佳性能。

http {
...... 
    keepalive_timeout 65 180;  #指定TCP鏈接最多可以保持65秒
    client_header_timeout 80;  #請求頭
    client_body_timeout 80;    #請求體
...... 
} 

keepalive_timeout 65 180;

  • 這個指令用于配置HTTP keep-alive連接的超時時間。
  • 第一個參數(shù) 65 表示在連接空閑時間超過 65 秒后,連接可能被關(guān)閉。
  • 第二個參數(shù) 180 表示一個連接上允許的最大空閑時間,即連接在空閑時間達(dá)到 180 秒后,可能被強(qiáng)制關(guān)閉。

client_header_timeout 80;

  • 這個指令用于配置客戶端發(fā)送HTTP請求頭的超時時間。
  • 參數(shù) 80 表示客戶端在發(fā)送請求頭的過程中,如果在 80 秒內(nèi)沒有完成發(fā)送,連接可能被關(guān)閉。
  • 如果客戶端在指定時間內(nèi)沒有發(fā)送任何內(nèi)容,Nginx 返回 HTTP 408(Request Timed Out)。

client_body_timeout 80;

  • 這個指令用于配置客戶端發(fā)送HTTP請求體的超時時間。
  • 參數(shù) 80 表示客戶端在發(fā)送請求體的過程中,如果在 80 秒內(nèi)沒有完成發(fā)送,連接可能被關(guān)閉。

連接保持與會話保持

連接保持(Connection Keep-Alive):

特點(diǎn):

  • 是一種通過在單個TCP連接上保持多個HTTP請求/響應(yīng)的機(jī)制。

  • 允許在同一連接上發(fā)送多個請求,而無需為每個請求都重新建立TCP連接,從而減少了連接的開銷。

  • 提高了性能,尤其是在多個資源需要加載的情況下,因?yàn)榭梢灾赜猛贿B接。

實(shí)現(xiàn):

  • 通過在HTTP頭中包含 Connection: keep-alive 字段來實(shí)現(xiàn)。

  • Web服務(wù)器和客戶端都必須支持并啟用連接保持。

會話保持(Session Persistence):

特點(diǎn):

  • 是確保用戶的一系列請求都被路由到同一臺服務(wù)器的機(jī)制。

  • 在負(fù)載均衡環(huán)境中,避免用戶在不同服務(wù)器之間失去會話狀態(tài)。

  • 常用于需要用戶保持登錄狀態(tài)或其他會話信息的應(yīng)用程序。

實(shí)現(xiàn):

  • 通過在負(fù)載均衡器上維護(hù)會話信息,確保相同用戶的請求都被路由到同一臺服務(wù)器。

  • 常見的實(shí)現(xiàn)方式包括基于IP地址的粘滯會話(Sticky Sessions)或使用會話標(biāo)識符在服務(wù)器之間進(jìn)行共享。

區(qū)別:

焦點(diǎn)不同:

  • 連接保持關(guān)注的是在單個TCP連接上重用HTTP請求和響應(yīng),以減少連接建立和關(guān)閉的開銷。

  • 會話保持關(guān)注的是確保用戶的所有請求都被路由到同一臺服務(wù)器,以保持應(yīng)用程序的會話狀態(tài)。

應(yīng)用場景不同:

  • 連接保持通常用于提高性能,減少重復(fù)的TCP連接建立和關(guān)閉。

  • 會話保持通常用于確保在負(fù)載均衡環(huán)境中保持用戶會話狀態(tài)。

實(shí)現(xiàn)方式不同:

  • 連接保持是通過HTTP頭中的 Connection: keep-alive 實(shí)現(xiàn)的。

  • 會話保持通常是在負(fù)載均衡器上實(shí)現(xiàn)的,使用IP地址、會話標(biāo)識符等來確保請求路由到同一臺服務(wù)器。

在某些情況下,這兩個機(jī)制可能會一起使用,以提供更好的性能和用戶體驗(yàn)。

nginx中當(dāng)cpu頻繁切換時怎么辦

查看cpu的核心數(shù),根據(jù)核心數(shù)來設(shè)置工作進(jìn)程數(shù)

查看cpu核數(shù)
cat /proc/cpuinfo |grep processor|wc -l

cat /proc/cpuinfo |grep -c processor

cat /proc/cpuinfo | grep -c "physical id"

worker_processes最多開啟8個,8個以上性能就不會再提升了,而且穩(wěn)定性會變的更低,因此8個進(jìn)程夠用了

可以使用進(jìn)程綁定。進(jìn)程綁定是指將一個進(jìn)程或線程綁定到特定的CPU核心上,以確保它只在該核心上運(yùn)行。這可以提高性能,減少由于上下文切換引起的開銷。

vim /usr/local/nginx/conf/nginx.conf
worker_processes  4;                #修改為核數(shù)相同或者2倍
worker_cpu_affinity 0001 0010 0100 1000;    
#worker_cpu_affinity 是一個用于設(shè)置 worker 進(jìn)程綁定到指定 CPU 的指令。
將 Nginx worker 進(jìn)程綁定到特定的 CPU 核心,以提高性能和避免 CPU Cache 的偽共享。

通過將 worker 進(jìn)程綁定到特定的 CPU 核心,可以減少 CPU 切換(context switching)的開銷,
并確保 worker 進(jìn)程在一個獨(dú)立的 CPU 核心上運(yùn)行,避免了不同進(jìn)程間的 CPU Cache 競爭,從而提高了整體性能    

time_wait 優(yōu)化

TCP連接生命周期(狀態(tài))

TCP(傳輸控制協(xié)議)是一種面向連接的協(xié)議,它在通信的兩端創(chuàng)建一個可靠的、全雙工的通信。TCP連接的狀態(tài)是在通信的不同階段中表示連接狀態(tài)的一種標(biāo)志。以下是常見的TCP連接狀態(tài):

  • CLOSED(關(guān)閉): 初始狀態(tài),表示TCP連接未打開。
  • LISTEN(監(jiān)聽): 服務(wù)器端的某個套接字處于監(jiān)聽狀態(tài),可以接受客戶端的連接請求。
  • SYN_SENT(同步已發(fā)送): 客戶端發(fā)送連接請求(SYN)后等待確認(rèn)。
  • SYN_RECEIVED(同步已接收): 服務(wù)器端收到客戶端的連接請求并發(fā)送確認(rèn)。
  • ESTABLISHED(已建立): 連接已經(jīng)建立,雙方可以進(jìn)行數(shù)據(jù)傳輸。
  • FINWAIT1(等待對方的結(jié)束連接請求): 一方(通常是客戶端)發(fā)送了結(jié)束連接請求,等待對方的確認(rèn)。
  • FINWAIT2(等待對方的結(jié)束連接請求): 一方接收到對方的結(jié)束連接請求,等待對方的確認(rèn)。
  • CLOSE_WAIT(等待關(guān)閉): 一方已經(jīng)關(guān)閉連接,另一方還在繼續(xù)傳輸數(shù)據(jù)。
  • CLOSING(關(guān)閉中): 兩邊同時嘗試關(guān)閉連接,出現(xiàn)在一方發(fā)送結(jié)束連接請求,另一方也發(fā)送結(jié)束連接請求的情況。
  • LAST_ACK(最后確認(rèn)): 一方發(fā)送結(jié)束連接請求,等待對方的確認(rèn),同時仍然可以發(fā)送數(shù)據(jù)。
  • TIME_WAIT(時間等待): 連接已經(jīng)關(guān)閉,但在一段時間內(nèi)保持連接狀態(tài),以確保遲到的數(shù)據(jù)包不會引起混亂。

這些狀態(tài)描述了TCP連接在建立、傳輸數(shù)據(jù)和關(guān)閉過程中的不同階段。不同的狀態(tài)之間的轉(zhuǎn)換構(gòu)成了TCP連接的生命周期。理解這些狀態(tài)對于網(wǎng)絡(luò)故障排查和性能優(yōu)化非常重要。

  • TIMEWAIT狀態(tài)是TCP連接關(guān)閉(四次揮手)后,等待一段時間以確保對方收到最后的ACK的狀態(tài),是tcp連接狀態(tài)的一種,不是報(bào)錯。在高并發(fā)的情況下,大量的TIMEWAIT狀態(tài)可能會導(dǎo)致端口耗盡等問題。
  • 在timewait狀態(tài)下,tcp處于連接等待,等待一定的時間,確保所有數(shù)據(jù)全部傳送完畢。如果需要繼續(xù)傳輸數(shù)據(jù),可以繼續(xù)使用已建立的這個連接,無須再次發(fā)起連接請求。確保所有的連接。都是可靠的關(guān)閉。timewait在連接正常關(guān)閉之后,經(jīng)歷一段時間之后,會自動關(guān)閉,自動消失。占用資源非常小,對服務(wù)器的性能影響有限。大型網(wǎng)站會關(guān)注這個問題。

查看所有tcp的連接狀態(tài):

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'.

這是一個用于統(tǒng)計(jì)TCP連接狀態(tài)的命令,通過結(jié)合netstatawk來實(shí)現(xiàn)。

  • netstat -n: 這部分命令用于顯示網(wǎng)絡(luò)統(tǒng)計(jì)信息,其中-n選項(xiàng)表示以數(shù)字形式顯示地址和端口號,而不是嘗試解析為域名和服務(wù)名。
  • |: 這是管道符號,它將netstat -n的輸出傳遞給下一個命令。
  • awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}':這是一個用AWK編寫的腳本,用于對netstat -n的輸出進(jìn)行處理。
  • /^tcp/: 這是一個模式匹配,表示只處理以 "tcp" 開頭的行。
  • {++S[$NF]}: 這是一個動作,對于匹配的行,它會自增一個數(shù)組S的元素,該元素的索引是最后一列($NF)的值。這相當(dāng)于在數(shù)組S中統(tǒng)計(jì)每種TCP連接狀態(tài)的數(shù)量。
  • END {for(a in S) print a, S[a]}: 在處理完所有行后,這個部分會在最終的總結(jié)階段執(zhí)行。它使用for循環(huán)遍歷數(shù)組S,并打印出每種TCP連接狀態(tài)及其對應(yīng)的數(shù)量。

綜合起來,該命令的目的是列出系統(tǒng)中各種TCP連接狀態(tài)的數(shù)量。這在網(wǎng)絡(luò)故障排查或性能監(jiān)測時很有用,可以幫助識別系統(tǒng)中連接狀態(tài)的分布情況。

TCP優(yōu)化

查看當(dāng)前sysctl參數(shù):

使用以下命令查看當(dāng)前系統(tǒng)的sysctl參數(shù):

sysctl -a

臨時修改參數(shù):

可以使用以下命令臨時修改參數(shù),這些修改在系統(tǒng)重啟后會失效:

sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_fin_timeout=60

永久修改參數(shù):

若要使更改永久生效,需要編輯系統(tǒng)的sysctl配置文件。配置文件通常位于 /etc/sysctl.conf/etc/sysctl.d/*.conf。使用文本編輯器打開文件:

sudo nano /etc/sysctl.conf

或者(如果存在):

sudo nano /etc/sysctl.d/99-custom.conf

在文件中添加或修改需要的參數(shù),然后保存并關(guān)閉文件。

net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=60

最后,運(yùn)行以下命令使更改生效:

sudo sysctl -p

上述命令會重新加載sysctl配置文件,使新的參數(shù)生效。

請注意,修改內(nèi)核參數(shù)可能會對系統(tǒng)性能產(chǎn)生影響,因此在修改之前,請確保你了解每個參數(shù)的作用及其可能的影響,并在生產(chǎn)環(huán)境中謹(jǐn)慎操作。

net.ipv4.tcp_syncookies=1

  • 含義:啟用TCP SYN Cookies。

  • 解釋:當(dāng)系統(tǒng)面臨SYN隊(duì)列溢出時,啟動TCP SYN Cookies是一種防范機(jī)制。SYN Cookies允許服務(wù)器在SYN隊(duì)列溢出時繼續(xù)接受連接請求,而不是拒絕請求。

net.ipv4.tcp_tw_reuse=1

  • 含義:允許重用TIME_WAIT狀態(tài)的端口。

  • 解釋:TIMEWAIT狀態(tài)是在連接關(guān)閉后,等待足夠的時間確保遠(yuǎn)端收到連接關(guān)閉的確認(rèn)。啟用tcp_tw_reuse允許將TIMEWAIT狀態(tài)的端口快速重用,即使該端口還在TIME_WAIT狀態(tài),也可以為新的連接使用。

net.ipv4.tcp_tw_recycle=1

  • 含義:啟用TIME_WAIT狀態(tài)的快速回收。

  • 解釋:TIMEWAIT狀態(tài)的快速回收意味著內(nèi)核會更積極地嘗試回收TIMEWAIT狀態(tài),以釋放系統(tǒng)資源。這個參數(shù)在某些情況下可能導(dǎo)致問題,因?yàn)樗蕾囉谝恍┘僭O(shè),因此在某些網(wǎng)絡(luò)環(huán)境中可能不安全。

net.ipv4.tcp_fin_timeout=60

  • 含義:設(shè)置TCP連接的FIN-WAIT-2狀態(tài)的超時時間為60秒。

  • 解釋:當(dāng)一方發(fā)起關(guān)閉連接(發(fā)送FIN包)后,進(jìn)入FIN-WAIT-2狀態(tài),等待另一方的確認(rèn)。這個參數(shù)設(shè)置了在這個狀態(tài)停留的最大時間。在這里,設(shè)置為60秒,表示如果另一端在這個時間內(nèi)沒有發(fā)送確認(rèn),連接將被強(qiáng)制關(guān)閉。

配置防盜鏈

方法一:使用ngx_http_referer_module模塊

開啟 ngx_http_referer_module 模塊

在 Nginx 配置文件中,在需要防盜鏈的位置,添加類似如下的代碼:

location / {
    valid_referers none blocked example.com *.example.com;
    if ($invalid_referer) {
        return 403;
    }
    # 其他配置
}

這個配置會驗(yàn)證請求的來源,如果不是在 valid_referers 列出的域名中,就會返回 403 狀態(tài)碼,拒絕訪問。

重新加載 Nginx 配置

確保配置文件修改后,使用命令行執(zhí)行 nginx -s reload 來重新加載配置文件。

方法二:使用secure_link模塊

開啟 secure_link 模塊

這個模塊需要在 Nginx 編譯時加入,可以在編譯時通過添加 --with-http_secure_link_module 來啟用。

生成鏈接

在需要進(jìn)行防盜鏈的地方,可以通過類似如下的方式生成鏈接:

location / {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "secret$uri$remote_addr$arg_expires";
    if ($secure_link = "") {
        return 403;
    }
    if ($secure_link = "0") {
        return 410;
    }
    # 其他配置
}

這個配置會驗(yàn)證鏈接的有效性,如果鏈接無效或過期,會返回相應(yīng)的狀態(tài)碼。

生成鏈接參數(shù)

生成鏈接時需要包含 md5expires 參數(shù),其中 md5 是鏈接的加密簽名,expires 是鏈接的過期時間。

無論使用哪種方式,確保在配置完成后測試并檢查 Nginx 的日志文件以確保防盜鏈功能按預(yù)期工作。

盜圖

配置防盜鏈

vim /usr/local/nginx/conf/nginx.conf

http {
...........
server{
...........
location ~* \.(jpg|gif|swf)$ {            
         root  html;
         expires 1d;
         valid_referers none blocked *.kgc.com kgc.com;   
         if ( $invalid_referer ) {
           rewrite ^/ http://www.kgc.com/error.png;
           }
        }
............
}
...............
}

這段配置是在 Nginx 的 http 配置塊中的一個 server 配置塊中,針對請求以 .jpg、.gif.swf 結(jié)尾的資源文件的 location 塊。以下是對這段配置的解釋:

http {
    # 其他 http 配置

    server {
        # 其他 server 配置

        location ~* \.(jpg|gif|swf)$ { #
            root html;  # 設(shè)置資源文件的根目錄,資源文件應(yīng)該存儲在 Nginx 的 html 目錄下
            expires 1d;  # 設(shè)置瀏覽器緩存過期時間為 1 天

            valid_referers none blocked *.kgc.com kgc.com;  # 允許的合法引用者(referer),可以是 none(空)、blocked(空或錯誤的referer)、*.kgc.com 或 kgc.com。其他引用者會被視為非法

            if ($invalid_referer) {
                rewrite ^/ http://www.kgc.com/error.png;  # 如果引用者非法,則將請求重定向到 http://www.kgc.com/error.png
            }

            # 其他配置
        }

        # 其他 location 塊和配置
    }

    # 其他 server 配置和其他 http 配置
}

這段配置的作用是限制對以 .jpg.gif.swf 結(jié)尾的資源文件的訪問,只有在合法的引用者(referer)中才允許訪問。如果引用者不在指定的合法引用者列表中,將請求重定向到 http://www.kgc.com/error.png。同時,設(shè)置了這些資源文件的緩存過期時間為 1 天。

  • location: 定義了一個匹配請求 URL 路徑的位置塊。
  • ~*: 這是一個標(biāo)志,表示進(jìn)行大小寫不敏感的正則表達(dá)式匹配。使用 ~* 可以確保無論路徑中的字符是大寫還是小寫,都能成功匹配到相應(yīng)的規(guī)則。
  • ~: 表示進(jìn)行大小寫敏感的正則匹配。
  • ~*: 表示進(jìn)行大小寫不敏感的正則匹配。
  • \.(jpg|gif|swf)$: 這是一個正則表達(dá)式,用來匹配以 .jpg.gif.swf 結(jié)尾的 URL 路徑。

因此,這個位置塊會匹配類似于 example.com/image.jpg、example.com/files/file.swf 這樣以 .jpg、.gif.swf 結(jié)尾的 URL 路徑。

對于這些匹配的請求,配置中定義了相應(yīng)的處理規(guī)則,比如限制訪問權(quán)限或設(shè)置緩存等。

  • \.: 匹配一個點(diǎn)號,這里需要用反斜杠轉(zhuǎn)義,因?yàn)辄c(diǎn)號在正則表達(dá)式中表示任意字符。
  • (jpg|gif|swf): 這是一個括號內(nèi)的組,匹配文件擴(kuò)展名,其中 | 表示或的關(guān)系,匹配 .jpg.gif.swf。
  • $: 表示匹配字符串的結(jié)尾。

網(wǎng)頁準(zhǔn)備:

Web源主機(jī)(192.168.41.10)配置:

cd /usr/local/nginx/html

/usr/local/nginx/html下創(chuàng)建倆文件(right.jpg error.jpg)

vim index.html

<img src="game.jpg"/>
</body>
</html>

echo "192.168.233.61 www.kgc.com" >> /etc/hosts 
echo "192.168.233.62 www.benet.com" >> /etc/hosts 

盜鏈網(wǎng)站主機(jī)(192.168.41.11):

cd /usr/local/nginx/html
vim index.html
...... 
<img src="http://www.kgc.com/right.jpg"/>
</body>
</html>

echo "192.168.41.10 www.kgc.com" >> /etc/hosts 
echo "192.168.14.11 www.benet.com" >> /etc/hosts 

在盜圖網(wǎng)站主機(jī)上進(jìn)行瀏覽器驗(yàn)證

http://www.benet.com

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Nginx后端節(jié)點(diǎn)健康檢查實(shí)踐

    Nginx后端節(jié)點(diǎn)健康檢查實(shí)踐

    文章介紹了Nginx健康檢查的重要性及其ginx自帶健康檢查的機(jī)制及其不足,并詳細(xì)介紹了淘寶開發(fā)的check模塊的配置方法及其優(yōu)勢,最后,針對不同ginx原ginx自帶模塊和Tengine給出了適用場景建議
    2026-04-04
  • nginx基于域名,端口,不同IP的虛擬主機(jī)設(shè)置的實(shí)現(xiàn)

    nginx基于域名,端口,不同IP的虛擬主機(jī)設(shè)置的實(shí)現(xiàn)

    這篇文章主要介紹了nginx基于域名,端口,不同IP的虛擬主機(jī)設(shè)置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • nginx?如何配置文件上傳大小

    nginx?如何配置文件上傳大小

    這篇文章主要介紹了nginx?如何配置文件上傳大小,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 詳解nginx靜態(tài)資源服務(wù)器簡單配置

    詳解nginx靜態(tài)資源服務(wù)器簡單配置

    這篇文章主要介紹了詳解nginx靜態(tài)資源服務(wù)器簡單配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • linux(centos5.5)/windows下nginx開啟phpinfo模式功能的配置方法分享

    linux(centos5.5)/windows下nginx開啟phpinfo模式功能的配置方法分享

    某站點(diǎn)用到結(jié)合phpinfo功能的urlrewrite,在nginx中需要在nginx.conf文件中進(jìn)行配置才可支持phpinfo
    2013-02-02
  • Nginx多層代理下的“404”與“重定向死循環(huán)”深度排查與避坑指南

    Nginx多層代理下的“404”與“重定向死循環(huán)”深度排查與避坑指南

    最近在部署 MaxKey 認(rèn)證系統(tǒng)(基于 Angular 開發(fā))時,遇到了一個極其隱蔽的坑:后端 curl 正常,但域名訪問靜態(tài)資源報(bào) 404,且頁面陷入重定向死循環(huán), 本文將復(fù)盤排查過程并提供標(biāo)準(zhǔn)配置方案,需要的朋友可以參考下
    2026-05-05
  • 提升Nginx性能的一些建議

    提升Nginx性能的一些建議

    這篇文章主要介紹了提升Nginx性能的一些建議,幫助大家更好的使用nginx,感興趣的朋友可以了解下
    2020-09-09
  • 解決Nginx網(wǎng)關(guān)超時出現(xiàn)504 GATEWAY TIMEOUT的問題

    解決Nginx網(wǎng)關(guān)超時出現(xiàn)504 GATEWAY TIMEOUT的問題

    這篇文章主要給大家介紹了如何解決Nginx網(wǎng)關(guān)超時出現(xiàn)504 GATEWAY TIMEOUT的問題,文章通過代碼示例和圖文結(jié)合介紹的非常詳細(xì),有遇到相同問題的朋友可以參考閱讀本文
    2023-11-11
  • Nginx 站點(diǎn)垂直擴(kuò)容的幾種優(yōu)化方案

    Nginx 站點(diǎn)垂直擴(kuò)容的幾種優(yōu)化方案

    本文主要介紹了Nginx 站點(diǎn)垂直擴(kuò)容的幾種優(yōu)化方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • nginx代理去掉URL前綴的實(shí)現(xiàn)方法

    nginx代理去掉URL前綴的實(shí)現(xiàn)方法

    nginx作為一款廣泛使用的反向代理服務(wù)器,在實(shí)際應(yīng)用中,經(jīng)常需要去掉代理請求中的前綴,下面這篇文章主要給大家介紹了關(guān)于nginx代理去掉URL前綴的實(shí)現(xiàn)方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評論

锦州市| 宝鸡市| 微山县| 太谷县| 北辰区| 科技| 阿克苏市| 朝阳县| 辉南县| 皋兰县| 体育| 会宁县| 蒙山县| 淮北市| 富源县| 襄汾县| 平陆县| 满城县| 桑日县| 兴安县| 洪湖市| 苗栗市| 湖南省| 获嘉县| 邯郸县| 五台县| 嘉荫县| 万源市| 河东区| 商丘市| 清新县| 巧家县| 托克托县| 曲阜市| 互助| 宜章县| 株洲市| 射洪县| 介休市| 榆社县| 南投县|