1. 程式人生 > >最實用的Nginx配置詳解

最實用的Nginx配置詳解

好記憶不如爛筆頭,能記下點東西,就記下點,有時間拿出來看看,也會發覺不一樣的感受。

Nginx是一個非常實用的高效能的HTTP和反向代理伺服器,今天小編針對Nginx的配置檔案(nginx.conf)進行詳細的介紹,方便各位感興趣的朋友更便捷,更愉快的使用Nginx,配置如下:(文章末尾有示例配置,僅供參考)

一: 核心模組的常用元件

user

語法: user user [group]

預設值: nobody nobody

指定Nginx Worker程序執行使用者,預設是nobody帳號。

error_log

語法: error_log file [ debug | info | notice | warn | error | crit ]

預設值: ${prefix}/logs/error.log

指定錯誤日誌的存放位置和級別。

include

語法: include file | *

預設值: none

include 指令還支援像下面配置一樣的全域性包含的方法,例如包含一個目錄下所有以".conf"結尾的檔案: include vhosts/*.conf;

pid

語法: pid file

程序id儲存檔案。可以使用 kill -HUP cat /var/log/nginx.pid/ 對Nginx進行配置檔案重新載入。

worker_processes

語法: worker_processes number

預設值: 1

指定工作程序數。nginx可以使用多個worker程序(建議與本機CPU核心數一致)。


二: 事件模組的常用元件

worker_connections

語法:worker_connections number

通過worker_connections和worker_proceses可以計算出maxclients: max_clients = worker_processes * worker_connections

作為反向代理,max_clients為: max_clients = worker_processes * worker_connections/4 ,因為瀏覽器訪問時會通過連線池建立多個連線。

use

語法:use [ kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]

如果在./configure的時候指定了不止一種事件模型,

那麼可以設定其中一個,以便告訴nginx使用哪種事件模型。預設情況下nginx會在./configure時找出最適合系統的事件模型。

事件模型是指Nginx處理連線的方法。


三: HTTP模組的核心元件和變數

主要有三個作用域: http,server,location

server

語法:server {...}

作用域: http

配置一臺虛擬機器。

location

語法: location [=|~|~*|^~] /uri/ { ... }

作用域: server

配置訪問路徑的處理方法。

listen

語法: listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred | bind | ssl ]

預設值: listen 80

作用域: server

指定當前虛擬機器的監聽埠。

alias

語法: alias file-path|directory-path;

作用域: location

設定指定location使用的路徑.注意它跟 root 相似,但是不改變檔案的根路徑,僅僅是使用檔案系統路徑

root

語法: root path

預設值:root html

作用域:http, server, location

指定目錄的上級目錄,並且該上級目錄要含有location指定名稱的同名目錄。

root和alias的區別示例

location /abc/ {

alias /home/html/abc/;

}

#在這段配置下,http://test/abc/a.html就指定的是/home/html/abc/a.html。這段配置亦可改成

location /abc/ {

root /home/html/;

}

#這樣,nginx就會去找/home/html/目錄下的abc目錄了,得到的結果是相同的。

四: 多臺伺服器配置負載均衡

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

upstream allserver {

#ip_hash;

server 127.0.0.1:8083 down;

server 127.0.0.1:8084 weight=3;

server 127.0.0.1:8001;

server 127.0.0.1:8002 backup;

}

server {

listen 8012;

server_name localhost;

location / {

proxy_pass http://allserver;

}

}

}

ip_hash; nginx中的ip_hash技術能夠將某個ip的請求定向到同一臺後端,這樣一來這個ip下的某個客戶端和某個後端就能建立起穩固的session

1.down 表示當前的 server 暫時不參與負載

2.weight 預設為 1.weight 越大,負載的權重就越大。

3.backup: 其它所有的非 backup 機器 down 或者忙的時候,請求 backup機器。所以這臺機器壓力會最輕。

五: 常見變數

$arg_name

請求中的name引數

$args

請求中的引數

$binary_remote_addr

遠端地址的二進位制表示

$body_bytes_sent

已傳送的訊息體位元組數

$content_length

HTTP請求資訊裡的"Content-Length"

$content_type

請求資訊裡的"Content-Type"

$document_root

針對當前請求的根路徑設定值

$document_uri

與$uri相同; 比如 /test2/test.php

$host

請求資訊中的"Host",如果請求中沒有Host行,則等於設定的伺服器名

$hostname

機器名使用 gethostname系統呼叫的值

$http_cookie

cookie 資訊

$http_referer

引用地址

$http_user_agent

客戶端代理資訊

$http_via

最後一個訪問伺服器的Ip地址。

$http_x_forwarded_for

相當於網路訪問路徑

$is_args

如果請求行帶有引數,返回“?”,否則返回空字串

$limit_rate

對連線速率的限制

$nginx_version

當前執行的nginx版本號

$pidworker

程序的PID

$query_string

與$args相同

$realpath_root

按root指令或alias指令算出的當前請求的絕對路徑。其中的符號連結都會解析成真是檔案路徑

$remote_addr

客戶端IP地址

$remote_port

客戶端埠號

$remote_user

客戶端使用者名稱,認證用

$request

使用者請求

$request_body

這個變數(0.7.58+)包含請求的主要資訊。在使用proxy_pass或fastcgi_pass指令的location中比較有意義

$request_body_file

客戶端請求主體資訊的臨時檔名

$request_completion

如果請求成功,設為"OK";如果請求未完成或者不是一系列請求中最後一部分則設為空

$request_filename

當前請求的檔案路徑名,比如/opt/nginx/www/test.php

$request_method

請求的方法,比如"GET"、"POST"等

$request_uri

請求的URI,帶引數;比如http://localhost:88/test1/

$scheme

所用的協議,比如http或者是https

$server_addr

伺服器地址,如果沒有用listen指明伺服器地址,使用這個變數將發起一次系統呼叫以取得地址(造成資源浪費)

$server_name

請求到達的伺服器名

$server_port

請求到達的伺服器埠號

$server_protocol

請求的協議版本,“HTTP/1.0"或"HTTP/1.1”

$uri

請求的URI,可能和最初的值有不同,比如經過重定向之類的

小編的示例配置:

user mask; # 使用的使用者和組

worker_processes 4; #工作程序數(建議與本機CPU核心數一致)

#error_log logs/error.log;

#error_log logs/error.log notice;

error_log logs/error.log info;

pid logs/nginx.pid;#nginx 程序id儲存檔案

events {

worker_connections 1024; #每個worker的最大連線數

}

http {

include mime.types; #包含一個檔案描述了:不同檔案字尾對應的MIME,見案例分析

default_type application/octet-stream; #制定預設MIME型別為二進位制位元組流

#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; #指令 access_log 指派路徑、格式和快取大小。

sendfile on; #開啟呼叫Linux的sendfile(),提供檔案傳輸效率

#tcp_nopush on; #是否允許使用socket的TCP_NOPUSH或TCP_CORK選項

#keepalive_timeout 0;

keepalive_timeout 65; #指定客戶端連線為長連線時保持活動的超時時間,在這個時間之後,伺服器會關掉連線。

# gzip on; #設定gzip,壓縮檔案

# lua_code_cache off;

include conf.d/*.conf; #引入其他的配置檔案

#配置一臺虛擬機器

server {

listen 80;

server_name 127.0.0.1;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.htm mis.html index.html ;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}