# nginx在安裝完成後,大部分參數就已是最優化了,咱們須要管理的東西並很少
#user nobody;
#進程數,建議小於或者是等於CPU總核心數
#建議值 <= cpu核心數量,通常高於cpu數量不會帶好處,也許還有進程切換開銷的負面影響
worker_processes 2;javascript
# 只記錄更爲嚴重的錯誤日誌,可減小IO壓力, 目前日誌記錄級別是warn 日誌級別:debug | info | notice | warn | error | crit | alert | emerg
#彷佛這樣子配置錯誤級別了可是有時候仍是會打印出warn級別錯誤的,無論了
error_log logs/error.log error;
#error_log logs/error.log notice;
#error_log logs/error.log info;php
pid logs/nginx.pid;css
# 每進程最大可打開文件描述符數量(linux上文件描述符比較廣義,網絡端口、設備、磁盤文件都是)
# 文件描述符用完了,新的鏈接會被拒絕,產生502類錯誤
# linux最大可打開文件數可經過ulimit -n FILECNT或 /etc/security/limits.conf配置
# 理論值 系統最大數量 / 進程數。但進程間工做量並非平均分配的,因此能夠設置的大一些
#worker_rlimit_nofile 655350 html
# event指令與事件模型有關,配置處理鏈接有關信息
events {
#單個進程最大鏈接數
# 併發響應能力的關鍵配置值
# 每一個進程容許的最大同時鏈接數,work_connectins * worker_processes = maxConnection;
# 要注意maxConnections不等同於可響應的用戶數量,
# 由於通常一個瀏覽器會同時開兩條鏈接,若是反向代理,nginx到後端服務器的鏈接也要佔用鏈接數
# 因此,作靜態服務器時,通常 maxClient = work_connectins * worker_processes / 2
# 作反向代理服務器時 maxClient = work_connectins * worker_processes / 4
# 這個值理論上越大越好,但最多可承受多少請求與配件和網絡相關,也可最大可打開文件,最大可用sockets數量(約64K)有關
worker_connections 2048;
}java
# http指令處理http請求
http {
# mime type映射
include mime.types;
#默認文件類型
default_type application/octet-stream;node
#nginx日誌格式的配置 若是有combined就是默認的意思,這裏main就是主要的意思
#'$remote_addr - $remote_user [$time_local] "$request" ' 用戶地址ip地址--用戶名 請求的URL,請求路徑
#$status請求狀態 $body_bytes_sent響應給用戶的數據的大小 $http_referer" 原網頁,指用戶從那裏來,好比從百度搜索點擊連接而來
#$http_user_agent是用戶的瀏覽器的信息 $http_x_forwarded_for客戶端的IP地址與remote_addr意思差很少
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';linux
#後面的mian得對應上面log_formate main 這裏的main這個單詞,這裏是主配置文件的意思,也能夠改成combined默認的意思
#access_log logs/access.log main;
# 關閉此項可減小IO開銷,但也沒法記錄訪問信息,不利用業務分析,通常運維狀況不建議使用,
#若是不須要查看訪問日誌必須設置爲0ff由於若是不設置爲off那麼它會自動打印的,註釋了都沒有用的
#access_log off;
#不能夠在這裏配置錯誤日誌,在前面配置
#error_log logs/error.log warn;
#開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,
#若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。
#注意:若是圖片顯示不正常把這個改爲off。
# 啓用內核複製模式,應該保持開啓達到最快IO效率
sendfile on;
# 簡單說,啓動以下兩項配置,會在數據包達到必定大小後再發送數據
# 這樣會減小網絡通訊次數,下降阻塞機率,但也會影響響應及時性
# 比較適合於文件下載這類的大數據包通訊場景
#tcp_nodelay on|off on禁用Nagle算法
#防止網絡阻塞
tcp_nopush on;
#防止網絡阻塞
#tcp_nodelay on;
# HTTP1.1支持持久鏈接alive
# 下降每一個鏈接的alive時間可在必定程度上提升可響應鏈接數量,因此通常可適當下降此值
#長鏈接超時時間,單位是秒
keepalive_timeout 50s;
#最大上傳的大小是500M
#client_max_body_size 500m;
#默認狀況下,Nginx的gzip壓縮是關閉的, gzip壓縮功能就是可讓你節省很多帶寬,可是會增長服務器CPU的開銷哦
#若是開啓了反向代理,那麼須要注意了,反向代理時候若是配置了壓縮那麼會卡死的
#開啓壓縮
gzip on;
#爲指定的客戶端禁用gzip功能,IE6或者更低版本禁用,IE6不支持壓縮,爲了兼容性
gzip_disable "msie6";
#判斷客戶端是否支持gzip壓縮,若是不支持就不開啓壓縮
#gzip_vary on;
#gzip壓縮用於http1.1協議
#gzip_http_version 1.1;
#gzip_static 告訴nginx在壓縮資源以前,先查找是否有預先gzip處理過的資源。
#這要求你預先壓縮你的文件(在這個例子中被註釋掉了),
#從而容許你使用最高壓縮比,這樣nginx就不用再壓縮這些文件了
# gzip_static on;
#默認值: gzip_buffers 4 4k/8k
#做用域: http, server, location
#設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流。 例如 4 4k 表明以4k爲單位,按照原始數據大小以4k爲單位的4倍申請內存。
# 4 8k 表明以8k爲單位,按照原始數據大小以8k爲單位的4倍申請內存。
#若是沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果
gzip_buffers 4 16k;
#Nginx做爲反向代理的時候啓用,開啓或者關閉後端服務器返回的結果,匹配的前提是後端服務器必需要返回包含」Via」的 header頭。
#容許或者禁止壓縮基於請求和響應的響應流。咱們設置爲any,意味着將會壓縮全部的請求
#off 代理不壓縮,默認設置是off,可是測試的時候發現這個配置不起做用,仍是壓縮了 若是代理服務器已經將對應的文件壓縮了,那麼這裏不會對其再次壓縮的,若是沒有壓縮,則會壓縮
#gzip_proxied off;
#設置對數據啓用壓縮的最少字節數。若是一個請求小於1000字節,咱們最好不要壓縮它,由於壓縮這些小的數據會下降處理此請求的全部進程的速度。
# 太短的內容壓縮效果不佳,壓縮過程還會浪費系統資源
gzip_min_length 1024;
#設置數據的壓縮等級。這個等級能夠是1-9之間的任意數值,9是最慢可是壓縮比最大的。咱們設置爲4,這是一個比較折中的設置
gzip_comp_level 6;
#設置須要壓縮的數據格式。下面例子中已經有一些了,你也能夠再添加更多的格式。設置哪壓縮種文本文件可參考 conf/mime.types text/html無效了
gzip_types application/javascript text/plain text/css application/json application/x-javascript application/xml application/xml+rss text/javascript image/jpeg image/gif image/png;
#配置緩存
#用proxy_cache_path指令,咱們首先應該已經定義在文件系統中但願存儲緩存的目錄。
#levels=參數指定緩存將如何組織
#keys_zone=參數定義緩存區域的名字,咱們稱之爲backcache。將會使用一塊最大10M的共享內存,用於硬盤上的文件索引,包括文件名和請求次數
#咱們是存儲10 MB的key。對於每兆字節,Nginx可存儲8000左右的條目。
#MAX_SIZE參數設置實際緩存數據的最大尺寸。
#inactive=1d 每一個文件在1天內若不活躍(無請求)則從硬盤上淘汰 同時須要在nginx下建立一個cache的文件夾
proxy_cache_path D:/nginx/other_nginx/nginx/nginx-1.9.5_using/cache levels=1:2 keys_zone=backcache:10m inactive=1d max_size=500m;nginx
#proxy_cache_key。這個設置將設置用於存儲緩存值的鍵。此鍵用於檢查是否一個請求能夠從高速緩存提供服務
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
#proxy_cache_valid指令能夠被指定屢次。它依賴於狀態代碼值使咱們可以配置多長時間存儲。
#在咱們的例子中,咱們對於後端返回200和302存儲1天,404響應的一分鐘過時
proxy_cache_valid 200 302 1d;web
proxy_cache_valid 404 1m;
# 靜態文件緩存,打開文件的緩存
# 最大緩存數量,文件未使用存活期
#建議和打開文件數量一致, inactive是指通過多長時間文件沒被請求後刪除緩存
#這個將爲打開文件指定緩存,默認沒有啓用,max指定緩存數量,
open_file_cache max=100000 inactive=20s;
# 驗證緩存有效期時間間隔
#這個是指多長時間檢查一次緩存的有效信息
open_file_cache_valid 30s;
# 有效期內文件最少使用次數
#定義了open_file_cache中指令參數不活動時間期間裏最小的文件數
open_file_cache_min_uses 2;
#指定了當搜索一個文件時是否緩存錯誤信息,也包括再次給配置中添加文件。咱們也包括了服務器模塊,
#這些是在不一樣文件中定義的。若是你的服務器模塊不在這些位置,你就得修改這一行來指定正確的位置
open_file_cache_errors on;
upstream localhosting {
server localhost:8080 weight=5;
#server www.waterme.net:8080 weight=5;
#server www.waterme.cn:8222 weight=5;
#沒事仍是加上ip_hash吧,否則有時候nginx會卡死的
ip_hash;
}
server {
# 監聽端口
listen 80;
# 識別的域名
server_name localhost;
算法
charset utf-8;
#access_log logs/host.access.log main;
#全部靜態文件由nginx直接讀取不通過tomcat或resin
#location ~.*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
#{ expires 15d; }
location ~.*\.(png)$ {
#引用緩存,這裏只是對遠程的代理用的,並且能夠用,意思就是第一次訪問的時候沒有緩存就範圍遠程的服務器,以後就有了緩存,下次訪問請求的時候,就不會訪問遠程服務器了,直接使用緩存裏面的內容
#使用proxy_cache指令,就能夠指定該backcache緩存區被用於這個位置。
proxy_cache backcache;
#proxy_cache_bypass指令被設置爲$ http_cache_control變量。
#這將包含一個指示器,用以指示該客戶端是否被明確地請求一個最新的,非緩存版本。
#設置此指令容許Nginx正確處理這些類型的客戶端請求。無需進行進一步的配置。
proxy_cache_bypass $http_cache_control;
#X-Proxy-Cache的額外頭。咱們設置這個頭部爲$ upstream_cache_status變量的值。
#這個設置頭,使咱們可以看到,若是請求致使高速緩存命中,高速緩存未命中,或者高速緩存被明確旁路。
#這是對於調試特別有價值,也對客戶端是有用的信息。
add_header X-Proxy-Cache $upstream_cache_status;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080;
}
location ~.*\.(js|css|jpg|jpeg|png|doc|gif|htm|html|bmp|swf|ioc|rar|zip|txt|flv|mid|ppt|pdf|xls|mp3|wma)$ {
#配置Nginx動靜分離,定義的靜態頁面直接從Nginx發佈目錄讀取,不過發佈項目的時候得將項目也發到nginx的發佈目錄。這樣作針對的是遠程的動靜分離,特別是負載均衡的時候更加須要使用了
#也能夠是後端服務器的項目地址,好比tomcat的,這樣比較方便,不用將項目再次發佈到nginx裏面的,這樣作針對與本地的動靜分離
#root html;
root D:/tomcat/7.65/apache-tomcat-7.0.65-windows-x86/apache-tomcat-7.0.65/webapps;
#expires定義用戶瀏覽器緩存的時間爲15天,若是靜態頁面不常更新,能夠設置更長,這樣能夠節省帶寬和緩解服務器的壓力
expires 30d;
}
location / {
#後端服務器數據回傳時間(代理髮送超時)
proxy_connect_timeout 60s;
#後端服務器數據回傳時間(代理髮送超時)
proxy_send_timeout 60s;
#鏈接成功後,後端服務器響應時間(代理接收超時)
proxy_read_timeout 60s;
# 真實的客戶端IP
#proxy_set_header X-Real-IP $remote_addr;
# 請求頭中Host信息
#proxy_set_header Host $host;
# 代理路由信息,此處取IP有安全隱患
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 真實的用戶訪問協議
#proxy_set_header X-Forwarded-Proto $scheme;
# 默認值default,
# 後端response 302時 tomcat header中location的host是http://192.168.1.62:8080
# 由於tomcat收到的請求是nginx發過去的, nginx發起的請求url host是http://192.168.1.62:8080
# 設置爲default後,nginx自動把響應頭中location host部分替換成當前用戶請求的host部分
# 網上不少教程將此值設置成 off,禁用了替換,
# 這樣用戶瀏覽器收到302後跳到http://192.168.1.62:8080,直接將後端服務器暴露給瀏覽器
# 因此除非特殊須要,不要設置這種多此一舉的配置
#proxy_redirect default;
#容許客戶端請求的最大單文件字節數
client_max_body_size 10m;
#proxy_buffering:該指令控制緩衝是否啓用。默認狀況下,它的值是「on」。
#緩衝區代理緩衝用戶端請求的最大字節數
client_body_buffer_size 128k;
#設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
#從後端服務器的響應頭緩衝區大小,它包含headers,和其餘部分響應是分開的。
#該指令設置響應部分的緩衝區大小。默認狀況下,它和proxy_buffers是相同的尺寸,
#但由於這是用於頭信息,這一般能夠設置爲一個較低的值。
proxy_buffer_size 4k;
#proxy_buffers緩衝區,網頁平均在32k如下的設置
#該指令控制代理響應緩衝區的數量(第一個參數)和大小(第二個參數)。
#默認配置是8個緩衝區大小等於一個內存頁(4K或者8K)。
#增長緩衝區的數目可讓你緩衝更多信息。
proxy_buffers 4 32k;
#高負荷下緩衝大小(proxy_buffers*2)
#此指令設置標註「client-ready」緩衝區的最大尺寸。
#而客戶端能夠一次讀取來自一個緩衝區的數據,緩衝被放置在隊列中,批量發送到客戶端。
#此指令控制容許是在這種狀態下的緩衝空間的大小。
proxy_busy_buffers_size 64k;
#設定緩存文件夾大小,大於這個值,將從upstream服務器傳
#這是每一個請求能用磁盤上臨時文件最大大小。
#這些當上遊響應太大不能裝配到緩衝區時被建立
#沒有設置緩存文件夾,因此不能直接設置這個,不然報錯
#proxy_max_temp_file_size 2048m;
#這是當被代理服務器的響應過大時Nginx一次性寫入臨時文件的數據量。
proxy_temp_file_write_size 64k;
root html;
index index.html index.htm;
#本地動靜分離反向代理配置
#全部jsp的頁面均交由tomcat或resin處理
#location ~ .(jsp|jspx|do)?$ {
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_pass http://127.0.0.1:8080;
#}
#把請求轉發給後臺web服務器,反向代理和fastcgi的區別是,反向代理後面是web服務器,fastcgi後臺是fasstcgi監聽進程,固然,協議也不同。
# location / {
# proxy_pass http://127.0.0.1:8080;
#}
proxy_pass http://localhosting;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#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;
#}
}
# server 表示一個虛擬主機,一臺服務器可配置多個虛擬主機
server {
listen 9090;
server_name localhost;
# 一個關鍵設置,與url參數亂碼問題有關
charset utf-8;
#配置對應虛擬主機的日誌
#access_log logs/host.access.log main;
location /{
#靜態網頁的地址html文件夾
root html;
index index.html index.htm;
# deny all; 拒絕請求,返回403
# allow all; 容許請求
#開啓自動列目錄,前提添加須要在html文件夾裏面沒有index.html等之類設置的默認主頁
#估計目前不怎麼須要開啓自動列目錄
#autoindex on;
}
#解決重啓或者是訪問nginx的出現favicon錯誤createFile的錯誤
location = /favicon.ico {
log_not_found off;
}
#配置基本緩存,應該是在server裏面配置,由於能夠有多個server,每一個server須要配置的緩存狀況可能都不同
#當前目前下,無論前面路徑是什麼,只有文件的後綴是jpg,png,swf,gif那麼就會自動進行下面的緩存配置 文件之間用豎線隔開
location ~.*\.(jpg|png|swf|gif)$ {
#表示上面設置的緩存30天后就會清除,由於是圖片,因此常規是30天清除圖片類的緩存
expires 30d;
}
#同時能夠設置其餘類型的文件的緩存好比js,css
location ~.*\.(css|js)$ {
#表示上面設置的緩存1小時後就會清除,由於是css,js,因此常規是1小時後清除
expires 1d;
}
# 定義各種錯誤頁
#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;
}
}
}