Nginx配置段(3)
阿新 • • 發佈:2019-01-08
spdy jpg ipv6 web服務 lag prot 接受 文件系統 安裝
安裝方法:
rpm及源碼安裝:
# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
# make && make install
Tmalloc, gperftools
配置段:
nginx:
main配置段
http {
}
http配置:http core 配置一個靜態web服務器 ngx_http_core_module 配置框架: http { upstream { .,.. } server { listen IP:PORT; # 虛擬主機 location /URL { if ...{ ... } #類似於httpd中的<Location>,用於定義URL與本地文件系統的映射關系; root "/path/to/somewhere"; ... } } #每個server類似於httpd中的一個<VirtualHost> server { ,,. } } 註意:與http配置相關的指令必須放在http、server、location、upstream、if塊中; 虛擬主機相關的配置: 1、server {} 定義一個虛擬主機; server { listen 8080; server_name www.zhanx.wang; root "/vhosts/web1"; } 2、listen 監聽的端口 完整格式 :listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; listen address[:port] [default_server] ssl backlog=number: 指明TCP協議backlog隊列的大小。默認為-1,表示不設置; rcvbuf=size:設定監聽句柄的SO_RCVBUF參數; 例如: listen 172.16.100.8:8080 3、server_name name [...]; 後可跟多個主機名;名稱還可以使用通配符和正則表達式(~); (1) 先做精確匹配;www.zhanxwang: (2) 左側通配符匹配,例如:*.zhanx.wang; (3) 右側通配符匹配,例如:www.*; (4) 正則表達式匹配,例如: ~^.*\.zhanx\.wang$ (5) default_server 4、location [=|~|~*|^~] /uri {...} location @name 功能:允許根據用戶請求的URI來匹配定義的各location,匹配到時,此請求將被相應的location塊中的配置所處理; =: 精確匹配檢查; ~: 正則表達式模式匹配,區分字符大小寫; ~*:正則表達式模式 匹配,不區分字符大小寫; ^~:URI的前半部分匹配,不檢查正則表達式; 匹配優先級:精確匹配(=)、^~、~和~*、由不帶符號的URL進行左側匹配; server { listen 80 server_name www.zhanx.wang location / { root "/vhosts/web1"; } location /images/ { root "vhosts/images"; } location ~*\.php${ fcgipass } } 5、root 設置web資源路徑映射;用於指明請求的URL所對應的文檔的根目錄路徑; location /images/ { root "/web/imgs/"; } 6、alias path 用於location配置段,定義路徑別名 location /images/ { alias /www/pictures/; } http://www.zhanx.wang/image/a.jpg <--- /www/pictures/a.jpg 註意:root表示指明路徑為對應location的“ /” URL; alias表示路徑映射,即location中的URL是相對於alias所指明的路徑而言; 7、index file 默認主頁面 index index.php index.html; 8、error_page code [...] [=code] URI | @name 根據http狀態碼重定向錯誤頁面 error_page 404 /404.html =[code]: 以指定的響應碼進行響應;省略code表示以新資源的響應碼為響應碼; 9、try_files try_files path1[,path2,...] URI 10、基於IP地址的訪問控制; allow IP/Network; deny IP/Network; 11、基於用戶的訪問控制; basic,digest auth_basic ""; auth_basic_user_file "/PATH/TO/PASSWORD_FILE" 賬號密碼文件建議使用htpasswd來創建; 12、https服務 生成私鑰 13、stub_status {on|off}; 僅能用於location上下文; location /status { stub_status on; allow 172.16.0.0/16; deny all; } 結果示例: Active connection: 6 #當前所有處於打開狀態的連接數; server accepts handled requests 241 241 431 (1)已經接受的連接 (2)已經處理過的連接數 (3)已經處理過的請求數:在“保持連接”模式下,請求數量可能會多於連接數量; Reading:0 Writing:1 Waiting:5 Reading:正處於接收請求狀態的連接數; Writing:請求已經接收完成,正在處理請求或發送響應的過程中的連接數; waiting:保持連接模式,且處於活動狀態的連接數; 14、rewrite regex replacement flag; 例如: ... rewrite ^/images/(.*\.jpg)$ /imgs/$1 last; rewrite ^/imgs/(.*\.jpg)$ /images/$1 last; ... rewrite ^/images/(.*\.jpg)$ /imgs/$1 break; ... http://www.zhanx.wang/image/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg flag: last:一旦此rewrite規則重寫完成後,就不再被後面其它的rewrite規則進行處理,而是由user Agent重新對重寫後的url再一次發起請求,並從頭開始執行類似的過程 break:一旦此rewrite規則重寫完成後,由user Agent 對新的URl重新發起請求,且不再會被當前location內的任何rewrite規則所檢查 redirect:以302響應碼(臨時重定向)返回新的URL; permanent:以301響應碼(永久重定向)返回新的URL; 15、if 語法:if(condition){...} 應用環境:server,location condition: (1) 變量名: 變量值為空串,或者以“0”開始,則為false;其他的均為true; (2) 以變量為操作數構成的比較表達式 可使用=,!=類似的比較操作符進行測試 (3) 正則表達式的模式匹配操作 ~:區分大小寫的模式匹配檢查 ~*:不區分大小寫的模式匹配檢查 !~和!~*: 對上面兩種測試取反 (4) 測試路徑為文件可能性:-f,!-f (5) 測試指定路徑為目錄的可能性:-d, !-d (6) 測試文件的存在性: -e, !-e (7) 檢查文件是否有執行權限:-x,!-x 例如: if ($http_user_agent ~* MSIE) { rewrite ^(.*)$ /msie/$1 break; } 16、防盜鏈 location ~* \.(jpg|gif|jpeg|png)$ { valid_referer none blocked www.zhanx.wang if ($invalid_referer) { rewrite ^/ http://www.zhanx.wang/403.html #(盜鏈提示) } } 17、定制訪問日誌格式 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 /var/log/nginx/access.log main; 註意:此處可用變量為Nginx各模塊內建變量; 網絡連接相關的配置: 1、keepalive_timeout time; 保持連接的超時時長,默認為75s; 2、keepalive_requests #; 在一次保持連接上允許承載最大資源請求數; 3、keepalive_disable [msie6|safari|none] 為指定類型的瀏覽器禁用長連接; 4、tcp_nodelay on|off 對長連接是否使用TCP_NODELAY選項; 5、client_header_timeout time; 讀取http請求報文首部的超時時長; 6、client_body_timeout time; 讀取http請求報文body部分的超時時長; 7、send_timeout time; 發送響應報文的超時時長;
Nginx配置段(3)