nginx.conf配置文件內(nèi)容
#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 default_server;
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;
# }
#}
}
main全局配置
直接放到 nginx.conf頂層 配置文件的下面的上下文是 main ,這些配置會影響到整個服務(wù)器
1. user lotus
user 是指令的名字,這個指令可以設(shè)置系統(tǒng)運行 nginx 時候用的用戶名概作,這里設(shè)置成了lotus 這個用戶
2. worker_processes 1
worker_processes 指令設(shè)置了 nginx 同時運行的進程數(shù),或者叫 nginx 的實例默怨。
nginx 有一個 master 進程讯榕,還有一些 worker 進程。
master 進程的主要工作是讀取和鑒定配置匙睹,維護 worker 進程愚屁。 真正提供服務(wù)的是 worker 進程。
nginx 用了一種有效的方式痕檬,把請求分布到不同的 worker 進程上去處理
worker_processes 指令設(shè)置的就是這個 woker 進程的數(shù)量霎槐,這個數(shù)量可以根據(jù)服務(wù)器的 CPU 核心數(shù)來設(shè)定, 8 核的 CPU 就設(shè)置成 8 個 worker 進程
3. error_log logs/error.log
error_log 指令設(shè)置了錯誤日志存放的位置
4. pid logs/nginx.pid
pid 指令設(shè)置了 nginx 的 master 進程 ID(PID) 寫入的位置梦谜,操作系統(tǒng)會用到這個 PID 跟蹤還有發(fā)送信號給 nginx 的進程
events配置
1. worker_connections 1024
上面這塊配置用到了一組大括號丘跌,上下文是 events
里面用了一個 worker_connections 指令袭景, 它可以設(shè)置每個 woker 進程同時能為多少個連接提供服務(wù)。
它的值設(shè)置成多少闭树,需要多在服務(wù)器上實踐耸棒, 一般你可以用 CPU 核心數(shù) * 1024 ,得到的結(jié)果設(shè)置成 worker_connections 的參數(shù)值
http配置
一般我們對服務(wù)器的設(shè)置都放到這個區(qū)塊里面
http 配置區(qū)塊里面會包含 server 配置區(qū)塊报辱, 我們可以定義多個 server 區(qū)塊榆纽,去配置不同的服務(wù)器,也就是虛擬主機捏肢。
server 配置區(qū)塊下面又會包含 多個location 區(qū)塊奈籽, 這些區(qū)塊可以設(shè)置匹配不同的請求,根據(jù)請求的地址鸵赫,提供不同的服務(wù)衣屏,有些請求直接給它們靜態(tài)文件,有些請求可能要交給其它的服務(wù)器處理辩棒, 比如 FastCGI 服務(wù)器狼忱。
1. include mime.types
這里用了一個 include 指令,把 mime.types 這個文件的內(nèi)容加載進來一睁, 在這個文件里定義了 MIME type 钻弄, MIME type 告訴瀏覽器,怎么樣去處理不同類型的文件
2. access_log logs/access.log main;
access_log 指令設(shè)置了訪問的日志存儲的位置者吁,在 server 和 location 區(qū)塊里也可以使用這個指令
3. index index.html index.htm
index 指令設(shè)置了當(dāng)請求的地址里不包含特定的文件的時候窘俺,默認(rèn)打開的文件
這里設(shè)置成了 index.html index.htm , 如果目錄下面有 index.html 就打開它复凳,如果沒有就去找 index.htm瘤泪,還沒有就返回 404 錯誤。
4. include /usr/local/nginx/conf/conf.d/*.conf
nclude 指令可以把其它的文件包含進來育八,這樣可以保持配置文件的整潔对途。
這里包含的是 /usr/local/nginx/conf/conf.d/*.conf, *.conf 表示所有的帶 .conf 后綴的文件髓棋。
也就是我們可以把自己的配置放到 /usr/local/nginx/conf/conf.d/ 這個目錄的下面实檀, 只要文件的后綴是 .conf ,這些配置文件都會起作用按声。
server配置
這種類型的配置區(qū)塊里可以配置不同的服務(wù)器膳犹。 就是每個 server 區(qū)塊都可以定義一臺虛擬主機。
如果你想在一臺服務(wù)器上運行多個網(wǎng)站的話儒喊,就會用到這種配置區(qū)塊镣奋。
一般每個 server 區(qū)塊的配置都可以放到單獨文件里。
1. listen 80 default_server
listen 指令可以設(shè)置服務(wù)器監(jiān)聽的端口號怀愧,還有 IP 地址或者主機名侨颈,這里監(jiān)聽了 80 端口,這是 http 協(xié)議默認(rèn)的端口號芯义。
default_server的意思是哈垢,在 80 端口的請求,如果不匹配在其它地方配置的虛擬主機扛拨, 就會默認(rèn)使用這個服務(wù)器(default_server)
在監(jiān)聽的端口前面可以加上 IP 地址或許本地的主機名耘分, 像這樣:127.0.0.1:80 ,localhost:80绑警,42.120.40.68:80 …
2. server_name localhost;
server_name求泰,這個指令可以創(chuàng)建基于主機名的虛擬主機。
比如我的域名是 xiongneng.cc 计盒, 我又為這個域名添加了一些主機名渴频,www.xiongneng.cc ,blog.xiongneng.cc北启,talk.xiongneng.cc 等等卜朗。 我想讓用戶在訪問這些主機名的時候,打開不同的網(wǎng)站咕村。
這就可以去創(chuàng)建多個 server 配置區(qū)塊场钉, 每個區(qū)塊里用 server_name 去指定這個虛擬主機的主機名,用戶在訪問這個主機名的時候懈涛, nginx 會根據(jù)請求的頭部上的信息來決定用哪個虛擬主機為用戶提供服務(wù)逛万。下面是一些參考例子:
server_name xiongneng.cc;
nginx 會處理用戶對 xiongneng.cc 的請求
server_name xiongneng.cc www.xiongneng.cc;
nginx 會處理對 xiongneng.cc 還有 www.xiongneng.cc 的請求
server_name *.xiongneng.cc;
nginx 會處理所有的對 xiongneng.cc 子域名的請求
3. root /usr/local/nginx/html;
root 指令配置了這個虛擬主機的根目錄。
之前安裝好 nginx批钠,在瀏覽器里打開服務(wù)器的 IP 地址泣港,看到的測試頁面,就在這個目錄的下面价匠。
location配置
location 配置區(qū)塊會定義在 server 配置區(qū)塊里邊兒当纱。
它可以配置 nginx 怎么樣響應(yīng)請求的資源
server_name 指令告訴 nginx 怎么樣處理對域名的請求,location 指令設(shè)置的是對特定的文件還有目錄的請求踩窖。
1. root html
nginx 下的 html 文件夾作為根目錄, html 里的文件是開放的, 可以被訪問到的, 而 html 外面的則不可以
2. index index.html index.htm
指的是如果訪問路徑, 那就訪問嘗試匹配 index.html 或 index.htm
每個 server 區(qū)塊里面可以定義多個 location 區(qū)塊坡氯,分別去配置對不同目錄或者文件的請求應(yīng)該怎么樣響應(yīng)。
下面再看幾個 location 的配置例子:
location ~ .(gif|jpg|png)$ { ... }
上面的 location 后面是一個 ~ 號洋腮,表示它的后面是一個正則表示式箫柳。
這里的意思是, 請求的是服務(wù)器里的 .gif 啥供,.jpg悯恍,或者 .png 格式的文件,具體怎么處理伙狐,可以放到它后面的大括號里
注意這個匹配是區(qū)分大小寫的涮毫,如果請求的是 .GIF 瞬欧,這個請求就不匹配這個 location 的配置
如果想不區(qū)分大小寫,在 ~ 后面罢防,加上一個 * 號:
location ~* .(gif|jpg|png)$ { ... }
location 定義匹配泌绣,更具體的那個會勝出楷怒,比如一個是 / ,另一個是 /blog ,這樣就會用 /blog 這個 location 甥角。
你可以使用 ^~ 爹梁,讓 nginx 停止查找更具體的匹配腹躁,意思就是纱皆,如果有請求匹配這個 location , 就直接用它里面的配置绽昼,不要再繼續(xù)查找別的 location 設(shè)置的匹配了唯鸭。
location ^~ /blog/ { ... }
精確的匹配,可以用一個 = 號:
location = / { ... }
3. 關(guān)于匹配
匹配總結(jié)如下:
= 開頭:表示精確匹配
^~ 開頭:讓 nginx 停止查找更具體的匹配
~ 開頭:表示區(qū)分大小寫的正則匹配;
~* 開頭:表示不區(qū)分大小寫的正則匹配
/ 通用匹配, 如果沒有其它匹配,任何請求都會匹配到
順序 no優(yōu)先級:
(location =) > (location 完整路徑) > (location ^~ 路徑) > (location /* 正則順序) > (location 部分起始路徑) > (/)