轉載請標明出處:
http://blog.csdn.net/forezp/article/details/78616591
本文出自方誌朋的博客javascript
Nginx是一個高性能的Web 服務器,同時是一個高效的反向代理服務器,它仍是一個IMAP/POP3/SMTP
代理服務器。php
因爲Nginx採用的是事件驅動的架構,可以處理併發百萬級別的tcp鏈接,高度的模塊化設計和自由的BSD許可,使得Nginx有着很是豐富的第三方模塊。好比Openresty、API網關Kong。css
BSD開源協議是一個給予使用者很大自由的協議。基本上使用者能夠"隨心所欲",能夠自由的使用,修改源代碼,也能夠將修改後的代碼做爲開源或者專有軟件再發布。html
Centos系統安裝,請參考這裏http://www.linuxidc.com/Linux/2016-09/134907.htm。先複製粘貼下它的文章。java
安裝 nginx 須要先將官網下載的源碼進行編譯,編譯依賴 gcc 環境,若是沒有 gcc 環境,則須要安裝:node
yum install gcc-c++linux
PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,因此須要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也須要此庫。命令:nginx
yum install -y pcre pcre-develc++
zlib 庫提供了不少種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,因此須要在 Centos 上安裝 zlib 庫。git
yum install -y zlib zlib-devel
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、經常使用的密鑰和證書封裝管理功能及 SSL 協議,並提供豐富的應用程序供測試或其它目的使用。
nginx 不只支持 http 協議,還支持 https(即在ssl協議上傳輸http),因此須要在 Centos 安裝 OpenSSL 庫。
yum install -y openssl openssl-devel
1.直接下載.tar.gz安裝包,地址:https://nginx.org/en/download.html
2.使用wget命令下載(推薦)。
依然是直接命令:
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1
其實在 nginx-1.10.1 版本中你就不須要去配置相關東西,默認就能夠了。固然,若是你要本身配置目錄也是能夠的。
使用默認配置
./configure
make
make install
查找安裝路徑:
whereis nginx
Nginx的模塊從結構上分爲核心模塊、基礎模塊和第三方模塊:
Nginx的高併發得益於其採用了epoll模型,與傳統的服務器程序架構不一樣,epoll是linux內核2.6之後纔出現的。Nginx採用epoll模型,異步非阻塞,而Apache採用的是select模型。
nginx 環境變量配置:
export PATH=$PATH:/usr/servers/nginx/sbin
查看nginx進程
ps -ef|grep nginx
啓動nginx
nginx
啓動結果顯示nginx的主線程和工做線程,工做線程的數量跟nginx.conf中的配置參數worker_processes有關。
平滑啓動nginx
kill -HUP cat /var/run/nginx.pid
或者
nginx -s reload
強制中止nginx
pkill -9 nginx
檢查對nginx.conf文件的修改是否正確
nginx -t
中止nginx的命令
nginx -s stop或者pkill nginx
查看nginx的版本信息
nginx -v
查看完整的nginx的配置信息
nginx -V
一般狀況下,Nginx的配置在Ngix的安裝目錄下的/conf/config.default 文件裏,基本配置以下:
worker_process # 表示工做進程的數量,通常設置爲cpu的核數 worker_connections # 表示每一個工做進程的最大鏈接數 server{} # 塊定義了虛擬主機 listen # 監聽端口 server_name # 監聽域名 location {} # 是用來爲匹配的 URI 進行配置,URI 即語法中的「/uri/」 location /{} # 匹配任何查詢,由於全部請求都以 / 開頭 root # 指定對應uri的資源查找路徑,這裏html爲相對路徑,完整路徑爲 # /opt/nginx-1.7.7/html/ index # 指定首頁index文件的名稱,能夠配置多個,以空格分開。若有多 # 個,按配置順序查找。
location 經常使用配置以下:
模式 | 含義 |
---|---|
location = /uri | = 表示精確匹配,只有徹底匹配上才能生效 |
location ^~ /uri | ^~ 開頭對URL路徑進行前綴匹配,而且在正則以前。 |
location ~ pattern | 開頭表示區分大小寫的正則匹配 |
location ~* pattern | 開頭表示不區分大小寫的正則匹配 |
location /uri | 不帶任何修飾符,也表示前綴匹配,可是在正則匹配以後 |
location / | 通用匹配,任何未匹配到其它location的請求都會匹配到,至關於switch中的default |
Nginx的經常使用配置很是多,如下內容摘自於布爾教育課件,僅供參考:
#定義Nginx運行的用戶和用戶組 user www www; #啓動進程,一般設置成和cpu的數量相等 worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; #爲每一個進程分配cpu,上例中將8個進程分配到8個cpu,固然能夠寫多個,或者將一個進程分配到多個cpu。 worker_rlimit_nofile 102400; #這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打 #開文件數(ulimit -n)與nginx進程數相除,可是nginx分配請求並非那麼均勻 #,因此最好與ulimit -n的值保持一致。 #全局錯誤日誌及PID文件 error_log /usr/local/nginx/logs/error.log; #錯誤日誌定義等級,[ debug | info | notice | warn | error | crit ] pid /usr/local/nginx/nginx.pid; #一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,可是nginx分配請求並不均勻. #因此建議與ulimit -n的值保持一致。 worker_rlimit_nofile 65535; #工做模式及鏈接數上限 events { use epoll; #epoll是多路複用IO(I/O Multiplexing)中的一種方式,可是僅用於linux2.6以上內核,能夠大大提升nginx的性能 worker_connections 102400; #單個後臺worker process進程的最大併發連接數 (最大鏈接數=鏈接數*進程數) multi_accept on; #儘量多的接受請求 } #設定http服務器,利用它的反向代理功能提供負載均衡支持 http { #設定mime類型,類型由mime.type文件定義 include mime.types; default_type application/octet-stream; #設定日誌格式 access_log /usr/local/nginx/log/nginx/access.log; sendfile on; #sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對於普通應用必須設爲 on #若是用來進行下載等應用磁盤IO重負載應用,可設置爲 off,以平衡磁盤與網絡I/O處理速度,下降系統的uptime. #autoindex on; #開啓目錄列表訪問,合適下載服務器,默認關閉。 tcp_nopush on; #防止網絡阻塞 keepalive_timeout 60; #keepalive超時時間,客戶端到服務器端的鏈接持續有效時間,當出現對服務器的後,繼請求時,keepalive-timeout功能可避免創建或從新創建鏈接。 tcp_nodelay on; #提升數據的實時響應性 #開啓gzip壓縮 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; #壓縮級別大小,最大爲9,值越小,壓縮後比例越小,CPU處理更快。 #值越大,消耗CPU比較高。 gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; client_max_body_size 10m; #容許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數, proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時) proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時) proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的話,這樣設置 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) #設定請求緩衝 large_client_header_buffers 4 4k; client_header_buffer_size 4k; #客戶端請求頭部的緩衝區大小,這個能夠根據你的系統分頁大小來設置,通常一個請求的頭部大小不會超過1k #不過因爲通常系統分頁都要大於1k,因此這裏設置爲分頁大小。分頁大小能夠用命令getconf PAGESIZE取得。 open_file_cache max=102400 inactive=20s; #這個將爲打開文件指定緩存,默認是沒有啓用的,max指定緩存數量,建議和打開文件數一致,inactive是指通過多長時間文件沒被請求後刪除緩存。 open_file_cache_valid 30s; #這個是指多長時間檢查一次緩存的有效信息。 open_file_cache_min_uses 1; #open_file_cache指令中的inactive參數時間內文件的最少使用次數,若是超過這個數字,文件描述符一直是在緩存中打開的,如上例,若是有一個文件在inactive #包含其它配置文件,如自定義的虛擬主機 include vhosts.conf; }
配置詳解2以下:
#這裏爲後端服務器wugk應用集羣配置,根據後端實際狀況修改便可,tdt_wugk爲負載均衡名稱,能夠任意指定 #但必須跟vhosts.conf虛擬主機的pass段一致,不然不能轉發後端的請求。weight配置權重,在fail_timeout內檢查max_fails次數,失敗則剔除均衡。 upstream tdt_wugk { server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s; server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s; } #虛擬主機配置 server { #偵聽80端口 listen 80; #定義使用www.wuguangke.cn訪問 server_name www.wuguangke.cn; #設定本虛擬主機的訪問日誌 access_log logs/access.log main; root /data/webapps/wugk; #定義服務器的默認網站根目錄位置 index index.php index.html index.htm; #定義首頁索引文件的名稱 #默認請求 location ~ /{ root /data/www/wugk; #定義服務器的默認網站根目錄位置 index index.php index.html index.htm; #定義首頁索引文件的名稱 #如下是一些反向代理的配置. proxy_next_upstream http_502 http_504 error timeout invalid_header; #若是後端的服務器返回50二、50四、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另外一臺服務器,實現故障轉移。 proxy_redirect off; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://tdt_wugk; #請求轉向後端定義的均衡模塊 } # 定義錯誤提示頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #配置Nginx動靜分離,定義的靜態頁面直接從Nginx發佈目錄讀取。 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /data/www/wugk; #expires定義用戶瀏覽器緩存的時間爲3天,若是靜態頁面不常更新,能夠設置更長,這樣能夠節省帶寬和緩解服務器的壓力。 expires 3d; } #PHP腳本請求所有轉發到 FastCGI處理. 使用FastCGI默認配置. location ~ \.php$ { root /root; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/www/wugk$fastcgi_script_name; include fastcgi_params; } #設定查看Nginx狀態的地址 location /NginxStatus { stub_status on; } } }
名稱 | 說明 |
---|---|
$arg_name | 請求中的name參數 |
$args | 請求中的參數 |
$binary_remote_addr | 遠程地址的二進制表示 |
$body_bytes_sent | 已發送的消息體字節數 |
$content_length HTTP | 請求信息裏的"Content-Length" |
$content_type | 請求信息裏的"Content-Type" |
$document_root | 針對當前請求的根路徑設置值 |
$host | 請求信息中的"Host",若是請求中沒有Host行,則等於設置的服務器名 |
$hostname | 機器名使用 gethostname系統調用的值 |
$http_cookie | cookie 信息 |
$http_referer | 引用地址 |
$http_user_agent | 客戶端代理信息 |
$http_via | 最後一個訪問服務器的Ip地址。 |
$http_x_forwarded_for | 至關於網絡訪問路徑 |
$is_args | 若是請求行帶有參數,返回「?」,不然返回空字符串 |
$limit_rate | 對鏈接速率的限制 |
$nginx_version | 當前運行的nginx版本號 |
$pid worker | 進程的PID |
$query_string | 與args相同 |
$realpath_root | 按root指令或alias指令算出的當前請求的絕對路徑。其中的符號連接都會解析成真是文件路徑,使用 Nginx 內置綁定變量 |
207$remote_addr | 客戶端IP地址 |
$remote_port | 客戶端端口號 |
$remote_user | 客戶端用戶名,認證用 |
$request | 用戶請求 |
$request_body | 這個變量(0.7.58+) 包含請求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比較有意義 |
$request_body_file | 客戶端請求主體信息的臨時文件名 |
$request_completion | 若是請求成功,設爲"OK";若是請求未完成或者不是一系列請求中最後一部分則設爲空 |
$request_filename | 當前請求的文件路徑名,好比/opt/nginx/www/test.php |
$request_method | 請求的方法,好比"GET"、"POST"等 |
$request_uri | 請求的URI,帶參數 |
$scheme | 所用的協議,好比http或者是https |
$server_addr | 服務器地址,若是沒有用listen指明服務器地址,使用這個變量將發起一次系統調用以取得地址(形成資源浪費) |
$server_name | 請求到達的服務器名 |
$server_port | 請求到達的服務器端口號 |
$server_protocol | 請求的協議版本,「HTTP/1.0"或"HTTP/1.1」 |
$uri | 請求的URI,可能和最初的值有不一樣,好比通過重定向之類的 |
http://www.linuxidc.com/Linux/2016-09/134907.htm
https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx/nginx.html
布爾教育課件
掃碼關注公衆號有驚喜
(轉載本站文章請註明做者和出處 方誌朋的博客)