學習nginx(三):nginx.conf配置
阿新 • • 發佈:2018-12-28
1.基本配置(預設配置):
#user nobody; 配置nginx worker程序所屬使用者及使用者組,如果沒有寫組名,則預設組名和使用者名稱一致,預設使用者為nobody worker_processes 1; 配置nginx worker程序數量,一般和機器CPU數量一致 以下是錯誤日誌配置,logs/error.log是位置,notice、info是日誌級別,該配置可以配置到任意上下文中 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; 以下是pid檔案配置,pid檔案記錄了master程序的PID #pid logs/nginx.pid; 以下是events上下文,記錄了網路事件相關配置 events { 以下配置了每個worker能處理的連線數,注意不能超過作業系統最大限制 nginx實際處理的連線數為 worker_processes*worker_connections worker_connections 1024; } 以下是http上下文,記錄了http事件相關配置 http { include mime.types; 引入mime.types檔案內的配置 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; sendfile on; 是否允許呼叫sendfile函式 #tcp_nopush on; 是否允許TCP_NOPUSH型別的socket請求 keepalive_timeout 65; 這兩條是長連線超時時間配置 #gzip on; 是否開啟gzip壓縮 以下是server上下文,用於配置虛擬主機 server { listen 80; 監聽的埠,也可以配置為域名、檔案路徑等,可以同時監聽多個物件 server_name localhost; 主機名 #charset koi8-r; 編碼 #access_log logs/host.access.log main; location上下文,用來配置特定uri的訪問規則,這裡的uri是根路徑,支援正則表示式 location / { #root代表請求對映到哪個路徑,index代表頁面配置 root html; index index.html index.htm; } 錯誤頁面配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } HTTPS相關配置 # 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; # } #} }
nginx的上下文主要有:
- main:最外層,不像其它上下文需要顯式寫出名稱和大括號,主要是nginx的系統配置
- events:網路處理相關配置
- http:http請求配置
- upstream:反向代理配置,在http中
- mail:smtp/imap/pop3請求配置
- server:在http、mail之中,定義虛擬主機
- location:server之中,定義uri配置
- server:在http、mail之中,定義虛擬主機
各上下文下面的配置是由各個模組定義的,非常複雜,請查閱官網文件或者原始碼
例如http上下文的listen配置,官網顯示其定義在ngx_http_core_module模組,去nginx原始碼的src/http/ngx_http_core_module.c檔案,就能找到相關定義:
……
static ngx_command_t ngx_http_core_commands[] = {
……
{ ngx_string("listen"),
NGX_HTTP_SRV_CONF|NGX_CONF_1MORE,
ngx_http_core_listen,
NGX_HTTP_SRV_CONF_OFFSET,
0,
NULL },
……
ngx_command_t實際就是ngx_command_s結構體(ngx_command_t在ngx_core.h中使用typedef定義,ngx_command_s在ngx_conf_file.c中定義),具體結構如下:
struct ngx_command_s {
ngx_str_t name;
ngx_uint_t type;
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
ngx_uint_t conf;
ngx_uint_t offset;
void *post;
};
2.反向代理配置&重定向配置(以跳轉百度為例)
#效果:訪問伺服器自動跳轉百度首頁
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#反向代理配置,這裡只配置了一項,如果有多個配置,就可以使用負載均衡
upstream baidu {
server www.baidu.com;
}
server {
listen 80;
server_name localhost;
#代理配置,主要是做跳轉
location / {
proxy_pass http://baidu;
proxy_set_header Host www.baidu.com; #這裡不能寫$host,會出現403 forbidden錯誤
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
主要是加了upstream上下文,修改了 location / 上下文
如果這樣修改效果一樣(原理不一樣):
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
rewrite ^/ http://www.baidu.com;
index index.html;
}
}
rewrite配置是把指定uri的請求進行重定向,這裡是將根目錄的請求重定向到百度首頁。
如果