nginx配置文件详细解析

1.worker_processes=8
设置 worker_processes 来更改 Nginx 的进程数量,设置数值一般与服务器逻辑cpu个数相同,目的是把不同的worker_processes进程分配到不同的cpu上运行
  • 查看逻辑cpu个数方法  cat /proc/cpuinfo | grep "processor" | wc -l
  • 查看物理cpu的个数  cat /proc/cpuinfo | grep "physical id" | sort | uniq |wc -l
  • 查看cpu是几核 cat /proc/cpuinfo | grep "cored" | uniq

2.全局错误日志和pid文件
error_log /var/log/nginx/error.log;
pid //var/run/nginx.pid;

3.工作模式和连接数上限
events{
    use epoll;  #epoll是多路复用IO(I/O Multiplexing) 中的一种方式,但仅用于linux2.6内核,可以大大提高nginx的性能
    worker_connections 1024; #单个后台worker process进程的最大并发链接数
                调整方式 查看 ulimit -n   系统句柄配置
                系统可以打开的文件句柄数是 cat /proc/sys/fs/file-max
                并发链接总数是worker_processes 和 worker_connections的乘积
                即max_clients=worker_processes*worker_connections
                在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么         
          # 为什么上面反向代理要除以4,应该说是一个经验值
                并发连接总输小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
    #multi_accept on;

}
nginx配置文件详细解析_第1张图片

4.设定http服务器
http{
    include mime.types ; //设定mime类型,类型由mime.type文件定义,文件扩展名与文件类型映射表
    default_type application/octet-stream; //默认文件类型
    access_log /var/log/nginx/access.log; //设定日志格式
    
    sendfile on;
    #sendfile指令指定nginx是否调用sendfile函数(zero copy方式)来输出文件
    #对于剖通应用,必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime时间。如果图片显示不正常把这个改成off
    tcp_nopush on;防止网络阻塞
    tcp_nodelay on;防止网络阻塞
    keepalive_timeout 120;长连接超时时间,单位是秒
    
    server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
    gzip on; gzip告诉nginx采用gzip压缩的形式发送数据,这将会减少我们发送的数据量
    gzip_disable 为指定的客户端禁用gzip功能
    gzip_min_length 设置对数据启用压缩的最少字节数,如果一个请求小于1000,我们最好不要压缩它,因为压缩小的数据会降低处理此请求的所有进程的速度
    gzip_comp_level 设置数据的压缩等级,这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的,我们设置成4,这是一个比较折中的设置
    gzip_buffers 4 16k 压缩缓冲区
    gzip_http_version 1.0 压缩版本 默认是1.1
    gzip_type设置需要压缩的数据格式

    
    
    FastCGI相关参数是为了改善网站的性能,减少资源占用,提高访问速度
    nginx配置文件详细解析_第2张图片

}

nginx日志的指令主要有两条:
log_format , 设置日志的格式
access_log  指定日志文件的存放路径、格式和缓存大小
两条指令在nginx配置文件中的位置可以在http{ }之间,也可以在虚拟主机之间,即server{ } 两大括号之间
log_format语法如下:
log_format name format [format ...]
name表示定义的格式名称(name名称在nginx配置文件中是不能重复的)
format 表示定义的格式样式。log_format有一个默认的、无须设置的combined日志格式设置
nginx配置文件详细解析_第3张图片
nginx配置文件详细解析_第4张图片
但这个日志格式得不到客户端的真实ip
原因在客户端和web服务器之间增加了中间层(比如反向代理服务器,CDN加速), 因此web服务器无法直接拿到客户端的IP,通过$remote_addr变量拿到的将是反向代理服务器的IP地址。但是反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址。这时候就要用log_format指令来设置日志格式,让日志记录X-Forwarded-For信息中的IP地址,即客户的真实IP

log_format main '$http_x_forwarded_for $remote_port [$time_local] '
                            '"$request" $status $body_bytes_sent"'
                            '"http_referer" "$http_user_agent" "$cookie_id"';
access_log  logs/logs.log  main;
error_log  logs/error.log warn;



access_log语法如下
access_log path [format [buffer=size | off ] ]
其中path表示日志文件的存放路径,format表示使用log_format指令设置的日志格式的名称,buffer=size表示设置内存缓冲区的大小,例如可以设置buffer=32k
1)如果不想记录日志,可以使用以下指令关闭日志记录
access_log off
2)如果想使用默认的combined格式的日志记录,可以直接写
access_log /xxx/access.log
或者access_log /xxx/access.log combined;
3)如果想使用自定义格式的日志记录,可以使用以下示例,其中的mylogformat是日志格式名称
nginx配置文件详细解析_第5张图片

4)在nginx 0.7.4之后的版本中,access_log 指令中的日志文件路径可包含变量 如
access_log /data/logs/$server_name.log combined;

设定虚拟主机配置
server{
    listen 80;
    server_name 172.16.110.3 weixin.shike001.com;
    root /www/weixin.shike001.com;
    index index.php index.html index.htm;
    
    access_log logs/access.log main;
    error_log /var/log/nginx/error.log warn;
    
    定义错误提示页面
    error_page 404 500 502 503 504 /404/index.htm;

    #静态文件,nginx自己处理
    location ~ ^/(images|javascript|js|css|flash|media|static)/ {  
        #过期30天,静态文件不怎么更新,过期可以设大一点,
        #如果频繁更新,则可以设置得小一点。
        expires 30d;
    }
    
    #PHP脚本请求全部转发到FastCGI处理,使用FastCGI默认配置
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    #禁止访问 .htxx 文件
    location  ~/.ht {
        deny all;
    }

    #设定查看Nginx状态的地址
    location /NginxStatus {
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            auth_basic_user_file conf/htpasswd;
            #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
        }
     

SSI:Server Side Include,是一种基于服务端的网页制作技术,大多数(尤其是基于Unix平台)的web服务器如Netscape Enterprise Server等均支持SSI命令。
它的工作原因是:在页面内容发送到客户端之前,使用SSI指令将文本、图片或代码信息包含到网页中。对于在多个文件中重复出现内容,使用SSI是一种简便的方法,将内容存入一个包含文件中即可,不必将其输入所有文件。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。而且,使用包含文件时,对内容的所有更改只需在一个地方就能完成。

二.如何在nginx上配置SSI
需要的选项主要是以下三个:
ssi: 默认值off,启用ssi时将其设为on
ssi_silent_errors: 默认值off,开启后在处理SSI文件出错时不输出错误提示"[an error occurred while processing the directive]"。
ssi_types: 默认是text/html,所以如果需支持html,则不需要设置这句,如果需要支持shtml则需要设置:ssi_types text/shtml
三个参数可以放在http, server或location作用域下。

nginx配置文件详细解析_第6张图片

        

}

你可能感兴趣的:(php)