1. 程式人生 > >linux下Nginx配置檔案(nginx.conf)配置設定詳解(windows用phpstudy整合)

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;