Nginx:Nginx概要

 

簡介

nginx是俄羅斯開源的HTTP和代理服務,也能夠做郵件服務器。javascript

核心功能:php

一、正向代理:客戶機的請求先到達nginx,再由nginx代理訪問互聯網資源css

二、反向代理:客戶機請求互聯網,到達nginx後轉發給相應的服務器html

三、負載均衡:支持輪詢、加權輪詢、IPhash等負載均衡算法;支付服務器熱備、冷備前端

四、Web緩存:能夠對不一樣文件作不一樣緩存,相關組件FastCGI_Cache、ngx_cache_purgejava

 

源碼:https://trac.nginx.org/nginx/browsernginx

官網:http://www.nginx.org/c++

官網文檔:http://nginx.org/en/docs/beginners_guide.htmlweb

 

CentOS7安裝Nginx

一、安裝編譯環境

#yum update # yum -y install gcc gcc-c++ autoconf automake libtool make cmake # yum -y install zlib zlib-devel openssl openssl-devel pcre-devel

 

 

yum -y install wget

 

 

cd  /usr/local/
mkdir software cd /usr/local/software //下載
wget wget http://nginx.org/download/nginx-1.13.0.tar.gz //解壓
 tar -zxvf nginx-1.13.0.tar.gz //編譯
./configure --prefix=/usr/local/nginx

 

make & make install

 

配置見後文算法

 

啓動

/usr/local/nginx/sbin/nginx 
/usr/local/webserver/nginx/sbin/nginx -s reload # 從新載入配置文件 /usr/local/webserver/nginx/sbin/nginx -s reopen # 重啓 Nginx /usr/local/webserver/nginx/sbin/nginx -s stop # 中止 Nginx

 

 

 

 二、配置

1、配置概要

一、配置每行分號結束

二、全局模塊:直接屬性配置的,全局設置;如:服務器用戶組、進程、pid、日誌路徑等等

三、events{}塊:配置網絡相關內容;如網絡序列化,最大鏈接等

四、http{}塊,內部包含upstream塊,多個server{}子塊;配置主要負責文件類型與擴展映射、日誌內容格式定義、文件傳輸、鏈接超時時間,熱備等

五、upstream塊,http內子塊,主要作熱備做用

六、server{}塊,是http內的子塊。主要配置主機相關參數;單鏈接請求上限次數,監聽端口,服務器地址等;內涵多個location塊

七、location{}塊,server內的子塊。主要配置請求路由。正則匹配

########### 每一個指令必須有分號結束。################# #user administrator administrators; #配置用戶或者組,默認爲nobody nobody。 #worker_processes 2; #容許生成的進程數,默認爲1 #pid /nginx/pid/nginx.pid; #指定nginx進程運行文件存放地址 error_log log/error.log debug;  #制定日誌路徑,級別。這個設置能夠放入全局塊,http塊,server塊,級別以此爲:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #設置網路鏈接序列化,防止驚羣現象發生,默認爲on multi_accept on; #設置一個進程是否同時接受多個網絡鏈接,默認爲off #use epoll; #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大鏈接數,默認爲512 } http { include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型,默認爲text/plain #access_log off; #取消服務日誌 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式 access_log log/access.log myFormat; #combined爲日誌格式的默認值 sendfile on; #容許sendfile方式傳輸文件,默認爲off,能夠在http塊,server塊,location塊。 sendfile_max_chunk 100k; #每一個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限。 keepalive_timeout 65; #鏈接超時時間,默認爲75s,能夠在http,server,location塊。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #熱備 } error_page 404 https://www.baidu.com; #錯誤頁
 server { keepalive_requests 120; #單鏈接請求上限次數。 listen 4545; #監聽端口 server_name 127.0.0.1; #監聽地址 location ~*^.+$ {       #請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫。 #root path; #根目錄 #index vv.txt; #設置默認頁 proxy_pass http://mysvr; #請求轉向mysvr 定義的服務器列表
           deny 127.0.0.1; #拒絕的ip allow 172.18.5.54; #容許的ip } } }
配置

 

一、配置關鍵字

$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;

$remote_user :用來記錄客戶端用戶名稱;

$time_local : 用來記錄訪問時間與時區;

$request : 用來記錄請求的url與http協議;

$status : 用來記錄請求狀態;成功是200, 

$body_bytes_s ent :記錄發送給客戶端文件主體內容大小;

$http_referer :用來記錄從那個頁面連接訪問過來的;

$http_user_agent :記錄客戶端瀏覽器的相關信息;

二、驚羣現象:一個網路鏈接到來,多個睡眠的進程被同事叫醒,但只有一個進程能得到連接,這樣會影響系統性能。

 

2、代理配置

反向代理配置:

upstream mysvr { server 192.168.10.121:3333; server 192.168.10.122:3333; } server { .... location ~*^.+$ { proxy_pass http://mysvr; #請求轉向mysvr 定義的服務器列表 } 或 upstream mysvr { server http://192.168.10.121:3333; server http://192.168.10.122:3333; } server { .... location ~*^.+$ { proxy_pass mysvr; #請求轉向mysvr 定義的服務器列表 }

 


一、熱備:若是你有2臺服務器,當一臺服務器發生事故時,才啓用backup服務器給提供服務。例如:AAAAAA——>A掛掉,BBBBBBBBBBBBBB.....

upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #熱備 }

 


二、輪詢:nginx默認就是輪詢其權重都默認爲1,服務器處理請求的順序:ABABABABAB....

upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333; }

 


三、加權輪詢:跟據配置的權重的大小而分發給不一樣服務器不一樣數量的請求。若是不設置,則默認爲1。下面服務器的請求順序爲:ABBABBABBABBABB....

upstream mysvr { server 127.0.0.1:7878 weight=1; server 192.168.10.121:3333 weight=2; }

 


四、ip_hash:nginx會讓相同的客戶端ip請求相同的服務器。

upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333; ip_hash; }

 


五、其餘

down,表示當前的server暫時不參與負載均衡。

backup,預留的備份機器。當其餘全部的非backup機器出現故障或者忙的時候,纔會請求backup機器,所以這臺機器的壓力最輕。

max_fails,容許請求失敗的次數,默認爲1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤。

fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間。max_fails能夠和fail_timeout一塊兒使用。

upstream mysvr { server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2; server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1; }

 

 配置詳細

 

user nobody; #工做進程數,建議設置爲CPU的總核數 worker_processes 4; #全局錯誤日誌定義類型,日誌等級從低到高依次爲: #debug | info | notice | warn | error | crit error_log /logs/nginx/error.log info; #記錄主進程ID的文件 pid /logs/nginx/nginx.pid; #指定進程能夠打開的最大描述符數目 worker_rlimit_nofile 204800; events { use epoll; #單個進程最大鏈接數:鏈接數*進程數 65535 worker_connections 204800; } #設定http服務器,利用它的反向代理功能提供負載均衡支持 http { #文件擴展名與文件類型映射表 include mime.types; #默認文件類型 default_type application/octet-stream; charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 2k; large_client_header_buffers 4 4k; client_max_body_size 20m; #爲打開文件指定緩存 open_file_cache max=65535 inactive=60s; #這個是指多長時間檢查一次緩存的有效信息。 #語法:open_file_cache_valid time 默認值:open_file_cache_valid 60 使用字段:http, server, location 這個指令指定了什麼時候須要檢查open_file_cache中緩存項目的有效信息. open_file_cache_valid 80s; #open_file_cache指令中的inactive參數時間內文件的最少使用次數,若是超過這個數字,文件描述符一直是在緩存中打開的,如上例,若是有一個文件在inactive時間內一次沒被使用,它將被移除。 #語法:open_file_cache_min_uses number 默認值:open_file_cache_min_uses 1 使用字段:http, server, location 這個指令指定了在open_file_cache指令無效的參數中必定的時間範圍內能夠使用的最小文件數,若是使用更大的值,文件描述符在cache中老是打開狀態. open_file_cache_min_uses 1; #語法:open_file_cache_errors on | off 默認值:open_file_cache_errors off 使用字段:http, server, location 這個指令指定是否在搜索一個文件是記錄cache錯誤. open_file_cache_errors on; #日誌格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
                      '$request_body'; #access log 記錄了哪些用戶,哪些頁面以及用戶瀏覽器、ip和其餘的訪問信息 access_log /logs/nginx/access.log main; #隱藏ngnix版本號 server_tokens off; #sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲on。若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,下降系統uptime。 sendfile on; #長鏈接超時時間,單位是秒 keepalive_timeout 120; #gzip模塊設置 gzip on; #開啓gzip壓縮輸出 gzip_min_length 1k; #最小壓縮文件大小 gzip_buffers 4 16k; #壓縮緩衝區 gzip_http_version 1.0;    #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0) gzip_comp_level 2; #壓縮等級 gzip_types text/plain application/x-javascript text/css application/xml; #壓縮類型,默認就已經包含textml,因此下面就不用再寫了,寫上去也不會有問題,可是會有一個warn。 gzip_vary on; server { listen 80; server_name xxxxx; access_log /mydata/nginx_log/xx.log main; location / { proxy_pass http://localhost:8080;
 proxy_set_header Host $host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } #php-fpm server { listen 80; server_name xx; access_log /mydata/nginx_log/xx.log main; location / { root /xx; index index.php; } location ~ \.php$ { root /xx; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }

 

 

 

資料:

 

博客

https://www.cnblogs.com/mrlinfeng/p/6146866.html

https://www.cnblogs.com/knowledgesea/p/5199046.html

http://www.javashuo.com/article/p-xkijqyyb-hr.html

相關文章
相關標籤/搜索