LNMP環境下nginx、php-fpm的配置文件講解

1、nginx配置文件javascript

user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
    use epoll;
    worker_connections 6000;
}
http
{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    '$host "$request_uri" $status'
    '"$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm application/xml;
    include  vhosts/*.conf;  
}

配置解釋                                                            
php

# 指定Nginx的worker進程運行用戶以及用戶組 css

user nobody nobody;html


# 指定Nginx要開啓的進程數,設置爲CPU的總核數前端

worker_processes 2;java


# 指定Nginx全局錯誤日誌路徑與級別,日誌級別有: debug、info、notice、warn、error、critnode

# 其中debug輸出日誌最爲詳細,crit輸入日誌最少 ;nginx

error_log /usr/local/nginx/logs/nginx_error.log crit;瀏覽器


# 指定進程id的存儲文件位置緩存

pid /usr/local/nginx/logs/nginx.pid;


# 一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,可是nginx分配請求並不均勻,因此建議與ulimit -n的值保持一致。

# ulimit -n 查看系統限制

worker_rlimit_nofile 51200;


# 設定Nginx的工做模式及鏈接數上限

events

# 指定工做模式爲epoll,工做模式有select、poll、kqueue、epoll、rtsig和/dev/poll,

# 其中select和poll是標準的工做模式,kqueue和qpoll是高效的工做模式;epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,若是跑在FreeBSD上面,就用kqueue模型。

 use epoll;

   

# 單個進程最大鏈接數(最大鏈接數=鏈接數*進程數)

worker_connections 6000;

# 文件擴展名與文件類型映射表

include mime.types;

   

# 默認文件類型爲二進制流

default_type application/octet-stream;

   

# 服務器名字的hash表大小

server_names_hash_bucket_size 3526;

   

# 服務器名字的hash表的最大量

server_names_hash_max_size 4096;

   

# 指定Nginx日誌的輸出格式,其中combined_realip爲自定義的日誌名字

log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri" $status' '"$http_referer" "$http_user_agent"';

   

# 開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。注意:若是圖片顯示不正常把這個改爲off。

sendfile on;


# 用於防止網絡堵塞

tcp_nopush on;

tcp_nodelay on;

   

# 長鏈接超時時間,單位爲秒

keepalive_timeout 65;

   

# 設置客戶端請求頭讀取超時時間

client_header_timeout 10;

   

# 設置客戶端請求主題2超時時間

client_body_timeout 10;

   

# 指定響應客戶端的超時時間

send_timeout 10;

   

# 爲每一個請求分配的內存池,內存池用於小配額內存塊,若是一個塊大於內存池 或者大於分頁大小,那麼它將被分配到內存池以外,若是位於內存池中較小的分配量沒有足夠的內存,那麼將分配一個相同內存池大小的新塊,這個指令僅有至關有限的效果 

connection_pool_size 256;

request_pool_size 4k;

   

# 指定來自客戶端請求頭的大小

client_header_buffer_size 1k;

   

# 指定客戶端請求中較大的請求頭的最大緩存最大數量和大小

large_client_header_buffers 8 4k;

   

# 輸出緩存大小    

output_buffers 4 32k;

postpone_output 1460;

   

# 指令指定容許客戶端鏈接的最大請求主體大小

client_max_body_size 10m;

   

# 這個指令能夠指定鏈接請求主體的緩衝區大小。

client_body_buffer_size 256k;

   

#  指定鏈接請求主體試圖寫入的臨時文件路徑

client_body_temp_path /usr/local/nginx/client_body_temp;

# 反向代理臨時存儲目錄

proxy_temp_path /usr/local/nginx/proxy_temp;


FastCGI相關參數是爲了改善網站的性能:減小資源佔用,提升訪問速度。

# 爲Nginx配置FastCGI緩存指定一個路徑

fastcgi_temp_path /usr/local/nginx/fastcgi_temp;

# 若是這個選項沒有設置,即便建立了404.html和配置了error_page也沒有效果

fastcgi_intercept_errors on;


# 啓用壓縮    

gzip on;

# 最小壓縮文件大小

gzip_min_length 1k;

# 壓縮緩衝區

gzip_buffers 4 16k;

# 壓縮等級

gzip_comp_level 5;

# 壓縮版本(默認1.1,前端若是是squid2.5請使用1.0)

gzip_http_version 1.1;

# 要壓縮的類型

gzip_types text/plain application/x-javascript text/css text/htm application/xml;

# 開啓虛擬配置目錄

include vhosts/*.conf;


驗證nginx默認虛擬主機

在/usr/local/nginx/conf目錄下新創建一個vhosts目錄,並建立一個default.conf 配置文件;

[root@localhost blog]# mkdir /usr/local/nginx/conf/vhosts
[root@localhost blog]# cd /usr/local/nginx/conf/vhosts
[root@localhost vhosts]# vi default.conf
server
{
    listen 80 default_server;
    server_name localhost;
    index index.html index.htm index.php;
    root /usr/local/nginx/html;
}

listen 80後面默認不加;後面加 default 和 default_server 均可以;實驗測試成功;

保存退出後,-t 檢查配置文件是否正確,而後重啓nginx;使用curl命令測試是否成功。或者在瀏覽器輸入192.168.20.30 顯示nginx歡迎頁面表示成功;

[root@localhost vhosts]# /usr/local/nginx/sbin/nginx -t
[root@localhost vhosts]# /etc/init.d/nginx restart
[root@localhost vhosts]# curl 192.168.20.30 -I
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Thu, 14 May 2015 06:28:36 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 11 May 2015 09:27:11 GMT
Connection: keep-alive
ETag: "555075ef-264"
Accept-Ranges: bytes
[root@localhost vhosts]# curl 192.168.20.30/index.html -I
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Wed, 13 May 2015 09:15:51 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 11 May 2015 09:27:11 GMT
Connection: keep-alive
ETag: "555075ef-264"
Accept-Ranges: bytes


2、php-fpm.conf 配置文件

vi   /usr/local/php/etc/php-fpm.conf
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.sock
user = php-fpm
group = php-fpm
listen.owner = nobody  
listen.group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024 
slowlog = /usr/local/php/var/log/slow.log
request_slowlog_timeout = 1
php_admin_value[open_basedir]=/data/www/:/tmp/

配置解釋:

[global]:全局配置

pid:指定進程id文件

error_log:指定錯誤日誌文件

[www]:指定pool 資源池的名字

listen:指定監聽方式與Nginx配置中一致 ;IP+端口或sock文件;

user:啓動進程的用戶

group:啓動進程的用戶組


動態、靜態子進程pm = static/dynamic

若是選擇static,則由pm.max_children指定固定的子進程數。

若是選擇dynamic,則由如下參數決定:

pm.max_children ,子進程最大數

pm.start_servers ,啓動時的進程數

pm.min_spare_servers ,保證空閒進程數最小值,若是空閒進程小於此值,則建立新的子進程

pm.max_spare_servers ,保證空閒進程數最大值,若是空閒進程大於此值,此進行清理

對於專用服務器,pm能夠設置爲static。

慢執行日誌用來性能追蹤,進行定位php腳本哪裏有問題。

每個池子能夠單獨寫一個慢日誌;日誌路徑能夠自定義位置;

slowlog = /usr/local/php/var/log/slow.log

request_slowlog_timeout = 1      #慢日誌的超時時間;


open_basedir的格式,目錄須要自定義;

php_admin_value[open_basedir]=/data/www/:/tmp/


若是listen使用ip+端口通信的話不須要指定listen.owner;

默認listen.owner是php-fpm;若是不在配置文件更改的話,沒有權限執行/tmp/php-fcgi.sock這個文件,因此會報502錯誤;

php-fcgi.sock文件是php-fpm進程建立的;重啓php-fpm服務,在tmp目錄下會出現;默認權限爲660,其餘用戶沒有執行權限。

手動更改sock文件權限爲666後,重啓php-fpm服務,又會變爲660,其餘用戶沒權限執行

[root@localhost etc]# ls -l /tmp/
srw-rw----  1 php-fpm php-fpm    0 5月  14 15:53 php-fcgi.sock
[root@localhost etc]# chmod 666 /tmp/php-fcgi.sock 
[root@localhost etc]# ls -l /tmp/
srw-rw-rw-  1 php-fpm php-fpm    0 5月  14 15:53 php-fcgi.sock
[root@localhost etc]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[root@localhost etc]# ls -l /tmp/
srw-rw----  1 php-fpm php-fpm    0 5月  14 15:57 php-fcgi.sock

wKioL1VW-8ai4B5CAAIfsL7V6kA040.jpg


實驗測試,使用sock文件通信,nginx默認虛擬主機配置加入如下內容:

[root@localhost vhosts]# cat default.conf 
server
{
    listen 80 default;
    server_name localhost;
    index index.html index.htm index.php;
    root /usr/local/nginx/html;
    
    location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/tmp/php-fcgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
    }
}

配置解釋

server:定義虛擬主機開始的關鍵字

listen:指定虛擬主機的服務端口

server_name:指定IP地址或域名,多個域名之間用空格分開

index:設定訪問的默認首頁地址

root:指定虛擬主機的網頁根目錄

charset:設置網頁的默認編碼格式

include fastcgi_params:開啓fastcgi

fastcgi_pass:指定fastcgi監聽方式:一、sock方式監聽;二、TCP/IP方式監聽

fastcgi_index:指定fastcgi默認起始頁

fastcgi_param SCRIPT_FILENAME:設定fastcgi監聽的目錄


使用curl進行測試,返回200 OK,說明sock文件通信成功;

[root@localhost log]# curl -x127.0.0.1:80 192.168.20.30/phpinfo.php -I
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Thu, 14 May 2015 08:25:03 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.4.37
相關文章
相關標籤/搜索