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
實驗測試,使用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