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相同
worker_connections 65536; #单个nginx工作进程可以接受的最大并发;作为反向代理的时候为(worker_connections * worker_processes)/2;因为一个用户处理请求需要建立两次连接,所以一个用户的请求需要占用两个文件描述符;需要配合worker_rlimit_nofile及ulimit使用 use epoll; #使用epoll事件驱动模型,默认不写就是epoll accept_mutex on; #优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置 multi_accept on; #默认为一个工作进程只能一次接受一个新的网络连接,打开后可以同时接受多个
一个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模块的子配置文件
server { #可以定义多个虚拟主机 listen 80; #默认监听本机所有IP的80端口;也可以写成xxx.xxx.xxx.xxx:80 server_name example.com *.example.com; #公网域名;可以设置多个域名指定同一个站点进行资源定位,支持正则表达式;也可以写成 ~^www\.site\d+\.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