• {{ item.name }}
  • Home
  • Linux
  • Programming
    • Python
  • Life
  • Other
  • Tools
  • 投资者该如何参与优秀的区块链项目- NuLink社区圆桌会议
  • 什么是NuLink?- 项目中文社区与项目研究组成员 Rookie 对话实录
  • NuLink 融资 400 万美元用于开发隐私保护技术
  • NuLink的零知识证明介绍(1)
  • 用bitwarden_rs搭建属于自己的密码管理器
  • 修复 CentOS vps 网卡失效
  • 记录用mac给Nexus6P刷Android10的错误
  • Centos 6.8启用 TCP BBR拥塞控制算法
  • Nginx 启用HTTP2功能
  • Mac 安装adb工具
  • WordPress 默认编辑器代码按钮

Nginx的各种简单配置(二)

  • iansiu
  • 2015-01-22
  • 0

一、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:百度,谷歌

© 2023 laowang's blog
Theme by Wing