nginx.conf 配置参数

user

定义Nginx运行的用户和用户组 user www www;
默认是不配置的,当然登录的用户就能运行

worker_processes

可开启的进程数 worker_processes = 4;
nginx是多进程的,可以开启多个进程来提供服务。
在生产环境下一般都会单独服务器运行nginx,为了更合理的利用CPU,不浪费CPU性能去切换时间片,建议设置为等于CPU总核心数,CPU为4核就设置为4。

error_log

全局错误日志 error_log /var/log/nginx/error.log info;
全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]

pid

进程文件 pid /var/run/nginx.pid;

worker_rlimit_nofile

打开的最多文件描述符 worker_rlimit_nofile 65535;
一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。

event

use

epoll事件模型use epoll;
参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。

worker_connections

单个进程最大连接数 worker_connections 1024;

nginx可支持的并发总数是 worker_processesworker_connections 的乘积
即 max_clients = worker_processes * worker_connections
在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4
为什么上面反向代理要除以4,应该说是一个经验值根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000

worker_connections 值的设置跟物理内存大小有关
因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数

工作模式与连接数上限
events{
	use epoll;
	#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 
	#epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。

	worker_connections 65535;
	#单个进程最大连接数(最大连接数=连接数*进程数)
}

打开文件句柄数量限制

是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目)
系统总限制cat /proc/sys/fs/file-max
当前使用句柄数cat /proc/sys/fs/file-nr
修改句柄数ulimit -SHn 65535
查看系统限制 ulimit -a

并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
所以worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置,使得并发总数小于操作系统可以打开的最大文件数目
实质也就是根据主机的物理CPU和内存进行配置
当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。

http

include

文件扩展名与文件类型映射表 include mime.types;

types {
	text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
	...
}

作用:
nginx会根据被代理文件的具体类型,如:html、png、txt 等。
自动地在http响应头中自动添加Content-Type : text/html、Content-Type : image/png、Content-Type : text/plain。

让浏览器可以根据协议MIME——Multipurpose Internet Mail Extension,本地找到对应的插件打开文件,或者弹出下载框进行文件下载。

default_type

default_type application/octet-stream;
在mime.types中没有匹配上的所有文件类型,以什么形式进行传输

log_format access_log

含义是配置了一个名为main的日志格式化的规则,应用在了access_log的日志上。

 #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 #                  '$status $body_bytes_sent "$http_referer" '
 #                  '"$http_user_agent" "$http_x_forwarded_for"';

 #access_log  logs/access.log  main;

charset

默认编码 charset utf-8;

client_header_buffer_size

上传文件大小限制 client_header_buffer_size 32k;

sendfile

开启高效文件传输模式 sendfile on;

sendfile on / sendfile off可以用复制粘贴 ctrl+c/ctrl+x 来类比

指定nginx是否调用sendfile函数来输出文件。
对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
注意:如果图片显示不正常把这个改成off。

服务器开了sendfile之后,文件传输会变得更快。
但如果文件的接收方,来不及解析的话,就会出现错误。
比如图片只显示一部分,就是有一部分解析失败了。

sendfile()还能够用来在两个文件夹之间移动数据

tcp_nopush

tcp_nopush on; 在linux/Unix系统中优化tcp数据传输,仅在sendfile开启时有效
数据不实时传输,积攒一部分再发送一次。

autoindex

autoindex on; 开启目录列表访问,合适下载服务器,默认关闭

keepalive_timeout

keepalive_timeout 120; 连接超时时间,单位是秒

gzip

gzip on; 开启gzip压缩输出,服务器压缩,客户端解压缩。

gzip_min_length 1k; 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。

gzip_buffers 4 16k; 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_http_version 1.0;压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

gzip_comp_level 2; 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间

gzip_types text/plain application/x-javascript text/css application/xml;
压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。

默认值: gzip_types text/html (默认不对js/css文件进行压缩)

压缩类型,匹配MIME类型进行压缩

设置哪压缩种文本文件可参考 conf/mime.types

gzip_disable "MSIE [1-6]\.";E6及以下禁止压缩

gzip_vary on;给CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本

server

一个server就是一个主机,nginx可以通过配置多个server实现虚拟主机配置

listen 80; 监听端口
server_name www.mashibing.com mashibing.com; 域名可以有多个,用空格隔开

charset koi8-r; 编码集

access_log logs/host.access.log main;

日志相关
access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;

index index.html index.htm index.jsp; 默认页
root /data/www/ha97; 主目录

虚拟主机

虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的

通过nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置

  • 基于ip的虚拟主机, (一块主机绑定多个ip地址)
  • 基于域名的虚拟主机(servername)
  • 基于端口的虚拟主机(listen如果不写ip端口模式)
http{
	server{
		#表示一个虚拟主机
	}
}

location

映射/虚拟目录

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

location [ = | ~ | ~* | ^~ ] uri { … }

location URI {} 对当前路径及子路径下的所有对象都生效;

location = URI {} 注意URL最好为具体路径。 精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;

location ~ URI {} location ~* URI {} 模式匹配URI,此处的URI可使用正则表达式,区分字符大小写,*不区分字符大小写;

location ^~ URI {} 禁用正则表达式

优先级:= > ^~ > |* > /|/dir/

location配置规则

location 的执行逻辑跟 location 的编辑顺序无关。
但是“正则 location ”的匹配规则是“顺序匹配,且只要匹配到第一个就停止后面的匹配”;
先匹配普通 location ,再“考虑”匹配正则 location 。

  • ( 1 )当普通 location 前面指定了“ ^~ ”,特别告诉 Nginx 本条普通 location 一旦匹配上,则不需要继续正则匹配;
  • ( 2 )当普通location 恰好严格匹配上,不是最大前缀匹配,则不再继续匹配正则

IP访问控制

	location  {
	   deny  IP /IP段
	   deny  192.168.1.109;
	   allow 192.168.1.0/24;192.168.0.0/16;192.0.0.0/8
	}

用户认证访问

模块ngx_http_auth_basic_module 允许使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问。

	location ~ (.*)\.avi$ {
	         auth_basic  "closed site";
	         auth_basic_user_file conf/users;
	}
安装httpd-tools
	yum install httpd
	# 生成密码文件 
	htpasswd -c -d /usr/local/users zhangsan

nginx访问状态监控

	location /basic_status {
	    stub_status on;
	}

反向代理

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
在这里插入图片描述

经典的反向代理结构

在这里插入图片描述

Proxy_pass http://192.168.43.152/
upstream

反向代理配合upstream使用

  upstream httpds {
    server 192.168.43.152:80;
    server 192.168.43.153:80;
}
weight(权重)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream httpds {
    server 127.0.0.1:8050       weight=10 down;
    server 127.0.0.1:8060       weight=1;
    server 127.0.0.1:8060      weight=1 backup;
}
  • down:表示当前的server暂时不参与负载
  • weight:默认为1.weight越大,负载的权重就越大。
  • backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
max_conns

可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置800

upstream httpds {
    server 127.0.0.1:8050    weight=5  max_conns=800;
    server 127.0.0.1:8060    weight=1;
}
max_fails、 fail_timeout

max_fails:失败多少次 认为主机已挂掉则,踢出,公司资源少的话一般设置2~3次,多的话设置1次

max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒…以此循环,直到恢复。

upstream httpds {
    server 127.0.0.1:8050    weight=1  max_fails=1  fail_timeout=20;
    server 127.0.0.1:8060    weight=1;
}
负载均衡算法

轮询(也叫RR,是默认的策略)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。.

健康检查模块

配置一个status的location

location /status {
    check_status;
}

在upstream配置如下

check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值