nginx學習記錄02-配置說明
基本配置
用於除錯定位問題的配置
daemon on|off
是否以守護程序的方式執行nginx,預設on
master_process on|off
是否以master/worker的方式工作
error_log path level
預設 error_log logs/error.log error
path代表的是一個具體的日誌儲存檔案地址,可以是相對的也可以是絕對的
level 是日誌的級別,取值範圍debug,info,notice,warn,error,crit,alert,emerg
當設定為 error級別時 ,那麼 error,crit,alert,emerg 都會輸出到日誌中
如果配置級別為debug,那麼所有的日誌都會輸出
debug_connection [IP|CIDR]
僅對指定的客戶端輸出debug級別的日誌
這個配置屬於事件性配置,需要放到events中才有效,要確保configure時 加入了 –with-debug引數.
events{
debug_connection 192.168.1.1;
debug_connection 192.168.1.2;
}
正常執行的配置
include path
include配置項可以引入其他的配置檔案到當前配置檔案中,path可以是相對地址,也可以是絕對地址,也可以是萬用字元
include vhost/*.conf;
pid path
pid檔案的存放路徑
user username [groupname]
預設 user nobody nodoby
nginx worker程序執行的使用者及使用者組
優化效能配置項
worker_processes number
nginx worker程序個數 預設 worker_processes 1;
worker_cpu_affinity cpumask [cpumask…]
繫結nginx workder程序到指定的cpu核心
worker_processes 和 worker_cpu_affinity用法
http: //www.360doc.com/content/12/0713/14/4330887_223977070.shtml
事件類配置(需要放到events塊中)
accept_mutex [on|off]
負載均衡鎖(accept鎖),預設是 on開啟的, 當一個worker程序建立的連線數達到worker_connections配置的最大連線數7/8時,會大大的減少該worker程序試圖建立新的tcp機會,來實現worker程序之上處理客戶端請求數儘量相近,可以關閉它,那麼建立tcp連線的時間會減少,但是worker程序之間的負責會不均衡.
lock_file path
lock檔案路徑,如果accept鎖關閉,那麼此配置不生效。如果打開了鎖,並且由於編譯程式或者作業系統的因素導致nginx不支援原子鎖,這時候才會使用檔案鎖來實現appect鎖,這時候這個配置的lock檔案才會生效
http模組配置
server塊
由於IP地址的數量有限,因此經常存在多個主機域名對應同一個ip的情況,這時在nginx.conf中就可以按照server_name(對應使用者請求中的主機域名)通過server塊來定義虛擬主機.
每一個server塊都是一個虛擬主機,它只處理與之相對應的主機域名請求
listen
監聽埠
配置塊 server
server_name
主機名稱 nginx根據請求的header中取出host,與每個server中的server_name進行匹配,以此來決定哪個server來處理這個請求
配置塊 server
location
配置塊 server
location會根據請求uri來匹配 與自身配置的uri進行匹配,如果可以匹配,就選擇location塊中的配置來處理使用者請求.
語法:location [=|~|~*|^~|@]/uri
= :把uri當做字串,做完全匹配
~ :表示匹配uri時大小寫是敏感的
~*:表示匹配時忽略大小寫敏感
^~:表示匹配uri時只需要前半部分滿足uri即可 例如 ^~/images/ 那麼以 /images/開始的請求都會匹配上
檔案路徑定義
1 root方式設定資源路徑
語法 root path
預設 root html
配置塊 http 、server 、 location 、 if
例如 定義 資源相對於 http請求的目錄
location /download/ {
root /opt/web/html
}
如果請求uri是 /download/index/test.html ,那麼 web伺服器將會返回 /opt/web/html/download/index/test.html
2 alias 方式設定資源路徑
配置塊 location
例如 : 若有有一個請求 uri 是 /conf/nginx.conf ,而 使用者實際想訪問的檔案在 /usr/local/nginx/conf/nginx.conf
alias方式
localtion /conf{
alias /usr/local/nginx/conf;
}
root方式
location /conf{
root /usr/local/nginx;
}
總結:root 用於定義 檔案的根目錄, 然後 根目錄 + 請求的路徑 進行拼接組合
alias 在請求的uri 路徑中 已經把/conf 這段字串丟掉 最終 配置的目錄 + uri替換掉/conf的字串
index
訪問首頁
配置塊 http 、server 、 location
location / {
root path;
index /index.html /index.jsp /index.php
}
請求過來之後是域名path,這時候nginx會返回 path/index.html 中的結果,如果沒有獲取到 就繼續 path/index.jsp
error_page
配置塊 http 、server、location、if
根據http返回碼重定向到頁面
例如
error_page 404 /404.html
error_page 502 503 504 /50x.html
負載均衡配置
upstream
upstream塊定義了一個上游伺服器叢集,便於反向代理中的proxy_pass使用。例如:
upstream upname{
server host1;
server host2;
server host3;
}
server{
localtion /{
proxy_pass http://upname;
}
}
upstream塊中的server
server配置指定了一臺上游伺服器的名字,這個名字可以是域名,ip地址埠
在server後面還可以加上一些引數
weight=number: 設定這臺上遊伺服器轉發的權重,預設值1
max_fails=number:該選項與fail_timeout配合使用,在fail_timeout時間段內,如果向當前上游伺服器轉發失敗次數超過number,則認為在當前的fail_timeout時間段內這臺上遊伺服器不可用。max_fail預設值1 ,如果設定0,則不檢查失敗次數
fail_timeout=time:表示在該時間段內轉發失敗次數得到多少之後就認為該上游伺服器暫時不可用.
down:表示所在的上游伺服器永久下線,只有在使用ip_hash配置時這個配置才有效
backup:在使用ip_hash配置時它的配置是無效的。它的配置表示所在的上游伺服器只是備份伺服器,只有在所有的非備份上游伺服器都失效之後,才會轉發給這臺上遊伺服器
upstream塊中的ip_hash
某些場景下,希望來自同一個使用者的請求始終固定在一個上游伺服器上,可以用它。
ip_hash根據客戶端的ip計算出來一個值,然後根據上游伺服器的個數 value%number獲取一個固定值
upstream upname{
ip_hash;
server host1;
server host2 down;
server host3;
}
反向代理的基本配置
proxy_pass
配置在 location 、if中
此配置將當前請求反向代理到URL引數指定的伺服器上,URL可以是主機名、IP
proxy_pass http://www.exp.com
proxy_pass http://192.168.1.1:8089
還可以是upstream塊
upstream upname{
...
}
server{
location /{
proxy_pass http://upname;
}
}
預設情況下反向代理是不會轉發請求中的host頭部,如果需要轉發,那麼必須加上配置
location / {
proxy_pass http://localhost:4019;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
proxy_next_upstream
語法 proxy_next_upstream[error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off]
預設值 proxy_next_upstream error timeout
配置塊 http、server、location
error:當向上遊伺服器發起連線,發起請求,讀取響應時出錯
timeout:傳送請求或者讀取響應超時
invaild_header:上游伺服器傳送響應是不合法的
http_xxx:上游伺服器返回的HTTP響應時xxx
off:關閉proxy_next_upstream功能一出錯就選擇另一臺上游伺服器再次轉發。
proxy_connect_timeout
proxy_connect_timeout time
連線超時時間設定,如果這個時間內沒有連線成功就認為連線不上,馬上換另外一臺上游伺服器
代理的更多引數 參考
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
完整的nginx.conf預設配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#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;
# }
#}
}