一、nginx.conf文件的基本配置
vim /usr/local/nginx/conf/nginx.conf
user nobody nobody; ## 定义运行Nginx服务的用户和用户组 worker_processes 2; ## nginx进程数,建议设置为等于CPU总核心数,或者CPU总核心数的两倍. error_log /usr/local/nginx/logs/nginx_error.log crit; ## error.log路径和日志(类型)级别,可以使用 [ debug | info | notice | warn | error | crit ] 参数 pid /usr/local/nginx/logs/nginx.pid; ## 进程pid文件路径,包含了nginx的父进程ID号 worker_rlimit_nofile 51200; ## 打开的文件描述符,最多打开多少.#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。 events { use epoll; ## epoll是一种模式,参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型,windows下不指定。 worker_connections 6000; ## 单个的子进程最大处理多少个请求,多大的连接数.单个进程最大连接数(最大连接数=连接数*进程数) } #设定http服务器模块 http { include mime.types; ## 包含一个文件描述了:不同文件后缀对应的MIME,文件扩展名与文件类型映射表 default_type application/octet-stream; ## 制定默认MIME类型为二进制字节流 server_names_hash_bucket_size 3526; ## 服务器名称hash表的大小 server_names_hash_max_size 4096; ## 服务器名称hash表的最大值 log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri" $status' '"$http_referer" "$http_user_agent"'; ## 日志格式,可以按需更改. sendfile on; ## 开启调用Linux的sendfile(),提供文件传输效率,开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。 tcp_nopush on; ## 是否允许使用socket的tcp_nopush或tcp_cork选项 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; tcp_nodelay on; ## tcp_nodelay on 防止网络阻塞 gzip on; ## 启用 gzip压缩 gzip_min_length 1k; ## 最小压缩文件大小 gzip_buffers 4 8k; ## 压缩缓冲区 gzip_comp_level 5; ## 压缩等级 gzip_http_version 1.1; ## 压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_types text/plain application/x-javascript text/css text/htm application/xml; ## gzip压缩的文件类型. include vhosts/*.conf; ## 自定义虚拟主机配置文件,这里为相对路径vhosts目录下的所有.conf文件,支持*号来匹配。
创建一个vhosts目录然后再创建一个*.conf的配置文件
给一个常用的:
更改Nginx配置文件 vim /usr/local/nginx/conf/nginx.conf //清空原来的配置,加入如下内容:
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; 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; tcp_nodelay 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; }
mkdir /usr/local/nginx/conf/vhosts
vim /usr/local/nginx/conf/vhosts/default.conf
## 添加以下内容
server { listen 80 default_server; ## listen 80 表示监听端口是:80,default_serveer 定义这个conf文件是默认主机的配置 server_name localhost; index index.html index.htm; root /usr/local/nginx/html; deny all; ## 直接deny掉所有,和apache不一样,因为apache有顺序,但是两个都会生效.这个一旦前面deny,后面allow也不生效了。这里deny all的意义是不能让别人的域名泛解析到这个服务器上来. }
vim /usr/local/nginx/conf/vhosts/www.123.com.conf ## 再次新建一个www.123.com.conf文件做演示,可以自定义.
## 添加以下内容
server { listen 80; ## 监听端口:80 server_name www.123.com; ## 定义一个域名,本地做测试,可以把这个域名添加到hosts文件里面去。 index index.html index.htm index.php; ## 添加对index.php首页的支持,不然访问首页就是403错误。 root /usr/local/nginx/html; location ~ \.php$ { include fastcgi_params; ## fastcgi_params文件是FastCGI进程的一个参数配置文件,在安装Nginx后,会默认生成一个这样的文件,这里通过include指令将FastCGI参数配置文件包含了进来,关于FastCGI是什么可以参考这篇文章:http://ixdba.blog.51cto.com/2895551/806622 fastcgi_pass unix:/tmp/php-fcgi.sock; ## 本地可以使用sock套接字通信,远程可以使用IP+Port的方式通信. 这里定义监听的是:/tmp/php-fcgi.sock,php-fpm的配置文件也要改为/tmp/php-fcgi.sock,然后把listen.owner和listen.group改为nginx的服务启动用户,比如这里nginx服务的启动就是:nobody,因为只有nginx有权可以读/tmp/php-fcgi.sock这个通信文件,nginx和php-fpm才可以通信,网站才会正常,否则就会502错误。 #fastcgi_pass 127.0.0.1:9000; ## 本地也支持使用ip+port的形式通信,监听端口可以自定义. fastcgi_index index.php; ## 这里暂时没有搞明白 fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; ## /usr/local/nginx/html是存放php程序的目录,这里写错会导致nginx 502错误 } }
二. php-fpm.conf 配置
vim /usr/local/php/etc/php-fpm.conf
## 把之前的内容清空,然后写入如下配置:
[global] pid = /usr/local/php/var/run/php-fpm.pid ## 进程pid 文件路径,包含了php-fpm父进程的进程PID号 error_log = /usr/local/php/var/log/php-fpm.log ## error.log 文件路径 [www] ## 定义一个名为www的pool,可以定义多个,这么做的目的是降低风险,增加安全性,一个pool挂了,另一个还可以正常访问. listen = /tmp/php-fcgi.sock ## 使用监听套解字的形式,如果是多个pool,名称要不一样.nginx配置文件的监听方式要和这里一致.否则就是502. user = php-fpm ## php-fpm服务的用户主 group = php-fpm ## php-fpm服务的用户组 listen.owner = nobody ## 定义/tmp/php-fcgi.sock的用户主,要和nginx服务定义的用户主一样. listen.group = nobody ## 定义/tmp/php-fcgi.sock的用户组,要和nginx服务定义的用户组一样. pm = dynamic ## php-fpm进程的启动方式,dynamic是动态,也可以使用静态:static pm.max_children = 50 ## 如果是静态的方式启动php-fpm,那么启动php-fpm就是50个子进程,dynamic方式启动那么最大就是50,也就是说50是它的上限. pm.start_servers = 20 ## dynamic方式启动php-fpm,一开始启动的子进程数量 pm.min_spare_servers = 5 ## dynamic方式启动php-fpm,空闲的时候最低不能小于5 pm.max_spare_servers = 35 ## dynamic方式启动php-fpm,空闲的时候最大不能超过35 pm.max_requests = 500 ## 子进程最大给多少个请求提供的服务 rlimit_files = 1024 ## 子进程打开的最大文件数 slowlog = /usr/local/nginx/logs/slow.log ## 慢查询日志 request_slowlog_timeout = 1 ## 超时多少秒才记录到慢查询日里 php_admin_value[open_basedir]=/data/www/:/tmp/ ## 定义open_basedir /data/www是网站根目录,可以设置多个目录,以:号隔开, open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号"."来代表当前目录。注意用open_basedir指定的限制实际上是前缀,而不是目录名。 举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是 可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。例如设置成:"open_basedir = /dir/user/" 请注意: 若在php.ini所设置的上传文件临时目录为/tmp/, 那么设置open_basedir时就必须包含/tmp/,否则会导致上传失败. 新版php则会提示"open_basedir restriction in effect"警告信息, 但move_uploaded_file()函数仍然可以成功取出/tmp/目录下的上传文件,不知道这是漏洞还是新功能
## 配置多个pool的格式
[global] ... ... [domain1.com] ... ... ... [domain2.com] ... ... ...
参考1:http://www.ha97.com/5194.html
参考2:百度,谷歌