Nginx的配置1

Nginx:
http协议:web服务器(类似于httpd)、http reverse proxy(类似于httpd)、imap/pop3 reverse proxy

NGINX is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server.

解决C10K(10K Connections)问题而发展起来的web服务
Tengine, OpenResty.

http协议:
URL:shceme://username:[email protected]:port/path;params?query#frag

http事务:
request:
<method> <URL> <VERSION>
HEADERS

<body>

response:
<VERSION> <STATUS> <REASON-PHRASE>
HEADERS

<body>

Method:GET/HEAD/POST, PUT/DELETE, TRACES, OPTIONS

Status Code:
1xx:
2xx:成功类响应码,200
3xx:重定向类的响应码,301, 302, 304
4xx:客户端错误,403,404
5xx:服务器端错误,502

认证:
基于ip认证
基于用户认证 :basic/digest

httpd MPM:
prefork:进程模型,两级结构,主进程master负责生成子进程,
        每个子进程负责响应一个请求;
worker: 线程模型,三级结构,主进程master负责生成子进程,
        每个子进程负责生成多个线程,每个线程响应一个请求;
event:主进程master负责生成子进程,每个子进程响应多个请求;

Nginx的程序架构:
        master/worker
         一个master进程:
                    负载加载和分析配置文件、管理worker进程、平滑升级
                    一个或多个worker进程
                 处理并响应用户请求
         缓存相关的进程:
cache loader:载入缓存对象
cache manager:管理缓存对象

特性:异步、事件驱动和非阻塞
并发请求处理:通过kevent/epoll/select,/dev/poll
文件IO:高级IO sendfile,异步,mmap

nginx高度模块:高度模块化,但其模块早期不支持DSO机制;近期版本支持动态装载和卸载;
模块分类:
核心模块:core module
标准模块:
HTTP modules:
Standard HTTP modules
Optional HTTP modules
Mail modules
Stream modules
3rd party modules

nginx的功用:
静态的web资源服务器;(图片服务器,或js/css/html/txt等静态资源服务器)
结合FastCGI/uwSGI/SCGI等协议反代动态资源请求;
http/https协议的反向代理;
imap4/pop3协议的反向代理;
tcp/udp协议的请求转发;

nginx的安装配置:
官方的预制包:
http://nginx.org/packages/centos/7/x86_64/RPMS/
Fedora-EPEL:

编译安装:
~]# yum install pcre-devel openssl-devel zlib-devel
~]# useradd -r nginx
~]#  ./configure –prefix=/usr/local/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock –user=nginx –group=nginx –with-http_ssl_module –with-http_v2_module –with-http_dav_module –with-http_stub_status_module –with-threads –with-file-aio

make && make install

配置文件的组成部分:
主配置文件:nginx.conf
              include conf.d/.conf
              fastcgi, uwsgi,scgi等协议相关的配置文件
              mime.types:支持的mime类型

主配置文件的配置指令:
directive value [value2 …];

注意:
(1) 指令必须以分号结尾;
(2) 支持使用配置变量;
           内建变量:由Nginx模块引入,可直接引用;
           自定义变量:由用户使用set命令定义;
                  set variable_name value;
          引用变量:$variable_name

主配置文件结构:
main block:主配置段,也即全局配置段;
event {

}:事件驱动相关的配置;
http {

}:http/https 协议相关的配置段;
mail {

}
stream {

}

http协议相关的配置结构
http {

…:各server的公共配置
server {

}:每个server用于定义一个虚拟主机;
server {

listen 
server_name
root
alias
location [OPERATOR] URL {

if CONDITION {

}
}
}
}

nginx:master/worker
master:配置文件分析和加载、管理worker、平滑升级;
worker:处理用户请求;
cache loader, cache manager:缓存加载和缓存管理

高度模块化:
HTTP module
Standard HTTP Module
Optional HTTP Module
Mail Module
Stream Module

main配置段常见的配置指令:
分类:
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置

正常 运行必备的配置:
1、user
Syntax: user user [group];
Default: user nobody nobody;
Context: main

Defines user and group credentials used by worker processes. If group is omitted, a group whose name equals that of user is used.

2、pid /PATH/TO/PID_FILE;
指定存储nginx主进程进程号码的文件路径;

3、include file | mask;
指明包含进来的其它配置文件片断;

4、load_module file;
指明要装载的动态模块;

性能优化相关的配置:
1、worker_processes number | auto;
worker进程的数量;通常应该为当前主机的cpu的物理核心数;

2、worker_cpu_affinity cpumask …;
worker_cpu_affinity auto [cpumask];

CPU MASK:
00000001:0号CPU
00000010:1号CPU
… …
3、worker_priority number;
指定worker进程的nice值,设定worker进程优先级;[-20,20]

4、worker_rlimit_nofile number;
worker进程所能够打开的文件数量上限;

调试、定位问题:
1、daemon on|off; 
是否以守护进程方式运行Nignx;

2、master_process on|off;
是否以master/worker模型运行nginx;默认为on;

3、error_log file [level];

事件驱动相关的配置:
events {

}

1、worker_connections number;
每个worker进程所能够打开的最大并发连接数数量;
 worker_processes * worker_connections 
  
2、use method;
指明并发连接请求的处理方法;
use epoll;

3、accept_mutex on | off;
处理新的连接请求的方法;on意味着由各worker轮流处理新请求,Off意味着每个新请求的到达都会通知所有的worker进程;

http协议的相关配置:
http {
… …
server {

server_name
root
location [OPERATOR] /uri/ {

}
}
server {

}
}

与套接字相关的配置:

1、server { … }
配置一个虚拟主机;

server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}

2、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
     listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]

default_server:设定为默认虚拟主机;
ssl:限制仅能够通过ssl连接提供服务;
backlog=number:后援队列长度;
rcvbuf=size:接收缓冲区大小;
sndbuf=size:发送缓冲区大小;

3、server_name name …;
指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串
支持
通配任意长度的任意字符;server_name .magedu.com  www.magedu.
支持~起始的字符做正则表达式模式匹配;server_name ~^www\d+.magedu.com$

匹配机制:
(1) 首先是字符串精确匹配;
(2) 左侧通配符;
(3) 右侧
通配符;
(4) 正则表达式;

4、tcp_nodelay on | off;
在keepalived模式下的连接是否启用TCP_NODELAY选项;

5、sendfile on | off;
是否启用sendfile功能;

定义路径相关的配置:
6、root path; 
设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;可用的位置:http, server, location, if in location;

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

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;

=:对URI做精确匹配;例如, http://www.magedu.com/, http://www.magedu.com/index.html
location  = / {

}
~:对URI做正则表达式模式匹配,区分字符大小写;
~:对URI做正则表达式模式匹配,不区分字符大小写;
^~:对URI的左半部分做匹配检查,不区分字符大小写;
不带符号:匹配起始于此uri的所有的url;

匹配优先级:=, ^~, ~/~,不带符号;

root /vhosts/www/htdocs/
http://www.magedu.com/index.html –> /vhosts/www/htdocs/index.html

server {
root  /vhosts/www/htdocs/

location /admin/ {
root /webapps/app1/data/
}
}

8、alias path;
  定义路径别名,文档映射的另一种机制:仅能用于location上下文
注意:location中使用root指令和alias指令的意义不同;
(a) root,给定的路径对应于location中的/uri/左侧的/;
(b) alias,给定的路径对应于location中的/uri/右侧的/
9、index file …;
默认资源;http, server, location;

10、error_page code … [=[response]] uri;
Defines the URI that will be shown for the specified errors.

11、try_files file … uri;

定义客户端请求的相关配置

12、keepalive_timeout timeout [header_timeout];
设定保持连接的超时时长,0表示禁止长连接;默认为75s;

13、keepalive_requests number;
在一次长连接上所允许请求的资源的最大数量,默认为100;

14、keepalive_disable none | browser …;
对哪种浏览器禁用长连接;

15、send_timeout time;
向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长;

16、client_body_buffer_size size;
用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置;

17、client_body_temp_path path [level1 [level2 [level3]]];
设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;

16进制的数字;

client_body_temp_path path  /var/tmp/client_body  2 1 1 
1:表示用一位16进制数字表示一级子目录;0-f
2:表示用2位16进程数字表示二级子目录:00-ff
2:表示用2位16进程数字表示三级子目录:00-ff

对客户端进行限制的相关配置:
18、limit_rate rate;
限制响应给客户端的传输速率,单位是bytes/second,0表示无限制;

19、limit_except method … { … }
限制对指定的请求方法之外的其它方法的使用客户端;

limit_except GET {
allow 192.168.1.0/24;
deny  all;
}

文件操作优化的配置
20、aio on | off | threads[=pool];
是否启用aio功能;

21、directio size | off;
在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;

22、open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以缓存以下三种信息:
(1) 文件的描述符、文件大小和最近一次的修改时间;
(2) 打开的目录结构;
(3) 没有找到的或者没有权限访问的文件的相关信息;

max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理;

inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项;

23、open_file_cache_valid time;
缓存项有效性的检查频率;默认为60s;

24、open_file_cache_min_uses number;
在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;

25、open_file_cache_errors on | off;
是否缓存查找时发生错误的文件一类的信息;

ngx_http_access_module模块:
实现基于ip的访问控制功能

26、allow address | CIDR | unix: | all;
27、deny address | CIDR | unix: | all;

http, server, location, limit_except

ngx_http_auth_basic_module模块
实现基于用户的访问控制,使用basic机制进行用户认证;

28、auth_basic string | off;       #sting加上引号表示说明
29、auth_basic_user_file file;

location /admin/ {
alias /webapps/app1/data/;
auth_basic “Admin Area”;
auth_basic_user_file /etc/nginx/.ngxpasswd;
}

注意:htpasswd命令由httpd-tools所提供;

ngx_http_stub_status_module模块
用于输出nginx的基本状态信息;

Active connections: 291 
server accepts handled requests
16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106

Active connections: 活动状态的连接数;
accepts:已经接受的客户端请求的总数;
handled:已经处理完成的客户端请求的总数;
requests:客户端发来的总的请求数;
Reading:处于读取客户端请求报文首部的连接的连接数;
Writing:处于向客户端发送响应报文过程中的连接数;
Waiting:处于等待客户端发出请求的空闲连接数;

30、stub_status;

配置示例:
location  /basic_status {
stub_status;
}

ngx_http_log_module模块
he ngx_http_log_module module writes request logs in the specified format.

31、log_format name string …;
string可以使用nginx核心模块及其它模块内嵌的变量;

课外作业:为nginx定义使用类似于httpd的combined格式的访问日志;

32、access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;

访问日志文件路径,格式及相关的缓冲的配置;
buffer=size
flush=time

33、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
缓存各日志文件相关的元数据信息;

max:缓存的最大文件描述符数量;
min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项;
inactive:非活动时长;
valid:验正缓存中各缓存项是否为活动项的时间间隔;

时间: 2024-08-01 10:46:44

Nginx的配置1的相关文章

linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)

linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表里 面找master进程,它的编号就是主进程号. ps -ef | grep nginx 查看进程 cat /usr/local/nginx/nginx.pid 每次修改完nginx文件都要重新加载配置文件linux命令: /usr/local/nginx -t //验证配置文件是否合法 若ngin

nginx安装配置

一.下载Nginx源文件 进入nginx官网下载nginx的稳定版本,我下载的是1.10.0. 下载:wget http://nginx.org/download/nginx-1.10.0.tar.gz 解压:tar -zxvf nginx-1.10.0.tar.gz 二.检查安装依赖项 执行下面的命令安装nginx的依赖库: yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel11 三.配置Nginx安

FastDFS的php和nginx模块配置

一.FastDFS和php整合 1.安装php # 安装依赖包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel cu

Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持

前面有关于lnmp环境的搭建,在此就不在赘述.下面就简述thinkPHP如何在nginx下开启url_rewrite和pathinfo模式支持 主要有两个步骤: 一.更改php.ini将;cgi.fix_pathinfo=0  改为cgi.fix_pathinfo=1 二.更改nginx配置文件中php的location设置pathinfo模式: location ~ \.php { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index in

dva+antd写的一个react例子--服务器nginx 的配置

location ^~ /crm { rewrite ^/crm/(.*)(\.js|\.css|\.png|\.jpg|\.jpeg|\.gif|index\.php|robots\.txt)$ /$1$2 break; rewrite .* /index.html break; root /etc/nginx/static2/CIF_crm-frontend/dist/crm/; } 以上是nginx的配置 { "entry": "src/index.js",

Nginx安装配置(转)

Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. 在高连接并发的情况下,Nginx是Apache服务器不错的替代品. Nginx 安装 系统平台:CentOS release 6.6 (Final) 64位. 一.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtoo

Nginx + PHP 配置

最近在学习php的时候了解到了,顺便了解了一下php服务器的运行环境,php最常用的服务器肯定是Apache了,不过这几年Nginx发展也很快,相比Apache而言,它除了抗高并发以外,搭建环境的的时候配置也比较容易,在windows下几乎不需要任何安装步骤,只需要在控制台启动 .exe 程序就行了,而且反向代理机制也是一种比较灵活的机制. 1.在配置一个环境之前,我们先要下载php和nginx ,它们都可以在各自官网下载到,目前nginx最新稳定版是nginx 1.6,在下载php的时候要注意

nginx 转发配置

Nginx配置proxy_pass转发的/路径问题 在nginx中配置proxy_pass时,如果是按照^~匹配路径时,要注意proxy_pass后的url最后的/,当加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走. location ^~ /static_js/ { proxy_cache js_cache; proxy_set_header Host js.test.com; proxy_pass http:

nginx常用配置系列-虚拟主机

本来准备详尽的出一份nginx配置讲解,但nginx功能配置繁多,平常使用中使用最多的一般有: 1. 虚拟主机配置 2. HTTPS配置 3. 静态资源处理 4. 反向代理 ================= 虚拟主机配置 ================= 先说虚拟主机配置,nginx的核心配置文件在nginx的安装目录下conf目录中(如果是CentOS通过yum安装则在/etc/nginx目录中) 在conf目录下创建vhost目录,方便管理虚拟主机的配置文件 mkdir vhost 以e

Keepalived && Nginx 高可用性配置

keepalived是一个用于做双机热备(HA)的软件,常和haproxy联合起来做热备+负载均衡,达到高可用. 运行原理 keepalived通过选举(看服务器设置的权重)挑选出一台热备服务器做MASTER机器,MASTER机器会被分配到一个指定的虚拟ip,外部程序可通过该ip访问这台服务器,如果这台服务器出现故障(断网,重启,或者本机器上的keepalived crash等),keepalived会从其他的备份机器上重选(还是看服务器设置的权重)一台机器做MASTER并分配同样的虚拟IP,充