nginx服務三---nginx配置文件解釋補充

Nginx 配置文件主要分成四部分:main(全局設置)、http(HTTP 的通用設置)、server(虛擬主機設置)、location(匹配 URL 路徑)。還有一些其他的配置段,如 event,upstream 等。
一、通用配置
user nginx          ##指定運行 nginx workre 進程的用戶和組
worker_rlimit_nofile      #指定所有 worker 進程能夠打開的最大文件數
worker_cpu_affinity       #設置 worker 進程的 CPU 粘性,以避免進程在 CPU 間切換帶來的性能消耗。如 worker_cpu_affinity 0001 0010 0100 1000;(四核)
worker_processes 4    ##worker 工作進程的個數,這個值可以設置爲與 CPU 數量相同,如果開啓了 SSL 和 Gzip,那麼可以適當增加此數值
worker_connections 1000     ##單個 worker 進程能接受的最大併發連接數,放在 event 段中
error_log logs/error.log info      ##錯誤日誌的存放路徑和記錄級別
use epoll      ##使用 epoll 事件模型,放在 event 段中
二、http 服務器
server {}:                                ##定義一個虛擬主機
listen 80;                   ##定義監聽的地址和端口,默認監聽在本機所有地址上
server_name NAME [...];               ##定義虛擬主機名,可以使用多個名稱,還可以使用正則表達式或通配符。
sendfile on                      ##開啓 sendfile 調用來快速的響應客戶端
keepalive_timeout 65      ##長連接超時時間,單位是秒。
send_timeout                 ##指定響應客戶端的超時時間
client_max_body_size 10m             ##允許客戶端請求的實體最大大小
root PATH                                      ##設置請求 URL 所對應資源所在文件系統上的根目錄
location [ = | ~ | ~* | ^~ ] URI { ... }        ##設置一個 URI 匹配路徑
=:精確匹配
~:正則表達式匹配,區分字符大小寫
~*:正則表達式匹配,不區分字符大小寫
^~:URI 的前半部分匹配,且不實用正則表達式
優先級: = > location 完整路徑 > ^~ > ~ > ~* > location 起始路徑 > location /
allow 和 deny
基於 IP 訪問控制,如:
僅允許 192.168.0.0/24 網段客戶端訪問
allow 192.168.0.0/24;
deny all;
stub_status on
開啓狀態顯式,僅能用於 location 中:
開啓狀態顯式頁面
location /status {
stub_status on;
allow 172.16.0.0/16;
deny all;
}
rewrite <REGEX> <REPL> <FLAG>                       ##URL 重寫,可以使用多種標記
例如:rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
可用的 flag:
- last:重寫完成後,繼續匹配其他 rewrite 規則
- break:重寫完成後不再繼續匹配
- redirect:返回 302 重定向(臨時重定向),客戶端對重定向的 URL 發起新的請求
- permanent:返回 301 重定向(永久重定向),客戶端對重定向的 URL 發起新的請求
一個 server 配置示例:
server {
listen 80;
server_name www.example.com;
root /web/htdocs;
location / {
index index.html index.htm;
}
location /status {
stub_status on;
allow 10.0.0.0/8;
deny all;
access_log off;
}
三、SSL 的配置
啓用一個 SSL 虛擬主機
server {
listen 443;
server_name example.com;
root /apps/www;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
# ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
}
其中 ssl_certificate 表示 CA 文件,ssl_certificate_key 表示密鑰文件。
如果想把 http 請求強制轉到 https,可以這樣:
server {
listen 80;
server_name example.me;
return 301 https://$server_name$request_uri;
}
四、nginx 做負載均衡反向代理
nginx 做反向代理時,後端主機有多臺,可以使用 upstream 定義一個後端主機池,在反向代理時直接使用主機池的名字。在 upstream 中可以定義負載均衡調度算法,權重,健康狀態檢測等參數。
例如:
upstream backend {
server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10;
server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;;
}
默認請求下,使用 round-robin 調度算法,並有健康狀態檢查和恢復主機的能力。
ningx 還可以使用這些算法:
ip_hash:基於源地址哈希,主要目的是會話保持
least_conn:基於最少活動連接進行調度
sticky:基於 cookie 進行會話綁定,nginx 會在客戶端第一次訪問時插入路由信息到 cookie 中,或者選擇cookie 中的某個字段的值作爲鍵,以後每次請求將基於此信息進行調度。
基於 cookie 的會話綁定共有 cookie,route 和 learn 三種。
例如,基於 cookie name 的調度:
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky cookie srv_id expires=1h domain=.example.com path=/;
}
使用此主機組進行反向代理:
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_haeder X-Forwared-For $proxy_add_x_forwarded_for;
}
proxy_pass URL 指定代理的後端主機,可以指定 "http" 或 "https" 協議,域名可以是 ip 地址,也可以是
upstream 池名字
如果代理指定的是一個 URI 地址,如 http://127.0.0.1/remote,那麼將直接被代理至指定 URI,無論請求的URI 是什麼
如果代理指定的一個主機而沒有 URI,如 http://127.0.0.1,客戶端請求的URI將被傳遞至指定域名
如果 location 中使用模式匹配 url,那麼 url 也會被傳遞至代理 URL 的末端
如果 location 中使用了 URI 重寫,那麼 proxy_pass 會使用重寫後的結果進行處理
proxy_set_header HEADER VALUE 對轉發的報文首部進行修改
五、 反向代理時的緩存相關設定
proxy_cache_path PATH [levels=levels] keys_zone=NAME:SIZE
定義磁盤緩存路徑,nignx 的緩存是以鍵值方式存放的,keys_zone 用於指定鍵存放的內存空間名字和大小,對應的值則存放在 PATH 指定的路徑中。levels 可以指定緩存存放路徑的級數和名稱字符數。此設置只能在http 段中定義。
如:
proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=one:10m;
proxy_cache_valid [code ...] time 指定不同響應碼的內容的緩存時間
如:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1m;
proxy_cache_method METHOD 定義哪些方法的請求結果可以被緩存,如:
proxy_cache_method GET;
proxy_cache_method HEAD;
proxy_cache NAME 指定使用預先定義的緩存空間用於緩存
fastCGI 代理的設置
使用 fastCGI 時,設置代理的方法同 porxy_pass 類似,同時還可以使用 fastCGI 緩存,設置的方法也和
proxy_cache 類似。
location ~ \.php$ {
root /web/htdocs;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
一些常用內置變量
$arg_name:請求 uri 中的 name 參數至
$args:請求 uri 的所有參數,和 $query_string 相同
$uri:當前請求的 uri,不帶參數
$request_uri:請求的 uri,帶完整參數
$host:http 請求報文中 host 首部,如果沒有 host 首部,則以處理此請求的虛擬主機的主機名替代
$hostname:nginx 服務運行在主機的主機名
$remote_addr:客戶端 IP
$remote_port:客戶端 port
$remote_user:使用用戶認證時客戶端用戶輸入的用戶名
$request_filename:用戶請求中的 URI 經過本地 root 或 alias 轉換後映射的本地的文件路徑
$request_method:請求方法
$server_addr:服務器地址
$server_name:服務器名稱
$server_port:服務器端口
$server_protocol:服務器向客戶端發送響應時的協議,如 http/1.1,http/1.0
$scheme:在請求中使用的 scheme,如 https://www.magedu.com/ 中的 https
$http_name:匹配請求報文中的指定 HEADER,如 $http_host 匹配請求報文中的 host 首部
$sent_http_name:匹配響應報文中指定的 HEADER,例如 $sent_content_type 匹配響應報文中的 content-type 首部
$status:響應狀態
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章