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;
linux下Nginx配置文件(nginx.conf)配置設置詳解(windows用phpstudy集成)