nginx配置文件详解

默认配置

user nginx nginx;
#启动用户和组

worker_processes  1;         
#启动工作进程数数量,与服务器CPU核心数相匹配

worker_cpu_affinity auto;
#将Nginx工作进程自动识别绑定在指定的CPU核心上,避免在不同的CPU上来回切换(频繁切换CPU会造成内核在内存中来回进行内存的注册与回收)

error_log  logs/error.log  error;       
#指定错误日志级别

pid        logs/nginx.pid;     
#指定PID文件路径

worker_priority -10;           
#工作进程nice值,-20~19;如果服务器有多个服务,想让nginx占用更多的内存时间片(优先调度),就调低一些

worker_rlimit_nofile 65536;    
#nginx的所有连接,客户端及代理服务器;实际的并发连接数不能超过系统级别的最大打开文件数的限制,需要与ulimt相同

events模块(事件设置模块)配置

worker_connections  65536;            
#单个nginx工作进程可以接受的最大并发;作为反向代理的时候为(worker_connections * worker_processes)/2;因为一个用户处理请求需要建立两次连接,所以一个用户的请求需要占用两个文件描述符;需要配合worker_rlimit_nofile及ulimit使用

use epoll;
#使用epoll事件驱动模型,默认不写就是epoll

accept_mutex on;
#优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置

multi_accept on;      
#默认为一个工作进程只能一次接受一个新的网络连接,打开后可以同时接受多个

http模块配置

一个http模块可以包含多个server模块,一个server模块就是一个基于域名的虚拟主机;一个IP可以对应多个域名

include       mime.types;   
#nginx所支持的mime类型;包含文本、图像、音频、视频以及其他应用程序专用的数据,对应的文件用对应的应用程序打开

default_type  application/octet-stream;    
#不在mime类型里面的数据,默认为下载

sendfile      on;
#数据被kernel buffer直接拷贝到另外一个与socket相关的kernel buffer,然后直接发送给协议栈,减少了内核空间到用户空间的复制;sendfile只有作为web服务器的时候使用,加快静态资源传输;反向代理时,都是由后端服务器进程处理,文件渲染及连接数据库等

keepalive_timeout  65;
#长连接超时时间,单位是秒;如果http模块下的server中也进行配置,以server优先

access_log  /var/log/nginx/access.log  main;    
#开启nginx访问日志,指定日志格式;对所有server有效,如果server中定义,则server优先级高

tcp_nopush     on;
#配合sendfile一起使用;如果一个报文不够一个包的最大值,那么CPU会对报文进行封装头部和尾部,直接发送过去;一个数据包最大1500个字节;开启tcp_nopush,内核会等够一个包的最大值之后再发送出去;但用户访问可能会出现延迟,但会节省CPU利用率

tcp_nodelay   off;
#在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户相应报文。与tcp_nopush配合使用  
   
server_tokens off;   
#隐藏Nginx版本    
            
gzip on;     
#开启文件压缩;对回复的数据报文进行压缩;CPU对报文进行封装压缩,会消耗一定的CPU资源    
   
gzip_comp_level 5;   
#设置压缩级别1——9,一般设置到3——5;压缩级别越高,压缩比也就越高,CPU消耗资源越大    
   
gzip_disable "MSIE [1-6].";    
#禁止对msie的浏览器进行压缩;msie浏览器不支持压缩    

gzip_min_length 1k;    
#当文件小于1K时不进行压缩    
   
gzip_http_version 1.1;   
#启用压缩时,协议的最小版本,默认是HTTP/1.1;当http协议版本低于1.1时不进行压缩

gzip_types text/plain application/javascript application/x-javascript text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;    
#指定针对那些类型的资源进行压缩,text/html不用添加,默认添加了,指定添加反而报错

gzip_vary on;   
#告知客户端启用压缩了

gzip_buffers 32 4k;
#向服务器申请的压缩缓存的空间大小;缓存大小为数量*大小(4K);还可以设置为16 8K;如果服务器的压缩文件大小为都几乎在4K以上,则设置每个缓存大小为8K;如果服务器的压缩文件几乎都是小资源(低于4K),就算用8K的缓存,一个小资源也会占用一整个8K的缓存,所以如果都是小资源则选择4K,如果大资源较多,则选择8K

include /app/nginx/conf/conf.d/*.conf;
#让nginx识别指定目录的以.conf结尾的文件;读取http模块的子配置文件

http模块中定义虚拟主机(http模块中的server模块)

   server {        #可以定义多个虚拟主机
       listen       80;      #默认监听本机所有IP的80端口;也可以写成xxx.xxx.xxx.xxx:80
       server_name  example.com *.example.com;   #公网域名;可以设置多个域名指定同一个站点进行资源定位,支持正则表达式;也可以写成
                                                  ~^www.sited+.net$这种形式,使用正则表达式时,表达式前面必须加~;如果这几个域名都不匹
                                                  配,可以指定default_server,所有域名都不匹配,则显示默认主站点页面;default_server设置在
                                                  主配置文件的server下,不要设置在子配置文件的server种
       charset utf-8;     #必须设置编码格式
       access_log  logs/host.access.log  main;   #每个server(域名)可以单独指定访问日志,日志格式是http模块中的格式        
       keepalive_requests 3;  #在一次长连接上累计所允许请求的资源的最大数量,默认为100次,不是并发;如果一次长连接累计请求资源数量达到设置的最大
                               值,则服务器主动和客户端断开链接;网站小资源比较多,则调到300-500左右,但也不能调到太多;这个设置主要是避免有太 
                               多的长连接;可以设置在http模块和server中,server优先级高,server中设置则使用server中的配置,如果server未设置,
                               则使用http中的默认设置
       keepalive_timeout  65 65;  #设置超时时长,后面的65为用户可以看到的超时时长,服务端设置的超时时长可以和用户看到的超时时长不一致
       location / {    #定位站点位置
           root   html;   
           index  index.html index.htm;
       }

       error_page   500 502 503 504 404 /50x.html;   #遇到这些错误状态码时,用指定的提示页面替代原有的报错页面;如果访问指定域名的未存在资源
                                                      时,想向用户提供报错页面,则就把这一行复制到指定域名的server下即可
       location = /50x.html {     #指定错误页面的文件名和路径
           root   html;
       }

       location  /host.pass {       #当访问网站根下的这个资源,全部拒绝
           deny  all;
       }

   }

实现虚拟主机

server {
   listen 80;
   server_name www.xxxmb.net;
   location /linux {
       root /data/nginx/mobile/html;
       index index.html;
   }
   location /python {
       root /data/nginx/mobile/html;
       index index.html;
   }
}

server {
   listen 80;
   server_name www.xxxpc.net;
   location /linux {
       root /data/nginx/pc/html;
       index index.html;
   }
   location /python {
       root /data/nginx/pc/html;
       index index.html;
   }
}
创建两个虚拟主机;一个IP对应两个域名
原文地址:https://www.cnblogs.com/dongzhanyi123/p/12081438.html