nginx 重定向/跨域/黑白名單/防盜鏈/SSL/動(dòng)靜分離/資源壓縮/負(fù)載均衡

轉(zhuǎn)載自linux安裝nginx(詳細(xì)), 略加整理

一、nginx重定向

  1. 重定向到www
# if按照格式書寫,括號(hào)前后的空格必須帶著
server {
  listen 80;
  # listen 443;
  server_name www.xxx.com xxx.com;
  if ($host != 'www.xxx.com') {
  rewrite ^/(.*)$ http://www.xxx.com/$1 permanent;
  }
}

server {
  server_name  xxx.com;
  rewrite ^(.*)$ http://www.xxx.com$1 permanent;
}

  1. 重定向到https
# (提前配置好SSL證書)
server {
  listen 80;
  server_name www.xxx.com xxx.com;
  rewrite ^(.*)$ https://$host$1;
}

二、Nginx跨域配置

產(chǎn)生跨域問題的主要原因就在于 「同源策略」 ,為了保證用戶信息安全,防止惡意網(wǎng)站竊取數(shù)據(jù),同源策略是必須的,否則cookie可以共享。由于http無狀態(tài)協(xié)議通常會(huì)借助cookie來實(shí)現(xiàn)有狀態(tài)的信息記錄,例如用戶的身份/密碼等,因此一旦cookie被共享,那么會(huì)導(dǎo)致用戶的身份信息被盜取。
同源策略主要是指三點(diǎn)相同,「「協(xié)議+域名+端口」」 相同的兩個(gè)請(qǐng)求,則可以被看做是同源的,但如果其中任意一點(diǎn)存在不同,則代表是兩個(gè)不同源的請(qǐng)求,同源策略會(huì)限制了不同源之間的資源交互。

解決:在nginx.conf中稍微添加一點(diǎn)配置:

location / {  
    # 允許跨域的請(qǐng)求,可以自定義變量$http_origin,*表示所有  
    add_header 'Access-Control-Allow-Origin' *;  
    # 允許攜帶cookie請(qǐng)求  
    add_header 'Access-Control-Allow-Credentials' 'true';  
    # 允許跨域請(qǐng)求的方法:GET,POST,OPTIONS,PUT  
    add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';  
    # 允許請(qǐng)求時(shí)攜帶的頭部信息,*表示所有  
    add_header 'Access-Control-Allow-Headers' *;  
    # 允許發(fā)送按段獲取資源的請(qǐng)求  
    add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';  
    # 一定要有?。。》駝tPost請(qǐng)求無法進(jìn)行跨域!  
    # 在發(fā)送Post跨域請(qǐng)求前,會(huì)以O(shè)ptions方式發(fā)送預(yù)檢請(qǐng)求,服務(wù)器接受時(shí)才會(huì)正式請(qǐng)求  
    if ($request_method = 'OPTIONS') {  
        add_header 'Access-Control-Max-Age' 1728000;  
        add_header 'Content-Type' 'text/plain; charset=utf-8';  
        add_header 'Content-Length' 0;  
        # 對(duì)于Options方式的請(qǐng)求返回204,表示接受跨域請(qǐng)求  
        return 204;  
    }  
} 

三、Nginx實(shí)現(xiàn)IP黑白名單

有時(shí)候往往有些需求,可能某些接口只能開放給對(duì)應(yīng)的合作商,或者購買/接入API的合作伙伴,那么此時(shí)就需要實(shí)現(xiàn)類似于IP白名單的功能。而有時(shí)候有些惡意攻擊者或爬蟲程序,被識(shí)別后需要禁止其再次訪問網(wǎng)站,因此也需要實(shí)現(xiàn)IP黑名單。那么這些功能無需交由后端實(shí)現(xiàn),可直接在Nginx中處理。
Nginx做黑白名單機(jī)制,主要是通過allow、deny配置項(xiàng)來實(shí)現(xiàn):

allow xxx.xxx.xxx.xxx; # 允許指定的IP訪問,可以用于實(shí)現(xiàn)白名單。  
deny xxx.xxx.xxx.xxx; # 禁止指定的IP訪問,可以用于實(shí)現(xiàn)黑名單。  

同時(shí)屏蔽/開放多個(gè)IP訪問時(shí),如果所有IP全部寫在nginx.conf文件中定然是不現(xiàn)實(shí)的,這種方式比較冗余,那么可以新建兩個(gè)文件BlocksIP.conf、WhiteIP.conf:

# --------黑名單:BlocksIP.conf---------  
deny 192.177.12.222; # 屏蔽192.177.12.222訪問  
deny 192.177.44.201; # 屏蔽192.177.44.201訪問  
deny 127.0.0.0/8; # 屏蔽127.0.0.1到127.255.255.254網(wǎng)段中的所有IP訪問  

# --------白名單:WhiteIP.conf---------  
allow 192.177.12.222; # 允許192.177.12.222訪問  
allow 192.177.44.201; # 允許192.177.44.201訪問  
allow 127.45.0.0/16; # 允許127.45.0.1到127.45.255.254網(wǎng)段中的所有IP訪問  
deny all; # 除開上述IP外,其他IP全部禁止訪問  

分別將要禁止/開放的IP添加到對(duì)應(yīng)的文件后,可以再將這兩個(gè)文件在nginx.conf中導(dǎo)入:

http{  
    # 屏蔽該文件中的所有IP  
    include /soft/nginx/IP/BlocksIP.conf;   
 server{  
    location xxx {  
        # 某一系列接口只開放給白名單中的IP  
        include /soft/nginx/IP/blockip.conf;   
    }  
 }  
}  

對(duì)于文件具體在哪兒導(dǎo)入,這個(gè)也并非隨意的,如果要整站屏蔽/開放就在http中導(dǎo)入,如果只需要一個(gè)域名下屏蔽/開放就在sever中導(dǎo)入,如果只需要針對(duì)于某一系列接口屏蔽/開放IP,那么就在location中導(dǎo)入。

當(dāng)然,上述只是最簡單的IP黑/白名單實(shí)現(xiàn)方式,同時(shí)也可以通過ngx_http_geo_module、ngx_http_geo_module第三方庫去實(shí)現(xiàn)(這種方式可以按地區(qū)、國家進(jìn)行屏蔽,并且提供了IP庫)。

四、Nginx防盜鏈設(shè)計(jì)

首先了解一下何謂盜鏈:「「盜鏈即是指外部網(wǎng)站引入當(dāng)前網(wǎng)站的資源對(duì)外展示」」 ,來舉個(gè)簡單的例子理解:

好比壁紙網(wǎng)站X站、Y站,X站是一點(diǎn)點(diǎn)去購買版權(quán)、簽約作者的方式,從而積累了海量的壁紙素材,但Y站由于資金等各方面的原因,就直接通過<img src="X站/xxx.jpg" />這種方式照搬了X站的所有壁紙資源,繼而提供給用戶下載。

那么如果我們自己是這個(gè)X站的Boss,心中必然不爽,那么此時(shí)又該如何屏蔽這類問題呢?那么接下來要敘說的「「防盜鏈」」 登場了!
Nginx的防盜鏈機(jī)制實(shí)現(xiàn),跟一個(gè)頭部字段:Referer有關(guān),該字段主要描述了當(dāng)前請(qǐng)求是從哪兒發(fā)出的,那么在Nginx中就可獲取該值,然后判斷是否為本站的資源引用請(qǐng)求,如果不是則不允許訪問。Nginx中存在一個(gè)配置項(xiàng)為valid_referers,正好可以滿足前面的需求,語法如下:

valid_referers none | blocked | server_names | string ...;

  • none:表示接受沒有Referer字段的HTTP請(qǐng)求訪問。
  • blocked:表示允許http://或https//以外的請(qǐng)求訪問。
  • server_names:資源的白名單,這里可以指定允許訪問的域名。
  • string:可自定義字符串,支配通配符、正則表達(dá)式寫法。

簡單了解語法后,接下來的實(shí)現(xiàn)如下:

# 在動(dòng)靜分離的location中開啟防盜鏈機(jī)制  
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){  
    # 最后面的值在上線前可配置為允許的域名地址  
    valid_referers blocked 192.168.12.129;  
    if ($invalid_referer) {  
        # 可以配置成返回一張禁止盜取的圖片  
        # rewrite   ^/ http://xx.xx.com/NO.jpg;  
        # 也可直接返回403  
        return   403;  
    }  

    root   /soft/nginx/static_resources;  
    expires 7d;  
}  

根據(jù)上述中的內(nèi)容配置后,就已經(jīng)通過Nginx實(shí)現(xiàn)了最基本的防盜鏈機(jī)制,最后只需要額外重啟一下就好啦!當(dāng)然,對(duì)于防盜鏈機(jī)制實(shí)現(xiàn)這塊,也有專門的第三方模塊ngx_http_accesskey_module實(shí)現(xiàn)了更為完善的設(shè)計(jì),感興趣的小伙伴可以自行去看看。

五、Nginx配置SLL證書

隨著越來越多的網(wǎng)站接入HTTPS,因此Nginx中僅配置HTTP還不夠,往往還需要監(jiān)聽443端口的請(qǐng)求,HTTPS為了確保通信安全,所以服務(wù)端需配置對(duì)應(yīng)的數(shù)字證書,當(dāng)項(xiàng)目使用Nginx作為網(wǎng)關(guān)時(shí),那么證書在Nginx中也需要配置,接下來簡單聊一下關(guān)于SSL證書配置過程:

①先去CA機(jī)構(gòu)或從云控制臺(tái)中申請(qǐng)對(duì)應(yīng)的SSL證書,審核通過后下載Nginx版本的證書。
②下載數(shù)字證書后,完整的文件總共有三個(gè):.crt、.key、.pem:

  • .crt:數(shù)字證書文件,.crt是.pem的拓展文件,因此有些人下載后<mark style="box-sizing: border-box; outline: 0px; user-select: auto !important; background-color: rgb(248, 248, 64); color: rgb(0, 0, 0); font-synthesis-style: auto; overflow-wrap: break-word;">可能沒有</mark>。
  • .key:服務(wù)器的私鑰文件,及非對(duì)稱加密的私鑰,用于解密公鑰傳輸?shù)臄?shù)據(jù)。
  • .pem:Base64-encoded編碼格式的源證書文本文件,可自行根需求修改拓展名。

③在Nginx目錄下新建certificate目錄,并將下載好的證書/私鑰等文件上傳至該目錄。
④最后修改一下nginx.conf文件即可,如下:

# ----------HTTPS配置-----------  
server {  
    # 監(jiān)聽HTTPS默認(rèn)的443端口  
    listen 443;  
    # 配置自己項(xiàng)目的域名  
    server_name www.xxx.com;  
    # 打開SSL加密傳輸  
    ssl on;  
    # 輸入域名后,首頁文件所在的目錄  
    root html;  
    # 配置首頁的文件名  
    index index.html index.htm index.jsp index.ftl;  
    # 配置自己下載的數(shù)字證書  
    ssl_certificate  certificate/xxx.pem;  
    # 配置自己下載的服務(wù)器私鑰  
    ssl_certificate_key certificate/xxx.key;  
    ssl_session_cache    shared:SSL:1m;
    # 停止通信時(shí),加密會(huì)話的有效期,在該時(shí)間段內(nèi)不需要重新交換密鑰  
    ssl_session_timeout 5m;  
    # TLS握手時(shí),服務(wù)器采用的密碼套件  
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  
    # 服務(wù)器支持的TLS版本  
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;  
    # 開啟由服務(wù)器決定采用的密碼套件  
    ssl_prefer_server_ciphers on;  

    location / {  
        ....  
    }  
}  

# ---------HTTP請(qǐng)求轉(zhuǎn)HTTPS-------------  
server {  
    # 監(jiān)聽HTTP默認(rèn)的80端口  
    listen 80;  
    # 如果80端口出現(xiàn)訪問該域名的請(qǐng)求  
    server_name www.xxx.com;  
    # 將請(qǐng)求改寫為HTTPS(這里寫你配置了HTTPS的域名)  
    rewrite ^(.*)$ https://www.xxx.com;  
}  

根據(jù)如上配置了Nginx后,你的網(wǎng)站即可通過https://的方式訪問,并且當(dāng)客戶端使用http://的方式訪問時(shí),會(huì)自動(dòng)將其改寫為HTTPS請(qǐng)求。

六、Nginx動(dòng)靜分離

在項(xiàng)目上線部署時(shí),這些靜態(tài)資源會(huì)img|html|js|css...一起打成包,那這對(duì)于后端服務(wù)器的壓力是尤為巨大的。
①先在部署Nginx的機(jī)器,Nginx目錄下創(chuàng)建一個(gè)目錄static_resources

mkdir static_resources  

②將項(xiàng)目中所有的靜態(tài)資源全部拷貝到該目錄下,而后將項(xiàng)目中的靜態(tài)資源移除重新打包。
③稍微修改一下nginx.conf的配置,增加一條location匹配規(guī)則:

location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){  
    root   /soft/nginx/static_resources;  
    expires 7d;  
}  

然后照常啟動(dòng)nginx和移除了靜態(tài)資源的WEB服務(wù),你會(huì)發(fā)現(xiàn)原本的樣式、js效果、圖片等依舊有效。
其中static目錄下的xxx.css文件已被移除,但效果依舊存在。
<mark style="box-sizing: border-box; outline: 0px; user-select: auto !important; background-color: rgb(248, 248, 64); color: rgb(0, 0, 0); font-synthesis-style: auto; overflow-wrap: break-word;">也可以將靜態(tài)資源上傳到文件服務(wù)器中,然后location中配置一個(gè)新的upstream指向。</mark>

七、Nginx資源壓縮

在Nginx也提供了三個(gè)支持資源壓縮的模塊ngx_http_gzip_module、ngx_http_gzip_static_module、ngx_http_gunzip_module

http{
    # 開啟壓縮機(jī)制
    gzip on;
    # 指定會(huì)被壓縮的文件類型(也可自己配置其他類型)
    gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
    # 設(shè)置壓縮級(jí)別,越高資源消耗越大,但壓縮效果越好
    gzip_comp_level 5;
    # 在頭部中添加Vary: Accept-Encoding(建議開啟)
    gzip_vary on;
    # 處理壓縮請(qǐng)求的緩沖區(qū)數(shù)量和大小
    gzip_buffers 16 8k;
    # 對(duì)于不支持壓縮功能的客戶端請(qǐng)求不開啟壓縮機(jī)制
    gzip_disable "MSIE [1-6]\."; # 低版本的IE瀏覽器不支持壓縮
    # 設(shè)置壓縮響應(yīng)所支持的HTTP最低版本
    gzip_http_version 1.1;
    # 設(shè)置觸發(fā)壓縮的最小閾值
    gzip_min_length 2k;
    # 關(guān)閉對(duì)后端服務(wù)器的響應(yīng)結(jié)果進(jìn)行壓縮
    gzip_proxied off;
}

八、Nginx反向代理-負(fù)載均衡

啟動(dòng)Nginx,然后再啟動(dòng)兩個(gè)web服務(wù),第一個(gè)WEB服務(wù)啟動(dòng)時(shí),將端口號(hào)改為8080,第二個(gè)WEB服務(wù)啟動(dòng)時(shí),將其端口號(hào)改為8090。

upstream nginx_boot{  
   # 30s內(nèi)檢查心跳發(fā)送兩次包,未回復(fù)就代表該機(jī)器宕機(jī),請(qǐng)求分發(fā)權(quán)重比為1:2  
   server xxx:8080 weight=100 max_fails=2 fail_timeout=30s;   
   server xxx:8090 weight=200 max_fails=2 fail_timeout=30s;  
   # 這里的IP請(qǐng)配置成你WEB服務(wù)所在的機(jī)器IP  
}  

server {  
    location / {  
        root   html;
        index  index.html index.htm index.ftl;  
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        # 請(qǐng)求交給名為nginx_boot的upstream上  
        proxy_pass http://nginx_boot;  
    }  
}  

然后每次刷新頁面就能看到不同的界面了。
因?yàn)榕渲昧苏?qǐng)求分發(fā)的權(quán)重,8080、8090的權(quán)重比為2:1,因此請(qǐng)求會(huì)根據(jù)權(quán)重比均攤到每臺(tái)機(jī)器,也就是8080一次、8090兩次、8080一次…

九、控制腳本

win下的nginx,桌面文件(可忽略)

  • run.bat文件
@echo off
rem 提供Windows下nginx的啟動(dòng),重啟,關(guān)閉功能

echo ==================begin========================

cls 
::ngxin 所在的盤符
set NGINX_PATH=C:

::nginx 所在目錄
set NGINX_DIR=C:\xxx\nginx-1.0.11\
color 0a 
TITLE Nginx 管理程序增強(qiáng)版

CLS 

echo. 
echo. ** Nginx 管理程序  *** 
echo. *** create 2020-10-15 *** 
echo. 

:MENU 

echo. ***** nginx 進(jìn)程list ****** 
::tasklist|findstr /i "nginx.exe"
tasklist /fi "imagename eq nginx.exe"

echo. 

    if ERRORLEVEL 1 (
        echo nginx.exe不存在
    ) else (
        echo nginx.exe存在
    )

echo. 
::*************************************************************************************************************
echo. 
    echo.  [1] 啟動(dòng)Nginx  
    echo.  [2] 關(guān)閉Nginx  
    echo.  [3] 重啟Nginx 
    echo.  [4] 刷新控制臺(tái)  
    echo.  [5] 重新加載Nginx配置文件
    echo.  [6] 檢查測試nginx配置文件
    echo.  [7] 查看nginx version
    echo.  [0] 退 出 
echo. 

echo.請(qǐng)輸入選擇的序號(hào):
set /p ID=
    IF "%id%"=="1" GOTO start 
    IF "%id%"=="2" GOTO stop 
    IF "%id%"=="3" GOTO restart 
    IF "%id%"=="4" GOTO MENU
    IF "%id%"=="5" GOTO reloadConf 
    IF "%id%"=="6" GOTO checkConf 
    IF "%id%"=="7" GOTO showVersion 
    IF "%id%"=="0" EXIT
PAUSE 

::*************************************************************************************************************
::啟動(dòng)
:start 
    call :startNginx
    GOTO MENU

::停止
:stop 
    call :shutdownNginx
    GOTO MENU

::重啟
:restart 
    call :shutdownNginx
    call :startNginx
    GOTO MENU

::檢查測試配置文件
:checkConf 
    call :checkConfNginx
    GOTO MENU

::重新加載Nginx配置文件
:reloadConf 
    call :checkConfNginx
    call :reloadConfNginx
    GOTO MENU

::顯示nginx版本
:showVersion 
    call :showVersionNginx
    GOTO MENU   

::*************************************************************************************
::底層
::*************************************************************************************
:shutdownNginx
    echo. 
    echo.關(guān)閉Nginx...... 
    taskkill /F /IM nginx.exe > nul
    echo.OK,關(guān)閉所有nginx 進(jìn)程
    goto :eof

:startNginx
    echo. 
    echo.啟動(dòng)Nginx...... 
    IF NOT EXIST "%NGINX_DIR%nginx.exe" (
        echo "%NGINX_DIR%nginx.exe"不存在
        goto :eof
     )

    %NGINX_PATH% 
    cd "%NGINX_DIR%" 

    IF EXIST "%NGINX_DIR%nginx.exe" (
        echo "start '' nginx.exe"
        start "" nginx.exe
    )
    echo.OK
    goto :eof

:checkConfNginx
    echo. 
    echo.檢查測試 nginx 配置文件...... 
    IF NOT EXIST "%NGINX_DIR%nginx.exe" (
        echo "%NGINX_DIR%nginx.exe"不存在
        goto :eof
     )

    %NGINX_PATH% 
    cd "%NGINX_DIR%" 
    nginx -t -c conf/nginx.conf

    goto :eof

::重新加載 nginx 配置文件
:reloadConfNginx
    echo. 
    echo.重新加載 nginx 配置文件...... 
    IF NOT EXIST "%NGINX_DIR%nginx.exe" (
        echo "%NGINX_DIR%nginx.exe"不存在
        goto :eof
     )

    %NGINX_PATH% 
    cd "%NGINX_DIR%" 
    nginx -s reload

    goto :eof

::顯示nginx版本
:showVersionNginx
    echo. 
    %NGINX_PATH% 
    cd "%NGINX_DIR%" 
    nginx -V
    goto :eof

十、nginx.conf 配置文件注解

#user  nobody;
worker_processes  1; #允許生成的進(jìn)程數(shù),默認(rèn)為1

#error_log  logs/error.log; #制定日志路徑,級(jí)別
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; #指定nginx進(jìn)程運(yùn)行文件存放地址

events {
    worker_connections  1024; #最大連接數(shù),默認(rèn)為512
}

http {
    include       mime.types;  #文件擴(kuò)展名與文件類型映射表
    default_type  application/octet-stream; #默認(rèn)文件類型

    #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;  #允許sendfile方式傳輸文件
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;  #連接超時(shí)時(shí)間

    #gzip  on;

    server {
    #keepalive_requests 120; #單連接請(qǐng)求上限次數(shù)。
            #listen       4545;   #監(jiān)聽端口
            #server_name  127.0.0.1;   #監(jiān)聽地址 
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
    #proxy_pass  http://xxx;   #請(qǐng)求代理到xxx 定義的服務(wù)器列表
    #root path;  #根目錄
    #index vv.txt;  #設(shè)置默認(rèn)頁
    #deny 127.0.0.1;  #拒絕的ip
    #allow 172.18.5.54; #允許的ip     
            root   /usr/local/web/bmAdmin/dist;
            index  index.html index.htm;
        }
    location /bmWeb {
            alias   /usr/local/web/bmWeb/dist;
            index  index.html index.htm;
        }
        #跨域反向代理
    location /v1/ {
        rewrite ^/v1/(.*)$ /$1 break;
        proxy_pass https://su.bcebos.com/;
 }

        #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;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

上面是nginx的基本配置,需要注意的有以下幾點(diǎn):

  1. $ remote_addr 與 $http_x_forwarded_for 用以記錄客戶端的ip地址;
  2. $ remote_user :用來記錄客戶端用戶名稱;
  3. $ time_local : 用來記錄訪問時(shí)間與時(shí)區(qū);
  4. $ request : 用來記錄請(qǐng)求的url與http協(xié)議;
  5. $ status : 用來記錄請(qǐng)求狀態(tài);成功是200
  6. $ body_bytes_s ent :記錄發(fā)送給客戶端文件主體內(nèi)容大??;
  7. $ http_referer :用來記錄從那個(gè)頁面鏈接訪問過來的;
  8. $ http_user_agent :記錄客戶端瀏覽器的相關(guān)信息;

注:每個(gè)指令必須有分號(hào)結(jié)束;一個(gè)http中可以有多個(gè)server。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容