Nginx配置2-http塊配置
http配置塊
http配置塊包括http-全局塊、http-server塊、upstream 塊兒。可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。
http-全局塊
mime-type定義,日志自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數等
http {
#設定mime類型,類型由mime.type文件定義
include mime.types;
#默認文件類型
default_type application/octet-stream;
#設定日志格式(自定義)
log_format ownformat '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /home/nginx/log/http_access.log ownformat;
#對於普通應用,設為on可以減少文件拷貝次數,如果圖片顯示不正常把這個改成off。
sendfile on; #off模式拷貝路徑:硬盤—>內核fs緩沖區—>用戶空間—>內核socket緩沖區—>協議引擎
# on模式拷貝路徑1: 硬盤—>內核fs緩沖區—>內核socket緩沖區—>協議引擎
# on模式拷貝路徑2: 硬盤—>內核fs緩沖區—>協議引擎
tcp_nopush on #在linux/Unix系統中優化tcp數據傳輸,僅在sendfile開啟時有效
#tcp_nodelay on; #TCP_NODELAY選項來禁用Nagle的緩沖算法,並在數據可用時立即發送與tcp_nopush互斥
keepalive_timeout 120; #長連接超時時間,單位是秒
send_timeout 30; #指定客戶端的響應超時時間
gzip on; #開啟gzip壓縮輸出
gzip_http_version 1.0; #壓縮版本
gzip_comp_level 2; #壓縮級別,1-10,數字越大壓縮的越好
gzip_min_length 1k; #設置允許壓縮的頁面最小字節數
gzip_types text/plain application/x-javascript text/css application/xml; #壓縮類型
gzip_disable "MSIE [1-6]."; #IE6及以下禁止壓縮
}
#日志格式(自定義)
#$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;
#$remote_user:用來記錄客戶端用戶名稱;
#$time_local: 用來記錄訪問時間與時區;
#$request: 用來記錄請求的url與http協議;
#$status: 用來記錄請求狀態;成功是200,
#$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
#$http_referer:用來記錄從那個頁面鏈接訪問過來的;
#$http_user_agent:記錄客戶瀏覽器的相關信息;
#通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。
http-server塊
配置虛擬主機的相關參數,包含server全局塊和location塊
server全局塊
server {
listen 80; #描述虛擬主機接受連接的地址和端口
server_name localhost; #內網:主機名,外網:域名 可以是多個域名,用空格隔開
access_log /home/nginx/log/server_localhost_access.log ownformat;
index index.html index.htm index.jsp; #默認訪問主頁
root /nginx/www/webapps; #主目錄
}
server {
listen 192.168.1.101:8080; # 監聽具體IP和具體端口上的連接
...
}
server {
listen 80;
server_name example.com www.example.com; #基於域名的虛擬主機(server_name)
}
server {
listen 80;
server_name example.com www.example.com; #基於域名的虛擬主機(server_name)
}
server {
listen 192.168.1.1:80;
server_name example.net www.example.net; #基於域名和IP混合的虛擬主機
}
#nginx支持三種類型的虛擬主機配置
#- 基於ip的虛擬主機(一塊物理服務器綁定多個ip地址)
#- 基於域名的虛擬主機(server_name)
#- 基於端口的虛擬主機(listen不寫ip,端口模式)
location塊
為具體的請求URI配置請求路由,可以實現默認主頁、錯誤提示頁面、靜態文件處理、反向代理等功能
location = / { #注意URL最好為具體路徑。 uri嚴格匹配指定的路徑,不包括子路徑
[ configuration A ]
}
location / { #對當前路徑及子路徑下的所有對象都生效;
[ configuration B ]
}
location ~ URI {} { #~區分字符大小寫
[ configuration C ]
}
location ^~ /images/ { #禁用正則表達式
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ { #~*不區分字符大小寫
[ configuration E ]
}
#默認請求
location / {
#定義首頁索引文件的名稱
index index.php index.html index.htm;
}
# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
error_page 400 402 403 404 /40x.html;
location = /40x.html {
}
#靜態文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#過期30天,靜態文件不怎么更新,過期可以設大一點,
expires 30d;
}
#所有jsp的頁面均交由tomcat或weblogic處理
location ~ .(jsp|jspx|do)?$ {
#指向weblogic服務器
proxy_pass http://127.0.0.1:700;
#將主機跟真實IP寫入HTTP頭中
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
upstream 塊兒
#upstream可以實現負載均衡
upstream httpds {
server 127.0.0.1:8050 weight=10 down;
server 127.0.0.1:8060 weight=1;
server 127.0.0.1:8060 weight=1 backup;
}
#- down:表示當前的server暫時不參與負載
#- weight:默認為1.weight越大,負載的權重就越大。
#- backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。
#負載均衡算法:
#1、輪詢(默認)
#每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
#2、weight
#指定輪詢幾率,weight和訪問比率成正比,用於后端服務器性能不均的情況。
#3、ip_hash
#每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
#4、fair(第三方)
#按后端服務器的響應時間來分配請求,響應時間短的優先分配。
#5、url_hash(第三方)
#按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。