Nginx 實用配置

1 防盜鏈

相關配置:javascript

valid_referers
location ~* \.(gif|jpg|png)$ {
    # 只容許 192.168.0.1 請求資源
    valid_referers none blocked 192.168.0.1;
    if ($invalid_referer) {
       rewrite ^/ http://$host/logo.png;
    }
}

2 根據文件類型設置過時時間

location ~.*\.css$ {
    expires 1d;
    break;
}
location ~.*\.js$ {
    expires 1d;
    break;
}
location ~* \.(js|css|jpg|jpeg|gif|png)$ {
    expires 1h;
    break;
}

3 禁止訪問某個目錄

location ~* \.(txt|doc)${
    root /opt/htdocs/site/test;
    deny all;
}

4 靜態資源訪問

http {
    # 這個將爲打開文件指定緩存,默認是沒有啓用的,max 指定緩存數量,
    # 建議和打開文件數一致,inactive 是指通過多長時間文件沒被請求後刪除緩存。
    open_file_cache max=204800 inactive=20s;

    # open_file_cache 指令中的inactive 參數時間內文件的最少使用次數,
    # 若是超過這個數字,文件描述符一直是在緩存中打開的,如上例,若是有一個
    # 文件在inactive 時間內一次沒被使用,它將被移除。
    open_file_cache_min_uses 1;

    # 這個是指多長時間檢查一次緩存的有效信息
    open_file_cache_valid 30s;

    # 默認狀況下,Nginx的gzip壓縮是關閉的, gzip壓縮功能就是能夠讓你節省不
    # 少帶寬,可是會增長服務器CPU的開銷哦,Nginx默認只對text/html進行壓縮 ,
    # 若是要對html以外的內容進行壓縮傳輸,咱們須要手動來設置。
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;

    server {
        listen       80;
        server_name www.test.com;
        charset utf-8;
        root   /data/www.test.com;
        index  index.html index.htm;
    }
}

5 日誌配置

5.1 日誌字段說明

字段 說明
remote_addr 和 http_x_forwarded_for 客戶端 IP 地址
remote_user 客戶端用戶名稱
request 請求的 URI 和 HTTP 協議
status 請求狀態
body_bytes_sent 返回給客戶端的字節數,不包括響應頭的大小
bytes_sent 返回給客戶端總字節數
connection 鏈接的序列號
connection_requests 當前同一個 TCP 鏈接的的請求數量
msec 日誌寫入時間。單位爲秒,精度是毫秒
pipe 若是請求是經過HTTP流水線(pipelined)發送,pipe值爲「p」,不然爲「.」
http_referer 記錄從哪一個頁面連接訪問過來的
http_user_agent 記錄客戶端瀏覽器相關信息
request_length 請求的長度(包括請求行,請求頭和請求正文)
time_iso8601 ISO8601標準格式下的本地時間
time_local 記錄訪問時間與時區

5.1 access_log 訪問日誌

http {
    log_format  access  '$remote_addr - $remote_user [$time_local] $host "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$clientip"';
    access_log  /srv/log/nginx/talk-fun.access.log  access;
}

5.2 error_log 日誌

error_log  /srv/log/nginx/nginx_error.log  error;
# error_log /dev/null; # 真正的關閉錯誤日誌
http {
    # ...
}

6 反向代理

http {
    include mime.types;
    server_tokens off;

    ## 配置反向代理的參數
    server {
        listen    8080;

        ## 1. 用戶訪問 http://ip:port,則反向代理到 https://github.com
        location / {
            proxy_pass  https://github.com;
            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;
        }

        ## 2.用戶訪問 http://ip:port/README.md,則反向代理到
        ##   https://github.com/zibinli/blog/blob/master/README.md
        location /README.md {
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass https://github.com/zibinli/blog/blob/master/README.md;
        }
    }
}

7 負載均衡

http {
    upstream test.net {
        ip_hash;
        server 192.168.10.13:80;
        server 192.168.10.14:80  down;
        server 192.168.10.15:8009  max_fails=3  fail_timeout=20s;
        server 192.168.10.16:8080;
    }
    server {
        location / {
            proxy_pass  http://test.net;
        }
    }
}
相關文章
相關標籤/搜索