nginx-1-基礎配置

1. 配置文件

nginx運行時的配置是來自nginx.conf這個文件,默認是在這個路徑下:/etc/nginx/nginx.conf(以CentOS為例),但是不同的操作系統(tǒng)和安裝方式會有差異,通過nginx -t這個命令可以查看該路徑:

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

上面這個命令是測試nginx的配置正常與否的,它的輸出會帶有nginx.conf的絕對路徑.

當然如果你想要使用其他的nginx.conf也是可以的,使用nginx -c后面加使用的文件的路徑即可,如:

sudo nginx -c /home/user/nginx.conf

關于nginx的所有命令可通過nginx -hnginx -?來查看幫助.

2. 配置文件格式

最基礎的配置格式如下:

events {

}
http {
  server {
  }
}

直接用這個空的配置就可以用了,可以啟動下nginx來驗證:

sudo nginx

$ curl -I 127.0.0.1
HTTP/1.1 200 OK # 出現(xiàn)這個說明啟動成功
Server: nginx/1.11.5

nginx默認下監(jiān)聽本地的80端口,然后文件路徑是/usr/share/nginx/html.

下面來個完整的配置來說明:

user nobody; # simple directive
worker_processes 1; # simple directive
events { # context directive
  worker_connections 512; # simple directive
}

http { # context directive
  server { # context directive
    listen *:80; # simple directive
    server_name ""; # simple directive
    root /usr/share/nginx/html; # simple directive
  }
}

配置文件是由directives(指令)組成的:simple directivecontext directive.
兩者語法相同,不同的是context directive的內容是由{}包含,而simple directive的結尾是分號;.

2.1 simple directive(簡單指令)

語法:

name parameters ;

參數可以多個,也可以是鍵值類型的key=value形式,如:

listen *:80;
listen *:80 ssl backlog=511;

別忘了結尾的分號;,否則會報錯.

2.2 context directive(環(huán)境指令)

語法與simple directive相似,還能包含在其他的context directive里面,也可以繼承其他的指令,如:

server {
  root /usr/share/nginx/html;
  location /foo {
    root /usr/share;
  }
}

如果/foo里沒有定義root目錄,則會使用外層的;如果定義了就會使用自己定義的.

簡單指令只能包含在Context指令里面,其中整個文件最外層默認有個隱性的main context指令.
具體的指令查詢可以查看官網給的Alphabetical index of directives,比如查看location:

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } # 語法
location @name { ... } 
Default:    — # 默認值
Context:    server, location # 適用的Context,其他的會錯

3. 常用指令

3.1 Events 指令

nginx是一個事件驅動型的服務器,這個events指令可以讓你來設置事件驅動相關,比如最大連接數等,如:

events {
  worker_connections 512; # 同時連接數
}
  • events指令有且只有一個,并且要在最外層:
  • 這個連接數量不僅包括客戶端的請求,還包括nginx后續(xù)要進行相應操作的連接數量.
  • linux中將每個連接看出是open file,并且對于每個進程的這個操作有個limit,如果你想要增加連接數,則你也要去提高系統(tǒng)定義的maximum number of open files allowed.

3.2 HTTP and Server 指令

HTTP指令是定義HTTP服務器相關的,只能放在最外層;
Server是定義具體的虛擬服務器配置,必須放在HTTP等可用的Context指令里面;
通常HTTPServer是一起出現(xiàn)的,并且可以包含多個Server.一般是把通用的指令放在HTTP頂層,然后非共用的則放在Server指令里面:

http {
  server {
    listen *:80; # 監(jiān)聽80端口
    server_name ""; # 放 Host header,用來匹配域名
    root /usr/share/nginx/html; # 公共路徑.
  }
}

比如http://127.0.0.1/foo/test.html的請求獲取的就是/usr/share/nginx/html/foo/test.html.

3.3 Listen 指令

監(jiān)聽某個端口,例如:

listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
listen [::]:8000; # IPv6
listen [::1]; # IPv6
listen *:443 ssl;
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;

3.4 Server_name 指令

設置server名,也就是域名,只能放在server指令下面,可以用通配符和正則來匹配,默認為空:

server {
    server_name example.com www.example.com;
    server_name example.com *.example.com www.example.*; # 通配符
    server_name ~^(www\.)?(.+)$; # 正則
}
  • 波浪號~表示后面是正則.
  • 多個域名綁定同一個端口的話可以用這個來區(qū)分.

3.5 Root 指令

設置請求的根目錄,比如配置如下:

server {
  listen *:80;
  root /usr/share/nginx/html;
}

一個地址為http://127.0.0.1/test.html的請求過來,實際會解析到/usr/share/nginx/html/test.html這里.

問: 那如果這個請求http://127.0.0.1/?過來,會解析到哪里呢?

會解析到/usr/share/nginx/html目錄下的index.html,這是默認的,可以通過index指令更改:

server {
  listen *:80;
  root /usr/share/nginx/html;
  index ADifferentIndexFile.html; # index后面如果有多個html文件默認返回第一個,該機制可以用于維護時的提示網頁.
}

3.6 Location 指令

這個指令是設置不同請求時對應的配置,比如127.0.0.1/test/hello.html127.0.0.1/formal/hello.html這兩個請求就通過該指令設置解析到不同的地方:

location /test/ {
  root /usr/share/nginx/test;
}
location /formal/ {
  root /usr/share/nginx/formal;
}

該指令還支持更多高級的配置,詳細后面介紹.

該指令只能在serverlocation指令下.

4. 多個虛擬host配置

nginx允許我們通過配置多個server模塊來host不同的網站,這就是virtual hosting,如:

server {
  listen 80;
  server_name example.com;
}
server {
  listen 80;
  server_name foobar.com;
}

上述我們定義了兩個server模塊,監(jiān)聽的都是80端口,域名分別是example.comfoobar.com,這兩個模塊是完全獨立的.

首先這些域名要綁定到你機子的IP上,或者你手動修改下機子的hosts也可以

匹配規(guī)則

定了多個server之后,nginx是如何作匹配的呢?

  1. 匹配IP地址和端口號.如果只有一個符合,直接解析到該模塊;若有匹配到多個,則往下第二步.
  2. 匹配server_name,解析到最匹配的模塊.
  3. 如何server_name匹配不到,則解析到默認的模塊,默認為第一個,也可以用指令修改默認模塊listen 80 default_server;.

由于server_name是可以用正則來定義的,具體的匹配可以去官網查看.

5. 啟動相關

5.1 啟動

在CentOS中nginx的啟動有兩種方式:

sudo nginx # 方式1
systemctl start nginx # 方式2 

nginx啟動的時候默認會連個進程:master和worker.

$ ps aux | grep nginx
root 24484 0.0 0.0 85772 1312 ? Ss 1:38 0:00 nginx: master process
nobody 24485 0.0 0.0 85992 2004 ? S 1:38 0:00 nginx: worker process

其中master是讀取和加載配置文件,并且控制worker進程.而worker則是真正處理請求的.

對于worker進程的數量,可以通過worker_processes指令設置,默認為1,通常是設置成CPU的核心數,可以通過worker_processes auto來讓其自動設置.

綁定1024以下的端口需要root權限.

5.2 重新加載配置文件

nginx正在運行,但是nginx.conf文件被修改了,需要更新,可以這樣:

sudo nginx -s reload

這樣就無需關閉再啟動了.

5.3 退出

退出可以這樣:

sudo nginx -s quit
sudu nginx -s stop

Reference

  1. NGINX: A Practical Guide to High Performance
  2. Alphabetical index of directives
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,678評論 19 139
  • 1.簡介: ? Nginx:engine X ,2002年,開源,商業(yè)版? http協(xié)議:web服務器(類似于ht...
    尛尛大尹閱讀 2,018評論 0 3
  • 配置運行Nginx服務器用戶(組) 用于配置運行Nginx服務器用戶(組)的指令是user,其語法格式為: use...
    吃瓜的東閱讀 4,688評論 0 41
  • I/O模型Nginx介紹Nginx的安裝和目錄結構Nginx的配置Nginx的編譯安裝 一、I/O模型 (一)I/...
    哈嘍別樣閱讀 983評論 0 4
  • Nginx簡介 解決基于進程模型產生的C10K問題,請求時即使無狀態(tài)連接如web服務都無法達到并發(fā)響應量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,227評論 0 9

友情鏈接更多精彩內容