1. 程式人生 > >linux下Nginx配置文件(nginx.conf)配置設置詳解(windows用phpstudy集成)

linux下Nginx配置文件(nginx.conf)配置設置詳解(windows用phpstudy集成)

兩個 response 機制 .so 不用 filename 發送 php文件 code

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集成)