【nginx】的基本使用

【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-------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值