nginx:菜鳥手冊
以下講記述的,是為nginx入門級新人和打算學習nginx的人而準備的。
首先,nginx(讀作:engine x)是一個反向代理服務器。這里順便闡述一下相關的概念,來幫助概念不清楚的朋友來獲得最佳的學習體驗。
服務器可以按照不同標準劃分為很多種,那么這里討論的就是其中的一種,代理服務器。代理服務器可以再次細分,分為正向代理服務器和反向代理服務器,這兩者是相對于目標服務器而言的。當我們(O)希望訪問某一臺服務器(T,是具體的服務器),但是由于種種原因,我們不能去直接的訪問T,但是我們可以直接訪問另一臺服務器(P),而P卻可以訪問T,那么正好,我們拜托P去訪問T,將獲得的信息返回給我們,這個過程中,我們始終知道要訪問的那一臺服務器,所以,這個代理過程稱為正向代理;那么與之相對,如果我們知道要訪問的站點,但是該站點可能同時部署在多個服務器上,不過最終我們獲得了目標站點的內容,這個過程中,我們不知道具體訪問過哪一臺服務器,所以,這個代理過程稱為反向代理。
那么nginx就是近些年來使用率不斷攀升的代理服務器,你可以查看一下中間件的使用情況,這里給出一個調查,點我查看
好了,我們開始吧。我不管你什么系統,但是我假定你已經安裝好了nginx,排除那些系統上操作的差異,我們來感受一下最基本的操作。
nginx的啟動,停止,重新加載配置文件
在控制臺中定位到nginx所在的目錄,使用nginx -s signal操作nginx,signal可以是以下參數
- stop — 立刻停止(不會等待當前工作結束)
- quit — 延遲停止(會等待當前工作結束)
- reload — 重新加載配置文件(會優先檢查新配置文件的格式,通過校驗則啟用新配置,不通過則沿用舊配置)
- reopen — 重新打開日志文件
好了,知道了基本操作之后,我們就看一下配置文件,看懂了配置文件,我們就能讓nginx按照我們的需要來運作。打開nginx.cnf文件
#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;
#與簡單指令相對,下面的event以及一對花括號,稱作“塊指令”;含有其他指令的“塊指令”,我們稱作“上下文”
#同時,我們把不被包含在任何其他上下文中的上下文稱作主上下文
#所以,“events”和“http”就是主上下文,“server”和“location”就不是主上下文
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上下文,它看上去但是也的確是用來配制服務器的
server {
#這個server上下文監聽的端口以及域名
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#這里就是路由規則了,location加空格再加匹配項,這里的匹配項是“/”,也就是說所有以“/”開頭的請求都符合這個路由規則
#但是需要注意一點,nginx在匹配路由的時候有一個最長前綴匹配規則,看到下一個路由規則
location / {
#這里的root指的是響應資源所在的目錄,這是指明,資源在nginx目錄下的index目錄里
root html;
#index指令會響應指定的頁面,按次序進行查找,找到了就返回
index index.html index.htm;
}
#這location的匹配項是“/demo”,那么當一個請求是“/demo/get”的時候,這個請求會匹配之前的“/”和這里的“/demo”,但是
#nginx會選擇前綴較長的匹配項來匹配,所以nginx會使用/demo路由的相應內容
location /demo {
#這里又重新設定了root的值,表示用nginx目錄demo目錄下的資源響應
#如果root在主上下文之外設定,那么相當于一個全局的設定,在其他上下文中沒有被覆蓋的話,則使用全局設定
root demo;
}
#截止到為目前的配置,nginx都是用來響應靜態的資源,比如我們訪問localhost/demo/show.html,那么nginx會返回nginx目錄下
#demo目錄下show.html的內容,所以,我們經常會把nginx當做一個靜態內容緩存來使用,來緩解后續服務器的響應壓力
#對于location來說,常用的還有正則匹配
#靜態資源配置,當然也可以來響應動態請求,不過這里有一點需要注意,當使用正則匹配時,如果請求匹配了當前的路由規則,那么
#會以正則的匹配內容為主并返回,不會使用非正則的匹配項內容返回,以“~”開頭,就表示匹配項是一個正則表達式,當然,還有其
#他不同規則的前綴都表示正則,后續再展開
location ~ .*\.(css|js)(.*) {
proxy_set_header Host $host;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 7d;
}
#對于代理服務器來說,最基本的功能代理是必不可少的,而且配置也非常簡單
#端口轉發配置,做出如下配置之后,符合匹配項的請求會原封不動的轉發到otherhost域名下
location /proxy{
proxy_pass http://otherhost;
}
#下面的配置顯而易見,是錯誤頁面的配置
#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;
}
}
}
#我左邊有個“#”號,這說明這一行都是注釋
#下面的這個,看起來像一對鍵值對,這么理解也可以,官方給出的解釋是“簡單指令”
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#與簡單指令相對,下面的event以及一對花括號,稱作“塊指令”;含有其他指令的“塊指令”,我們稱作“上下文”
#同時,我們把不被包含在任何其他上下文中的上下文稱作主上下文
#所以,“events”和“http”就是主上下文,“server”和“location”就不是主上下文
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上下文,它看上去但是也的確是用來配制服務器的
server {
#這個server上下文監聽的端口以及域名
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#這里就是路由規則了,location加空格再加匹配項,這里的匹配項是“/”,也就是說所有以“/”開頭的請求都符合這個路由規則
#但是需要注意一點,nginx在匹配路由的時候有一個最長前綴匹配規則,看到下一個路由規則
location / {
#這里的root指的是響應資源所在的目錄,這是指明,資源在nginx目錄下的index目錄里
root html;
#index指令會響應指定的頁面,按次序進行查找,找到了就返回
index index.html index.htm;
}
#這location的匹配項是“/demo”,那么當一個請求是“/demo/get”的時候,這個請求會匹配之前的“/”和這里的“/demo”,但是
#nginx會選擇前綴較長的匹配項來匹配,所以nginx會使用/demo路由的相應內容
location /demo {
#這里又重新設定了root的值,表示用nginx目錄demo目錄下的資源響應
#如果root在主上下文之外設定,那么相當于一個全局的設定,在其他上下文中沒有被覆蓋的話,則使用全局設定
root demo;
}
#截止到為目前的配置,nginx都是用來響應靜態的資源,比如我們訪問localhost/demo/show.html,那么nginx會返回nginx目錄下
#demo目錄下show.html的內容,所以,我們經常會把nginx當做一個靜態內容緩存來使用,來緩解后續服務器的響應壓力
#對于location來說,常用的還有正則匹配
#靜態資源配置,當然也可以來響應動態請求,不過這里有一點需要注意,當使用正則匹配時,如果請求匹配了當前的路由規則,那么
#會以正則的匹配內容為主并返回,不會使用非正則的匹配項內容返回,以“~”開頭,就表示匹配項是一個正則表達式,當然,還有其
#他不同規則的前綴都表示正則,后續再展開
location ~ .*\.(css|js)(.*) {
proxy_set_header Host $host;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 7d;
}
#對于代理服務器來說,最基本的功能代理是必不可少的,而且配置也非常簡單
#端口轉發配置,做出如下配置之后,符合匹配項的請求會原封不動的轉發到otherhost域名下
location /proxy{
proxy_pass http://otherhost;
}
#下面的配置顯而易見,是錯誤頁面的配置
#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;
}
}
}
有了這套最基本的配置,就可以試著開啟nginx,感受一下它的功能
posted on 2015-12-01 17:32 都較瘦 閱讀(236) 評論(0) 編輯 收藏 所屬分類: 中間件相關問題積累