您的位置:首页 > 运维架构 > Nginx

【nginx】的基本使用

2016-04-12 18:08 633 查看
【nginx】的基本使用

常用命令:

【-c】指定配置文件:如果不指定会限制默认路径为(编译时执行的路径):/etc/nginx/nginx.conf

【-s】向master发送信号,平滑读取配置文件,如果配置文件改变了,对当前连接没有影响,新的连接请求都是以新的配置文件

【-t】能够测试主配置文件有没有语法错误。

【】

nginx的配置:

【正常运行的必备配置:】

1、user username [groupname]

指定运行worker进程的用户和组(可以在编译时指定)

2、pid /path/to/pifile_name;

指定nginx的pid文件

3、worker_rlimit_nofile #;

指定一个worker进程 所能够打开的最大文件句柄数:

4、worker_rlimit_sigpending #;

设定每个用户能够发往worker进程的信号的数量

【优化性能相关的配置:】

1、worker_processes #;

worker进程的个数;通常其数值应该为cpu的物理核心数减1

2、worker_cpu_affinity cpumask ...;

0000(cpu的掩码)//指定进程只能运行在那些cpu上

0001

0010

(假如有8颗cpu的核心)

例如:worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000

3、ssl_engin device; //与硬件加速相关

在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备

4、timer_resolution t;

每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟:

timer_resolution用于定义每隔多久才会由gettimeofday()更新一次缓存时钟;

目前x86-64系统上,gettimeofday()代价已经很小,可以忽略此配置。

5、worker_priority number;

优先级 {-20,19}之间的值:

【事件相关的配置】

1、accept_mutex [on|off]

表示是否打开自旋锁

是否打开Ningx的负载均衡锁,此锁能够让多个worker进程轮流的、序列化地与新的客户端建立连接:

而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不再将请求调度此worker;

2、lock_file
/path/to/lock_file;

lock(锁)文件

3、accept_mutex_delay #ns;

accept锁模式中,一个worker进程为取得accept锁的等待时长:如果某个worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;默认是500毫秒

注意:使用accept锁后,在同一时间只能有一个worker进程使用这个锁

4、multi_accept {on|off};

是否允许一次性地响应多个用户请求;默认为off

5、use [epoll|rtsig|select|poll]

定义使用的事件模型,建议让nginx自动选择;

6、worker_connections #;

每个worker能够并发响应最大请求数;

【用于调试、定位问题:只调试nginx时使用】

1、daemon [on|off];

是否让nginx运行后台:默认为on,调试时可以设置为off,使用所有信息去输出控制台;

2、master_process [on|off];

是否以master/worker模式运行nginx:默认为on;调试可以设置为off以方便追踪;

3、error_log /path/to/error_log level;

错误日志文件及其级别:默认为error级别;调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能:

【nginx的http功能:】

必须使用虚拟机来配置站点:每一个虚拟主机使用一个server{}段配置:

server{}

非虚拟主机的配置或公共配置,需要定义在server之外,http之内;

http{

directive value;

.....

server{

....

}

server{

....

}

}

1、server{}

定义一个虚拟主机:nginx支持使用基于主机名或IP的虚拟主机:

2、listen

三种方式监听:

listen address[:port];监听指定地址的指定端口

listen port;监听所有地址的指定端口

listen unix:socket_file_path

监听语法:

listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport]
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

参数说明:

【default_server】:定义server为http中默认的server;如果所有的server中没有任何一个listen使用此参数,那么第一个server即为默认server

【rcvbuf=SIZE】接收缓存大小:SIZE

【sndbuf=SIZE】发送缓存大小:

【ssl: https server】建立连接时必须使用ssl

3、server_name [...];

server_name可以跟多个主机名:当nginx收到一个请求时,会使用其首部的server的值,而后跟众server_name进行比较:

比较法方式:

(1)先做精确匹配:www.magedu.com

(2)左侧通配符匹配:*.magedu.com

(3)右侧通配符配置:www.*

(4)正则表达式匹配:~^.*\.magedu\.com$

4、server_name_hash_backet_size [32|64|128];

为了实现快速主机查找,nginx使用hash表示来保存主机名:

5、location URI

官方语法:

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

location @name { ... }

功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置:

匹配到时,将location块中的配置所处理:

参数说明:

【=】精确匹配

【~】正则表达式模式匹配,匹配时区分字符大小写

【~*】正则表达式模式匹配,匹配时忽略字符大小写

【^~】URI前半部分匹配,不检查正则表达式

匹配优先级:

字符字面量最精确匹配、正则表达式检索(由第一个匹配到所处理)、按字符字面量

【文件路径定义】

1、root path

设置web资源路径:用于指定请求的根文档目录:

例如:

location / {

root /www/htdocs;//跳转目录后为:/www/htdocs/..

}

location ^~ /images/ {

root /web;
//跳转的后为:/web/images/...

}

2、alias path

指定路径别名,只能用于location中,用于路径别名:

例如:

location / {

root /www/htdocs;//跳转目录后为:/www/htdocs/..

}

location ^~ /images/ {

alias /web;
//跳转的后为:/web/... (相当于将匹配到的目录替换为指定目录)

}

3、index file ...;

定义默认页面,可以参跟多个值:

4、error_page code ... [=[response]] uri;

当对于某个请求返回错误时,如果匹配上了error_page指令中设定的code,则重定向到新的URI中。

错误页面重定向;

例如:error_page 404 =200 /404.html; 其中的=200是重新定义状态码, /404.html是重新跳转的页面

5、try_files path1 [path2 ...] uri;

从左至右尝试读取由path所指定路径,在第一次找到即停止并返回:如果所有path均不存在,则返回最后一个url;

检查指定的顺序中的文件是否存在,并使用第一个找到处理的文件,在当前上下文中进行处理。

文件的路径是从文件参数的根和别名命令的。可以通过指定在名字的最后一个斜杠检查目录的存在,例如“$ URI /”。如果该文件没有被发现,在最后一个参数指定的URI内部重定向了。

例如:

location /documents {

try_files $uri /temp.html;

}

location ~* ^/documents/(.*)$ {

root /www/htdocs;

try_files $uri /docu/$1 /temp.html; #这个当访问路径为:http://www.magedu.com/documents/a.html是,

#依次寻找的路径为【www.magedu.com/www/htdocs/documents/a.html】

【www.magedu.com/www/htdocs/docu/a.html】

【www.magedu.com/www/htdocs/temp.html】

}

【网络连接相关的设置:】

1、keepalive_timeout time;

保持连接的超时时间:默认为75秒

2、keepalive_requests n;

在一次长连接上允许承载的最大请求数;

3、keepalive_disable [msie6 | safari | none]

对指定的浏览器禁止使用长连接;

4、tcp_nodelay on|off

对keepalive连接是否使用TCP_NODELAY选项;

默认是on ,通常也是on

5、client_header_timeout time;

读取http请求首部的超时时长;

默认是60s

6、client_body_timeout time;

读取http请求包体的超时时长;

默认是60s

7、send_timeout time;

发送响应的超时时长:

【对客户端请求的限制:】

1、limit_except sethod ... {...}

指定对范围之外的方法的访问控制

例如:

limit_except GET {

allow 172.16.0.0/16;

deny all;

}-------------------------------》表示除了get方法之外的其他方法要想使用必须要满足{}里面的要求

2、client_max_body_size SIZE;

http请求包体的最大值;常用于限定客户端所能够请求的最大包体;根据请求首部中的Content-Length来检测,以避免无用的传输:

3、limit_rate speed;

限制客户端每秒钟传输的字节数:默认为0,表示没有限制:

4、limit_rate_after time;

nginx向客户端发送响应报文时,如果时长超出了此处指定的时长,则后续的发送过程开始限速:

【文件操作的优化】

1、sendfile on|off

是否启用sendfile功能:

2、aio on|off

是否启用aio

3、open_file_cache max=N [inactive=time]|off

是否打开文件缓存功能:

max:缓存条目的最大值:当满了以后将根据LRU算法进行置换;

inactive:某缓存条目在指定时长内没有被访问过时,将自动被删除:默认为60s 如果使用off表示关闭。

缓存的信息包括:

文件句柄、文件大小和上次修改时间:

已经打开的目录结构:

没有找到或没有访问权限的信息:

4、open_file_cache_errors on|off

是否缓存文件找不到或没有权限访问等相关信息:

5、open_file_cache_valid time;

多长时间检查一次缓存中的条目是否超出非活动时长,默认为60s

6、open_file_cache_min_use #;

在inactive指定的时长内被访问超出此处指定的次数时,才不会被删除;

【对客户的请求的特殊处理】

1、ignore_invalid_headers on|off

是否忽略不合法的http首部:默认为on;off意味着请求首部中出现不合规的首部将拒绝响应;只能用于server和http;

2、log_not_found on|off

是否将文件找不到的信息也记录进错误日志中;

3、resolver address;

指定nginx使用的dns服务器地址:

4、resover_timeout time;

指定DNS解析超时时长,默认为30s;

5、server_tokens on|off

是否在错误页面中显示nginx的版本号

【http核心模块的内置变量:】

【$uri】当前请求的uri,不带参数:

【$request_uri】请求的uri,带完整参数;

【$host】http请求报文中host首部:如果请求中没有host首部,则以处理此请求的虚拟主机的主机名代替

【$hostname】nginx服务运行在主机的主机名;

【$remote_addr】客户端IP

【$remote_port】客户端Port

【$remote_user】使用用户认证时客户端输入的用户名:

【$request_filename】用户请求中的URI经过本地root或alias转换后映射的本地的文件路径;

【$request_method】请求方法

【$server_addr】服务器地址

【$server_name】服务器名称

【$server_port】服务器端口

【$server_protocol】服务器向客户端发送响应时的协议,比如http/1.1,http/1.0

【$scheme】在请求中使用scheme,比如https://www.magedu.com/中的https:

【$http_HEADER】(HEADER需要自己修改,修改成你指定匹配的HEADER)匹配请求报文中指定的HEADER,$http_host匹配请求报文中的host首部

【$sent_http_HEADER】(HEADER需要自己修改,修改成你指定匹配的HEADER)匹配响应报文中指定的HEADER,例如$http_content_type匹配响应报文中的content-type首部;

【$document_root】当前请求映射到的root配置:

【$status】引用状态码

【$bytes_send】发送的字节数

【$http_refere】从哪个页面跳转而来的

【$http_user_agent】浏览器的类型

【$gzip_ratio】gzip的压缩比例

【配置使用nginx】

1.nginx虚拟主机

server{

listen
#设置监听的端口

server_name
#设置访问域名

root #设置网站的资源路径

}

2、访问控制access模块(基于IP)

allow #允许通过的

deny #不许通过的

3、用户认证示例

location /admin/ {

root /www/b.org;#跳转目录

auth_basic "admin area";

auth_basic_user_file /etc/nginx/.htpasswd; #指定验证用户名密码的密码文件

}

注意:在文件指定后,还有创建相应的文件,使用

#htpasswd -c -m /etc/nginx/.htpasswd tom #创建文件,并写入用户tom和密码(首次需要-c)

#htpasswd -m /etc/nginx/.htpasswd gandian #再次在该文件中添加一个用户和密码

4、建立下载站点时用到的模块autoindex

示例:

location /download/ {

root /www/b.org;

autoindex on;#开启目录浏览

}

5、防盗链

(1)定义合规的引用

valid_referers none | blocked | server_names | string ...;

(2)拒绝不合规的引用

if($invalid_referer){

rewrite
^/.*$ http://www.b.org/403.html
}

6、URI rewrite

rewrite regex replacement [flag];

location /{

root /www/b.org;

rewrite ^/images/(.*)$ /imgs/$1; #http://www.b.org/images/a.jpg --->http://www.b.org/imgs/a.jpg

rewrite ^/imgs/(.*)$ /images/$1 last;

}

【last】一旦被当前规则匹配并重写后立即停止检查后续的其他rewrite的规则,而通过重写后的规则重新发起请求;

【break】一旦被当前规则匹配并重写立即停止后续的其他rewrite的规则,而后继续由nginx进行后续操作

【redirect】返回302临时重定向

【permanent】返回301永久重定向。

例如:

location /download/ {

root /www/b.org;

autoindex on;

rewrite ^/download/(.*\.(jpg|gif|jpeg|png))$ /images/$1 last;

}

注意:nginx最多循环10次,超出之后会返回500错误;

一般将rewrite写在location中时都使用break标志,或者将rewrite写在if上下文中

rewrite_log

是否把重写过程记录在错误日志中:默认为notice级别: 默认为off;

例如:error_log /var/log/nginx/error.log notice;

return_code:

用于结束rewrite规则,并且为客户端返回状态码:可以使用的状态码有:204,400,402-406,500-504等;

if条件语句

if(condition){

}

7、压缩

nginx将响应报文发送至客户端之前可以启用压缩功能,这能够有效地节约宽带,并提高响应至客户端的速度。通常编译nginx默认会附带gzip压缩的功能,因此可以直接启用之。

http{

gizp on;
#开启nginx的gizp压缩功能

gzip_http_version 1.0;

gzip_comp_level 2;

gzip_types text/plain text/css application/x-javascript text/xml aplication/xml application/xml+rss text/javascript application/javascript application/json; #设置需要压缩的文件类型

gzip_disable msie6;

}

gzip_proxied指令可以定义客户端请求哪类对象启用压缩功能,如“expired”表示对由于使用了expire首部定义而无法缓存的对象启用压缩功能,其它可接受的值还有

“no-cache”、“no-store”、“private”、“no_last_modified”、“no_etag”等,而“off”则表示关闭压缩功能。

-----附件:安装步骤------------------

首先添加用户nginx,实现以之运行nginx服务器

#groupadd -r nginx

#useradd -r -g nginx nginx

接着开始编译和安装

# ./configure \

--prefix=/usr \

--sbin-path=/usr/sbin/nginx \

--conf-path=/etc/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx.lock \

--lock-path=/var/lock/nginx.lock \

--user=nginx \

--group=nginx \

--with-http_ssl_module \

--with-http_flv_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/tmp/nginx/client/ \

--http-proxy-temp-path=/var/tmp/nginx/proxy/ \

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \

--http-scgi-temp-path=/var/tmp/nginx/uwsgi \

--with-pcre

#make && make install

说明:

1.Nginx可以使用Tmalloc(快速、多线程的malloc库及优秀性能分析工具)来加速内存分配,使用此功能需要事先安装gperftools,而后在编译nginx添加--with-google_perftools_module选项即可。

2.如果想使用nginx的perl模块,可以通过configure脚本添加--with-http_perl_module选项来实现,但目前此模块仍处于实验性使用阶段,可能会在运行时出错,因此,其实现方式这里不再介绍。如果想使用基于nginx的cgi功能,也可以基于FCGI来实现,具体实现方法请参照网上的文档。

3.为nginx提供Sysv init脚本:

----------------------------------------------------end-------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: