linux下Nginx配置檔案(nginx.conf)配置設定詳解(windows用phpstudy整合)
linux備份nginx.conf檔案舉例:
cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期)
在程序列表裡 面找master程序,它的編號就是主程序號。
ps -ef | grep nginx
檢視程序
cat /usr/local/nginx/nginx.pid
每次修改完nginx檔案都要重新載入配置檔案linux命令:
/usr/local/nginx -t //驗證配置檔案是否合法
若nginx.conf配置了pid檔案存放路徑則該檔案存放的就是Nginx主程序號就用pid
殺掉程序
kill -HUP /usr/local/nginx/nginx.pid kill-HUP 主程序號
從容停止Nginx
kill -QUIT /usr/local/nginx/nginx.pid
kill -QUIT 主程序號
快速停止Nginx
kill -TERM /usr/local/nginx/nginx.pid
kill -TERM 主程序號
強制停止Nginx
kill -9 /usr/local/nginx/nginx.pid
kill -9 主程序號
個程序如果是相同的程序名可以使用pkill命令
pkill nginx
多個程序如果是相同的程序名可以使用Killall命令
killall nginx
啟動
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
停止/重新載入
/usr/local/nginx/nginx -s stop(quit,reload)
"http { }"塊的開頭像配置檔案的開頭一樣都是標準配置不需要修改。這裡我們需要把注意力放在這些元素上
連線超時時間,1分鐘,具體時間可以根據請求(例如後臺匯入)需要的時間來設定:
keepalive_timeout 600;
使用nginx伺服器如果遇到timeou情況時可以如下設定引數,使用fastcgi:
fastcgi_connect_timeout 75; 連結 fastcgi_read_timeout 600; 讀取 fastcgi_send_timeout 600; 發請求
這兩個選項.
fastcgi_read_timeout是指fastcgi程序向nginx程序傳送response的整個過程的超時時間
fastcgi_send_timeout是指nginx程序向fastcgi程序傳送request的整個過程的超時時間
這兩個選項預設都是秒(s),可以手動指定為分鐘(m),小時(h)等
buffer 機制
對於來自 FastCGI Server 的 Response,Nginx 將其緩衝到記憶體中,然後依次傳送到客戶端瀏覽器。緩衝區的大小由 fastcgi_buffers 和 fastcgi_buffer_size 兩個值控制。
比如如下配置:
fastcgi_buffers 8 4K; #控制 nginx 最多建立 8 個大小為 4K 的緩衝區 fastcgi_buffer_size 4K; #處理 Response 時第一個緩衝區的大小,不包含在前者中
總計能建立的最大記憶體緩衝區大小是 8*4K+4K = 36k
當 Response 小於等於 36k 時,所有資料當然全部在記憶體中處理。如果 Response 大於 36k 呢?fastcgi_temp 的作用就在於此。多出來的資料會被臨時寫入到檔案中,放在這個目錄下面。
fastcgi_busy_buffers_size #預設值是fastcgi_buffers的兩倍。 fastcgi_temp_file_write_size #在寫入快取檔案時使用多大的資料塊,預設值是fastcgi_buffers的兩倍。
fastcgi_cache表示開啟FastCGI快取併為其指定一個名稱。開啟快取非常有用,可以有效降低CPU的負載,並且防止502錯誤的發生。但是開啟快取也會引起很多問題,要視具體情況而定。
fastcgi_cache_valid用來指定應答程式碼的快取時間。例項中的值表示將200和302應答快取一個小時,將301應答快取1天,其他應答均快取1分鐘。
gzip on使用gizp壓縮並不是沒有代價的。在降低頻寬的同時也增加了CPU的使用。gzip_cop_level的引數取值範圍1-9,9代表最用CPU和1代表最少用CPU,其預設值是1
虛擬機器server配置
配置檔案舉例:
server { listen 80; #listen指令告訴nginx在一個特定的hostname,ip或者tcp埠監聽連線。預設,http服務執行在80埠 server_name host.hzgapi.com host.hzgapi.com; #指令可以設定基於域名的虛擬主機,根據請求頭部的內容,一個ip的伺服器可以配置多個域名 root "D:/www/hzgapi"; #指令指定則是最上層目錄的定義(路徑) location / { index index.html index.htm index.php; #autoindex on; } location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }
location配置
對於特定的請求,一旦nginx匹配一個location來處理。那麼這個請求的響應內容就會由這個location塊中的指令決定。在這個例子中文件根(doucument root)位於html/目錄。根據nginx的安裝目錄/usr/local/nginx(可以不用),這個location的完整路徑是/usr/local/nginx/html。
index指令會告訴nginx使用哪個資源如果請求中沒有檔名.
所有以.php結尾的請求都被第二個location塊處理。第二個語句塊對所有請求指定了一個fastcgi控制代碼。其它的請求,nginx會使用第一個location塊來處理。
fastcgi_pass指令Nginx和PHP-FPM的程序間通訊有兩種方式:
Nginx 中 fastcgi_pass 監聽埠 unix socket和tcp socket差別;TCP和unix domain socket方式對比;TCP是使用TCP埠連線127.0.0.1:9000。php 5.3以上版本將TCP改成socket方式的配置方法:
修改php-fpm.conf(/usr/local/php/etc/php-fpm.conf)根據直接安裝檔案所在路徑:
;listen = 127.0.0.1:9000
listen = /dev/shm/php-cgi.sock
修改nginx配置檔案server段的配置,將http的方式改為socket方式。
重啟php-fpm與nginx(centos系統命令)
service nginx restart service php-fpm restart ls -al /dev/shm
理論上,unix socket 不走網路,效率高一些,但穩定性不是很理想。
fastcgi_param 指令定義變數並賦值。
fastcgi_index 作用域:http, server, location.當請求以/結尾的時候,會將請求傳遞給所設定的index.php檔案處理。
fastcgi_split_path_info 作用域:location.Nginx預設獲取不到PATH_INFO的值,得通過fastcgi_split_path_info指定定義的正則表示式來給$fastcgi_path_info賦值。
其正則表示式必須要有兩個捕獲。
第一個捕獲的值會重新賦值給$fastcgi_script_name變數。
第二個捕獲到的值會重新賦值給$fastcgi_path_info變數。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;//指令碼檔案請求的路徑/目錄
$document_root 的引數是由root html那一行定義的,預設是在/etc/nginx/html/ 所以把 html換成站點根目錄就正常了。
include指令是包含檔案
定義Nginx執行的使用者和使用者組(自己定義可以忽略)。
user www www;
nginx程序數,建議設定為等於CPU總核心數(自己去定義忽略)。
worker_processes 8;
全域性錯誤日誌定義型別,[ debug | info | notice | warn | error | crit ](自己定義可以忽略)
error_log /usr/local/nginx/logs/error.log info;
程序pid檔案(根據直接去定義可以忽略)
pid /usr/local/nginx/logs/nginx.pid;