默认配置
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对应两个域名