nginx安裝配置
Nginx介紹
Engine X是一個高性能、高并發的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。
Nginx優點
高并發:Nginx 是一個很強大的高性能Web和反向代理服務器,它具有很多非常優越的特性。在連接高并發的情況下,Nginx是Apache服務器不錯的替代品,能夠支持高達 50,000 個并發連接數的響應。
負載均衡器·:Nginx作為負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作為 HTTP代理服務器對外進行服務。
代理服務器:Nginx本身就是一個反向代理服務器,可支持郵件服務器代理以及http代理
nginx和apache對比
1.輕量級,同樣起web 服務,比apache 占用更少的內存及資源
2.抗并發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高并發下nginx 能保持低資源低消耗高性能
3.高度模塊化的設計,編寫模塊相對簡單
4.配置簡潔易懂,正則配置讓很多事情變得簡單
編譯安裝nginx
安裝所需環境包組: yum -y groupinstall "Development Tools" "Server Platform Development"
安裝所需要依賴包: yum -y install pcre-devel openssl-devel zlib-devel
進入軟件包根目錄配置程序:./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
編輯并安裝:make && make install
###解釋
安裝目錄路徑為:/usr/local/nginx
配置文件路徑為:/etc/nginx/nginx.conf
錯誤日志路徑為:/var/log/nginx/error.log
訪問日志路徑為:/var/log/nginx/access.log
pid存放路徑為:/var/run/nginx.pid
套接字文件路徑為:/var/run/nginx.lock
指定用戶和組為nginx 加載ssl模塊
rpm安裝配置
nginx官方rpm包下載地址:http://nginx.org/packages/centos/7/x86_64/RPMS/
我們這里下載的nginx-1.10.0-1.el7.ngx.x86_64
可以直接使用yum –y install nginx-1.10.0-1.el7.ngx.x86_64.rpm 可以解決依賴問題
查看程序安裝信息:
主配置文件 /etc/nginx/nginx.conf
我們設置虛擬在/etc/nginx/conf.d/default.conf內設置
http{}--->server{}--->location{}
http{}字段內可以包含多個server{}字段 server{}內可以包含多個Location{}字段
service :定義虛擬主機
Location:定義訪問規則
Location:匹配優先級:=, ^~, ~/~*,不帶符號;
nginx默認程序存放路徑為:/usr/share/nginx/html下面;使用ss -tnl查看80端口是否正常運行,如果主機之前安裝有httpd服務請關閉或者更改其一端口即可;
Alias別名設置,僅能用于Location上下文
定義客戶請求的相關配置
設定保持鏈接的超時時長;0表示禁止長連接;默認為75s
keepalive_timeout timeout [header_timeout]
在一次長連接中所允許請求的資源的最大的數量,默認為100;
keepalive_requests number;
對那種瀏覽器禁用長連接
keepalive_disable none | browser ...;
向客戶端發送響應報文的超時時長,此處,是指兩次寫操作之間的間隔時長。
Send_timeout time;
用于接收客戶端請求報文的body部分的緩存大??;默認為16k;超出此大小時,其將被暫存到磁盤上的由client_body_temp_path指令所定義的位置;
client_body_buffer_size size;
設定用于存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量;
client_body_temp_path path [level1 [level2 [level3]]];
16進制的數字;
client_body_temp_path path /var/tmp/client_body 1 2 2
限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制;
limit_rate rate;
限制對指定的請求方法之外的其它方法的使用客戶端;允許192.168.1.0使用GET請求方法,其他全部拒絕。
limit_except GET {
allow 192.168.1.0/32;
}
文件操作優化配置:
是否啟用aio功能
Aio on|off | threads[=pool];
啟用O_DIRECT標記,此處意味文件大于等于給定的大小時使用,例如directio 4m;
directio size | off;
open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以緩存以下三種信息:
(1) 文件的描述符、文件大小和最近一次的修改時間;
(2) 打開的目錄結構;
(3) 沒有找到的或者沒有權限訪問的文件的相關信息;
max=N:可緩存的緩存項上限;達到上限后會使用LRU算法實現緩存管理;
inactive=time:緩存項的非活動時長,在此處指定的時長內未被命中的或命中的次數少于open_file_cache_min_users指令所指定的次數的緩存項即為非活動項;
緩存項有效性的檢查頻率;默認為60s;
open_file_cache_valid time;
在open_file_cache指令的inactive參數指定的時長內,至少應該被命中多少次方可被歸類為活動項;
open_file_cache_min_uses number;
是否緩存查找時發生錯誤的文件一類的信息;
open_file_cache_errors on | off;
用戶訪問權限設置:
實現基于用戶的訪問控制,使用basic機制進行用戶認證;
ngx_http_stub_status_module模塊輸出nginx的基本狀態信息;
location /basic_status {
stub_status;
}
Active connections: 活動狀態的連接數;
accepts:已經接受的客戶端請求的總數;
handled:已經處理完成的客戶端請求的總數;
requests:客戶端發來的總的請求數;
Reading:處于讀取客戶端請求報文首部的連接的連接數;
Writing:處于向客戶端發送響應報文過程中的連接數;
Waiting:處于等待客戶端發出請求的空閑連接數;
ngx_http_rewrite_module模塊;
注意:如果在同一級配置塊中存在多個rewrite規則,那么會自下而下逐個檢查;被某條件規則替換完成后,會重新一輪的替換檢查,因此,隱含有循環機制;[flag]所表示的標志位用于控制此循環機制;
如果replacement是以http://或https://開頭,則替換結果會直接以重向返回給客戶端;
Flag標記:
last:重寫完成后停止對當前URI在當前location中后續的其它重寫操作,而后對新的URI啟動新一輪重寫檢查;提前重啟新一輪循環;
break:重寫完成后停止對當前URI在當前location中后續的其它重寫操作,而后直接跳轉至重寫規則配置塊之后的其它配置;結束循環;
redirect:重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求;不能以http://或https://開頭;返回302臨時重定向 地址欄會顯示跳轉后的地址
permanent:重寫完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求;返回301永久重定向 地址欄會顯示跳轉后的地址
可以將重新記錄存放于日志當中;rewrite_log on | off;
引入一個新的配置上下文;條件滿足時,執行配置塊中的配置指令:server,Location
if (condition) {…}
condition選項:
比較操作符:
==:模式匹配,精確匹配;
!=:模式不匹配,精確匹配;
~:模式匹配,區分字符大小寫;
~*:模式匹配,不區分字符大小寫;
!~:模式不匹配,區分字符大小寫;
!~*:模式不匹配,不區分字符大小寫;
文件及目錄存在性判斷:
-f和!-f判斷是否存在文件
-d和!-d判斷是否存在目錄
-e和!-e判斷是否存在文件或目錄
-x和!-x判斷文件是否可執行
用戶自定義變量:Set $variable value;
$args 此變量與請求行中的參數相等
$content_length 等于請求行的“Content_Length”的值。
$content_type 等同與請求頭部的”Content_Type”的值
$document_root 等同于當前請求的root指令指定的值
$document_uri 與$uri一樣
$host 與請求頭部中“Host”行指定的值或是request到達的server的名字(沒有Host行)一樣
$limit_rate 允許限制的連接速率
$uri 等同于當前request中的URI,可不同于初始值,例如內部重定向時或使用index
$server_protocol 等同于request的協議,使用“HTTP/1.0”或“HTTP/1.1”
$server_port 請求到達的服務器的端口號
$server_name 請求到達的服務器名
$server_addr request到達的server的ip,一般獲得此變量的值的目的是進行系統調用。為了避免系統調用,有必要在listen指令中指明ip,并使用bind參數。
$request_uri 含有參數的完整的初始URI
$request_method 等同于request的method,通常是“GET”或“POST”
$request_filename 當前請求的文件的路徑名,由root或alias和URIrequest組合而成
$request_body_file
$remote_user 等同于用戶名,由ngx_http_auth_basic_module認證
$remote_port 客戶端port
$remote_addr 客戶端ip
$query_string 與$args一樣
指定返回客戶端代碼:return 400;支持被返回的代碼有:204,400,402 - 406,408,410,411,413,416,和500 - 504。
gzip壓縮模塊
Gzip:開啟網站壓縮功能:
Gzip on|off 開啟
gzip_comp_level level; 壓縮等級
gzip_min_length legth; 啟用壓縮功能的響應報文大小閾值;
gzip_proxied expired no-cache no-store private auth;
nginx作為代理服務器接收到從被代理服務器發送的響應報文后,在何種條件下啟用壓縮功能的;
off:對代理的請求不啟用
no-cache, no-store,private:表示從被代理服務器收到的響應報文首部的Cache-Control的值為此三者中任何一個,則啟用壓縮功能;
gzip_types mime-type ...;
壓縮過濾器,僅對此處設定的MIME類型的內容啟用壓縮功能;
客戶端開啟前效果:
客戶端開啟后效果:
ngx_http_fastcgi_module模塊:
安裝php 和php-fpm:yum –y install php php-fpm
編輯nginx配置文件:vim /etc/nginx/conf.d/vhosts.conf
location ~ \.php$ {
root /usr/share/nginx/html/R1;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/R1$fastcgi_script_name;
include fastcgi_params;
}
使用nginx –t查看配置文件是否存在語法錯誤
啟動nginx與php-fpm
systemctl start nginx
systemctl start php-fpm
瀏覽器查看效果
查看fpm運行狀態
在/etc/php-fpm.d/www.conf里面開啟pm_status和ping并設置location即可
通過/pm_status和/ping來獲取fpm server狀態信息;
location ~* ^/(pm_status|ping)$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
效果圖 :
定義fastcgi的緩存;緩存位置為磁盤上的文件系統,由path所指定路徑來定義;
levels=levels:緩存目錄的層級數量,以及每一級的目錄數量;levels=ONE:TWO:THREE
leves=1:2:2
keys_zone=name:size
k/v映射的內存空間的名稱及大小
inactive=time
非活動時長
max_size=size
磁盤上用于緩存數據的緩存空間上限
fastcgi_cache zone | off;
調用指定的緩存空間來緩存數據;http, server, location
fastcgi_cache_key string;
定義用作緩存項的key的字符串;
fastcgi_cache_methods GET | HEAD | POST ...;
為哪些請求方法使用緩存;
fastcgi_cache_min_uses number;
緩存空間中的緩存項在inactive定義的非活動時間內至少要被訪問到此處所指定的次數方可被認作活動項;
fastcgi_cache_valid [code ...] time;
不同的響應碼各自的緩存時長;
示例:
http {
...
fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;
...
server {
...
location ~* \.php$ {
...
fastcgi_cache fcgi;
fastcgi_cache_key $request_uri;
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301 1h;
fastcgi_cache_valid any 1m;
...
}
...
}
...
}
原創文章,作者:鬧鐘哥,如若轉載,請注明出處:http://www.www58058.com/58439