Nginx基础配置详解
2017-09-05 19:00
555 查看
Nginx的功能特性
基本Http服务,可以作为Http代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL高级Http服务,可以进行自定义配置,支持虚拟主机,支持URL重定向,支持网络监控,支持流媒体传输等
邮件代理服务器,支持IMAP/POP3代理服务功能,支持内部SMTP代理服务功能
基本HTPP服务
处理静态文件,如HTML网页以及请求打开并自行管理文件描述符缓存
提供反向代理服务,并且可用缓存加速反向代理
提供远程
FastCGI(通用网关接口)服务的缓存机制
模块化提供过滤器功能,
gzip压缩 ranges支持 chunked响应 XSLT SSI 图像缩放针对包含多个SSI的页面,经由反向代理SSI过滤器可并行处理
支持安全套接协议SSL
高级HTTP服务
支持基于名字和IP的虚拟主机设置支持HTTP/1.0 中的keep-alive模式和管线模型(PipelLined)连接
支持重新升级时,无需中断正在处理的请求
自定义访问日志格式、带缓存的日志写操作以及快速日志轮转
提供3xx 5xx错误代码重定向功能
支持重写模块扩展
支持HTTP DAV模块,从而为HTTP DAV模块提供
PUT DELETE MKCOL COPY MOVE方法
支持
FLV流和
MP4流传输
支持网络监控,访问控制、速度限制或请求限制等
支持嵌入
perl语言
邮件代理服务
支持使用外部HTTP认证服务器重定向用户到IMAP/POP3后端,并支持IMAP认证方式和
POP3认证方式
支持使用外部HTTP认证服务器器认证用户后重定向连接到内部SMTP后端,并支持SMTP认证方式
支持邮件代理服务下的安全套接层安全协议SSL
支持纯文本通信协议的扩展协议
STARTTLS
常用功能
HTTP代理和反向代理请求稳定,后端转发与业务配合分离,配置灵活,支持判断表达式
负载均衡
1. 将单一的重负载分担到多个网络节点上做并行处理,每个节点处理结束后将结果汇总给用户
提高网络系统的处理能力
2. 将大量的前端并发访问或者数据流量分担到多个后端网络节点上分别处理
- nginx的负载均衡策略
-
内置策略:
轮询
加权轮询
IP HASH
-
扩展策略主要通过第三方模块实现,常见有
url hash
WEB缓存
主要由
Proxy_Cache(提供代理服务时,对后端服务器返回内容进行URL缓存) 和
FastCGI_Cache(对FastCGI程序缓存)指令集构成
安装部署
编译
下载nginx-1.12.1.tar.gz解压后进入nginx-1.12.1目录执行
./configure --prefix=/usr/local/nginx-1.12
需要安装gcc
等编译工具 yum -y install gcc openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
执行
make编译,等待编译结束后执行
make install安装至指定目录
进入
/usr/local/nginx-1.12,可以看到具有4个目录:
conf存放了所有配置文件
html运行中的html文件
logs日志目录
sbin服务主程序
启停
nginx服务在运行时会保持一个主进程和一个或者多个
worker process工作进程,通过给主进程发送信号控制服务的启停。
-
nginx可接受的信号
kill -USR1 ${nginx.pid}
信号 | 作用 |
---|---|
TERM 或 INT | 快速停止服务 |
QUIT | 平缓停止服务 |
HUP | 平滑重启 |
USR1 | 重新打开日志文件 |
USR2 | 平滑升级 |
WINTH | 平缓停止Worker Process |
#检查配置文件是否有错误 ./nginx -t #指定配置文件 ./nginx -c conf_file #优雅停止 ./nginx -s stop
配置
主要描述nginx.conf文件的内容
nginx.conf
文件结构
主要由三块组成 全局块
events块
http块,
http块中包含
http全局块和多个
server块,每个
server块中包含
server全局块和多个
location块,采用
就近原则生效
全局块
配置一些影响整体运行的指令,通常有服务器用户组
允许生成的worker process
nginx.pid存放路径
日志存放路径
类型
配置文件引入
events块
影响nginx服务器与用户的网络连接,这一块的设置对服务的性能影响较大。通常有是否开启对WP下的网络进行序列化
是否允许同时接受多个网络连接
事件驱动模型
每个WP可以同时支持处理的最大连接数
http块
重要组成部分,代理、缓存和日志定义、第三方模块的配置。 通常配置文件引入
MIME-TYPE定义
日志自定义
是否使用sendfile传输文件
连接超时时间
单连接请求数上限
具体配置
由于nginx的配置大部分是不限定具体位置的(可以在多个地方配置),所以此处将依次进行列举配置用户组
# 配置alleyz用户 admin组下有启停权限 user alleyz [admin]; #所有用户具有启停权限 user nobody nobody;
配置运行生成的worker process
# 如果设置为数字,启动以后就具有多少个worker process # 设置为auto则自动检测 worker_processes number | auto;
配置pid
文件存放路径
默认存放在logs/nginx.pid#必须 4000 包含文件名称 pid logs/nginx_alleyz.pid;
配置错误日志文件的存放路径
可在全局块、http块 server块 location块配置
error_log file | stderr [ DEBUG | info | notice | warn | error | crit | alert | emerg];
配置文件引入 任意地方
include file;
设置网络连接的序列化
惊群问题当某刻只有一个请求进来时,会唤醒多个睡眠的进程,造成性能的损耗
accept_mutex on | off;
设置是否允许同事接受多个连接 events
multi_accept on | off; #默认关闭
事件驱动模型的选择 events
可选择的内容有:select poll kqueue epoll rtsig /dev/poll eventport
use epoll;
配置最大连接数 events
允许每一个WP同事开启的最大连接数。此值不能大于操作系统支持的打开的最大文件句柄数.worker_connections number; #默认值 512
MIME-Type http server location
default_type mime-type; #默认为 text/plain
自定义服务日志
access_log 可在http server location中配置; log_format只能在http中配置。
注意前文提到的error_log 配置的是nginx的运行日志,此处指的是应答前端请求的服务日志。可以对日志的格式、大小、输出进行配置,有
access_log log_format指令, log_format 的string整体需要用
'括起来,变量名称使用双引号括起来
log_format name string; access_log path [format [buffer=size]]; 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; #如果取消日志记录 access_log off;
配置sendfile
方式传输文件
相关指令 sendfile
sendfile_max_chunk,默认开启
sendfile on | off; sendfile_max_chunk size; #设置为0为限制
配置连接超时时间
http块 server块 location块,设置用户会话连接的保持时间
keepalive_timeout timeout[header_timeout];
单连接请求上限
server location用户与服务端建立连接后,通过此连接发送的请求次数
keepalive_requests number;
配置网络监听
配置监听IP地址listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sendbuf=size] [deferred] [accept_filter=filter] [bind] [ssl];
配置监听端口
listen port [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sendbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on | off] [ssl];
配置Unix Domain Socket
很少用
listen unix:path [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sendbuf=size] [accept_filter=filter] [deferred] [bind] [ssl];
平常使用:
listen 3021; listen 10.8.177.21; listen 10.8.177.21:3022 default_server backlog==1024;
参数说明:
- address ip地址,如果是ipv6需要使用
[fe13:..]格式
- port 端口号,如果只有ip则默认
80
- path
socket文件路径
- default_server, 标识符,将ip:port设置为默认的虚拟主机
- backlog 设置监听函数
listen()最多允许多少网络连接同时处于挂起的状态,默认
511(FreeBSD 为-1)
- rcvbuf 设置监听socket接受缓存区大小
- sendbuf 设置监听socket发送缓存区大小
- deferred 标识符,将
accept()设置为Deferred模式
- bind 标识符,使用独立的
bind()处理此adress:port,一般情况下端口相同而IP地址不同,只使用一个
- ssl 标识符,设置会话使用ssl模式(https)
- accept_filter 设置监听端口的请求过滤,被过滤的内容不能被接受和处理(只在FreeBSD NetBSD中有用)
- setfib 为监听socket关联路由表,只对
FreeBSD起作用
基于名称的虚机主机设置
可以配置多个nameserver_name name name1 name2 ....;
可以使用通配符
*只能位于三段字符串组成的首尾或者两段字符串的尾部
server_name *.alleyz.com www.alleyz.*
使用正则表达式,
~作为正则开始的标记,并且正则支持捕获
server_name ~([a-zA-Z\d]{1,4})\.alleyz.com$;
此时,如果通过
xisuo.alleyz.com访问的话,可使用
$1捕获
xisuo;
一个名称若被多次匹配的访问优先级:
- 匹配方式不同时
1. 精确匹配
2. 通配符在开始
3. 通配符在结尾
4. 正则表达式匹配
- 相同匹配方式时,首次处理优先(顺序)
基于IP的虚拟主机设置
需设置网卡能监听多个IP地址# 临时生效 ifconfig em1:0 10.8.177.21 netmask 255.255.0.0 up ifconfig em1:1 10.8.177.22 netmask 255.255.0.0 up # 永久生效 echo "ifconfig em1:0 10.8.177.21 netmask 255.255.0.0 up" >> /etc/rs.local # vi nginx.conf ... server { listen 3022; server_name 10.8.177.32; ... } server { listen 3022; server_name 10.8.177.21; ... } kill -HUP `cat ../logs/nginx_alleyz.pid`
配置location块
location [ = | ~ | ~* | ^~] uri {...}
=用于普通
uri之前,表示严格匹配
~
uri包含正则表达式,并且区分大小写
~*表示包含正则表达式,并且不区分大小写
^~如果找到与uri匹配度最高的location,立即处理请求。 会对
uri进行反编码
配置请求的根目录 http server location
服务器收到请求后查找资源的根目录路径,可以使用nginx预设的大多变量,唯$document_root $realpath_root不能使用;通常在
location块中使用。
root path;
更改location的URI
除了使用root指定根目录,还可以使用
alias指令改变location接收到的请求路径
alias path; location ~ ^/data/(.+\.(htm|html))${ alias html/data/other/$1; }
设置网站的默认首页
可以针对不同的访问设置不同的首页index index.html index.htm;
设置网站的错误页面 http server location
如果uri是path的话,则path是以nginx的安装目录为根路径的;error_page code ... [=[response]] uri; error_page 404 /404.html; error_page 404 http://someone.com/404.html;[/code]
如果希望错误路径指向自定的位置:error_page 404 /404.html location /404.html{ root /home/alleyz/html; }基于IP配置访问权限
http server locationallow address | CIDR | all; deny address | CIDR | all; location / { root html; index index.html; deny 10.8.177.26; }基于密码配置访问权限
基于HTTP Basic Authentication协议认证;文件中密码得加密!# 生成密文,-c创建密码文件 -d采用crypt加密 -b 命令行指定密码 htpasswd -cdb passwd alleyz 123456 # string 开启认证功能,并设置提示信息 auth_basic string | off; #file 包含用户名信息的文件路径 auth_basic_user_file file;我自己的测试配置
user alleyz; worker_processes 2; pid logs/nginx_alleyz.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main1 '$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 main1; sendfile on; keepalive_timeout 65; server { listen 3022; server_name 10.8.177.32; deny 10.8.177.26; location / { auth_basic "it`s auth test msg!"; auth_basic_user_file passwd; root html/22; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 3022; server_name 10.8.177.21; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
参考资料《nginx高性能web服务器讲解》
相关文章推荐
- Nginx相关基础配置详解
- Nginx服务器基础配置详解
- nginx特性及基础概念、nginx web服务配置详解
- nginx 基础配置详解
- Nginx实战基础篇二 Nginx主配置文件参数详解
- Nginx实战基础篇二 Nginx主配置文件参数详解
- 详解Linux下安装配置Nginx
- nginx.conf配置文件详解2
- (总结)Nginx配置文件nginx.conf中文详解
- Nginx优化配置详解
- Nginx配置文件(nginx.conf)配置详解
- Nginx配置文件nginx.conf中文详解
- Nginx 中文域名配置详解及实现
- Nginx配置文件详解
- nginx 中nginx.config 的location配置详解
- Nginx概述、安装及配置详解
- nginx配置详解
- Nginx配置基础
- Nginx负载均衡配置实例详解
- nginx配置文件详解