Nginx基础与主机服务部署

来源:互联网 发布:uefi ubuntu 双系统 编辑:程序博客网 时间:2024/06/05 07:45

Nginx基础与主机服务部署

一、 基础介绍

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

1. 程序架构

master/worker    一个master进程:        负载加载和分析配置文件、管理worker进程、平滑升级    一个或多个worker进程:        处理并响应用户请求缓存相关的进程:    cache loader:载入缓存对象    cache manager:管理缓存对象特性:异步、事件驱动和非阻塞    并发请求处理:通过epoll/select    文件IO:高级IO sendfile,异步,mmapnginx高度模块:高度模块化,但其模块早期不支持DSO机制;近期版本支持动态装载和卸载;    模块分类:        核心模块:core module        标准模块:   HTTP modules:                        Standard HTTP modules                        Optional HTTP modules                    Mail modules                    Stream modules        第三方 modules

2. 安装配置

官方的预制包:http://nginx.org/packages/centos/7/x86_64/RPMS/编译安装:
~]# yum groupinstall "Development Tools" "Server Platform Development" 安装编译所需组件~]# 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 根据自己所需进行编辑配置,初学建议使用yum安装,本人初学,所以yum安装。\# make && make install
程序环境:    配置文件的组成部分:        主配置文件:nginx.conf        模块化配置文件conf.d/*.conf        主程序文件:/usr/sbin/nginx

3. http协议相关的配置结构

注意: (1) 配置指令必须以分号结尾; (2) 支持使用配置变量;        内建变量:由Nginx模块引入,可直接引用;        自定义变量:由用户使用set命令定义;                        set variable_name value;            引用变量:$variable_name主配置文件结构:main block:主配置段,也即全局配置段;    event {        ...    }:事件驱动相关的配置;    http {        ...    }:http/https 协议相关的配置段;    mail {        ...    }    stream {        ...    }http协议相关的配置结构    http {        ...:各server的公共配置    每个server用于定义一个虚拟主机,建议在nginx安装目录下的conf.d目录下定义***.conf文件使用,默认主配置文件加载已包含conf.d下的*.conf文件,也可在主配置文件http公共配置段使用include 后跟配置文件绝对路径用以加载自定义配置文件        server {            listen port;            server_name www.test.com;            root /PATH/TO/WWW/;            location [OPERATOR] URL {                        ...                if CONDITION {                    ...                }            }        }    }

4. 配置指令

4.1 main配置段常见的配置指令

4.1.1正常运行必备的配置    User user_name[group];执行进程的用户或组,默认为nobody    Pid /PATH/TO/PID_FILE;存储主进程进程号码的文件路径    Include file;载入其它配置文件    Load_module file;指明加载动态模块(支持前提下) 4.1.2优化性能相关的配置Worker_processes number | auto ;声明worker进程数量,小于等于物理核心数Worker_cpu_affinity cpumask | auto ;声明进程运行在那颗cpu上,可使用cpumask 00001 00100 使用第一、二颗。Worker_priority number;worker进程优先级[-20~19],默认为0Worker_rlimit_nofile number;每个进程可打开最多的文件数量4.1.3用于调试及定位问题相关的配置Daemon on | off;是否以守护进程方式运行nginxMaster_process on | off;是否以master_process模型运行,默认为onError_log file [level];错误日志目录及错误级别4.1.4事件驱动相关的配置Worker_connections number;每个进程最大并发连接数;Use method;并发请求处理方法Accept_mutex on | off;on为轮流处理新请求,off为新请求通知所有进程,空闲进程处理

4.2 http相关配置

4.2.1   listen address:por t[default_server] [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size];default_server:设定为默认虚拟主机;ssl:限制仅能够通过ssl连接提供服务;backlog=number:后援队列长度;rcvbuf=size:接收缓冲区大小;sndbuf=size:发送缓冲区大小;4.2.2   server_name name ;虚拟主机名称,支持通配符,正则表达式,匹配机制:1字符串精确匹配,2左侧*通配符。3右侧*通配符,4正则表达式。off 服务端响应内容很小时会积累下几个响应内容一起发送。4.2.4    Sendfile on | off;是否开启sendfile功能4.2.5    Tcp_nopush on | off;在sendfile模式下,on为应用层首部在内核与数据合成发送,off为先发送数据,应用层首部后发。4.2.6    Root path ;web资源映射路径,站点根目录4.2.7    Location [ = | ~ | ~* | ^~ ] URI{......}一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;=:对URI做精确匹配;例如, http://www.magedu.com/,~:对URI做正则表达式模式匹配,区分字符大小写;~*:对URI做正则表达式模式匹配,不区分字符大小写;^~:对URI的左半部分做匹配检查,不区分字符大小写;不带符号:匹配起始于此uri的所有的url;匹配优先级:=, ^~, ~/~*,不带符号;4.2.8   alias path ;定义路径别名,文档映射,仅能使用location上下文注意:location中使用root指令和alias指令的意义不同;         (1) root,给定的路径对应于location中的/uri/左侧的/;         (2) alias,给定的路径对应于location中的/uri/右侧的/;4.2.9 index file ...;默认页,一般为index index.html | php4.2.10 error_page code ... [=reqponse]] uri;定义显示的错误页面如:error_page 404 403 =200 /data/error.html 如果是404,403响应码,则返回响应码为200,显示错误页/data/error.html4.2.11 try_files file ... uri;顺序检查文件是否存在,返回第一个找到的文件。结尾的斜线表示为文件夹 -$uri/。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数。4.2.12 keepative_timeout number;保持连接超时时长,默认75s4.2.13 keepative_requests number;一次长连接允许最多请求数,默认1004.2.14 keepative_disable none | brower ...;对设定的浏览器禁用长连接4.2.15 send_timeout time;响应报文超时时长,两次写操作之间时间间隔,超时关闭连接4.2.16 client_body_buffer_size size;接收客户端请求报文body部分的缓冲区大小,默认16k,超出根据client_body_temp_path指令所定义的位置生产缓存文件4.2.17 client_body_temp_path path [level1 [level2[level3]]];设置存储客户端请求报文body部分的缓冲区目录,子目录及数量    client_body_temp_path path  /var/tmp/client_body  1 2 3            1:表示用一位16进制数字表示一级子目录;0-f 16            2:表示用2位16进程数字表示二级子目录:00-ff 256            2:表示用2位16进程数字表示三级子目录:00-ff 2564.2.18 limit_rate rate;限制响应客户端的传输速率,单位bytes/second ,0表示无限制4.2.19 limit_except method {...};限制对指定的请求方法外的其他方法的客户端使用权限如:limit_except GET {    allow 192.168.1.0/24;    deny  all;    }除192.167.1网段的用户可使用get之外的方法,其他人不可使用4.2.20 aio on | off;是否启用aio功能4.2.21 directio size | off;在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;4.2.22 open_fle_cache max=N [inactive=time] | off;nginx可以缓存以下三种信息:     (1) 文件的描述符、文件大小和最近一次的修改时间;     (2) 打开的目录结构;     (3) 没有找到的或者没有权限访问的文件的相关信息;    max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理;    inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项;4.2.23 open_file_cache_valid time;检查缓存时间间隔,默认60s4.2.24 open_file_min_uses number;在open_file_cache 指令的inactive参数指定时长内至少应该呗使用多少次才可被归为活动项4.2.25 open_file_cache_errors on | off ;是否缓存查找文件时发生的错误信息

5. 常用module简介

5.1 Ngx_http_access_module;基于IP控制访问功能    Allow address | all ;访问白名单    Deny address | all;访问黑名单5.2 ngx_http_auth_basic_module;基于用户访问控制    auth_basic string | off;提示信息    auth_basic_user_file passwdfile;指明用户验证文件如;location /admin/ {        auth_basic "Please input !";        auth_basic_user_file /etc/nginx/.ngxpasswd;        }验证文件使用http-tools提供的htppasswd命令生产5.3 ngx_http_stub_status_module ;输出nginx状态信息stub_status;如:location  /basic_status(自定义) {        stub_status;        }状态信息:Active connections: 291 server accepts handled requests    16630948 16630948 31070465 Reading: 6 Writing: 179 Waiting: 106    Active connections: 活动状态的连接数;accepts:已经接受的客户端请求的总数;handled:已经处理完成的客户端请求的总数;requests:客户端发来的总的请求数;Reading:处于读取客户端请求报文首部的连接的连接数;Writing:处于向客户端发送响应报文过程中的连接数;    Waiting:处于等待客户端发出请求的空闲连接数;5.4 ngx_http_log_module ;日志log_format name srting ......;定义日志格式(只能在http下定义),string为nginx核心模块与其他模块内嵌的变量access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]] | off;访问日志文件路径,格式及相关缓冲配置open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] | off;日志缓存(元数据)配置exp:open_log_file_cache max=2048 inactive=5 min_uses=3 valid=30;日志缓存最大文件数为2048,在5秒内访问大于等于3次为活动项,30秒刷新一次5.5 ngx_http_gzip_module;压缩模块gzip on | off ;是否启用压缩gzip_comp_level level(1-9,默认1);设置压缩比级别gzip disable regex ...;根据正则表达式配置浏览器类型,匹配到不进行压缩gzip_min_length length;压缩起始大小,默认20gzip_buffers number size ;设置压缩响应缓冲区的数量和大小gzip_proxied off | expired | no-cache | no-store | private | no_last_modifed | no_etag | auth | any ..;nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的gzip_types mime-type ...;压缩过滤器,仅对此处设定类型的内容启用压缩功能;可在/nginx/mime.types文件内查看类型5.6 ngx_ssl_module ;ssl模块ssl on | off ;是否启用sslssl_certificate file;指明虚拟机使用的pem格式的证书***.crtssl_certificate_key file;指明与证书所匹配的私钥ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];支持协议,默认为TLS系列协议ssl_session_cache off | none | [builtin[:size]] [shared:name:size];builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;[shared:name:size]:在各worker之间使用一个共享的缓存;ssl_session_timeout time;一个客户端可以重用会话参数的时间server {    listen 443 ssl;    server_name www.magedu.com;    root /vhosts/ssl/htdocs;    ssl on;    ssl_certificate /etc/nginx/ssl/nginx.crt;    ssl_certificate_key /etc/nginx/ssl/nginx.key;    ssl_session_cache shared:sslcache:20m;}5.7 ngx_http_rewrite_module;重写替换rewrite regex replacement [flag];将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,[flag]:last,break在服务端完成重写操作,      redirect,permanent返回重写信息到客户端由客户重新发起请求last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环; break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;return;返回**    return code [text];    return code URL;    return URL;rewrite_log on | off;是否启用重写日志if (condition) { ... }引入一个新的配置上下文 ;条件满足时执行配置块中的配置指令;condition:    比较操作符:        =;相等        !=;不等        ~:模式匹配,区分字符大小写;        ~*:模式匹配,不区分字符大小写;        !~:模式不匹配,区分字符大小写;        !~*:模式不匹配,不区分字符大小写;    文件及目录存在性判断:        -e、!-e;文件存在        -f、 !-f;普通文件        -d,、!-d;目录文件        -x,、!-x;可执行文件set \$variable value;        用户自定义变量5.8 ngx_http_referer_module;图片防盗链模块valid_referers none | blocked | server_names | string...;定义referer首部的合法可用值none:请求报文首部没有referer首部;blocked:请求报文的referer首部没有值;server_names:参数,其可以有值作为主机名或主机名模式;string:直接字符串,但可使用*作通配符;regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\.\.com;如:location ~* \.(jpg) {        valid_referers none blocked server_names *.stu45.com         if ($invalid_referer) {     return 404;     }

二、 主机服务部署

1. 初始化虚拟主机

安装完成后,在安装目录conf.d下新建一个.conf文件用于定义虚拟主机,默认在主配置文件的http配置段中已有include命令载入conf.d下的所有.conf文件,编辑新建文件,如下:

这里写图片描述
这里没有设置默认页,继承主配置文件中的index.html,需要在设置的根目录下新建index.html文件,

]# echo ‘<h1>stu44</h1>’ > /nginx/stu/index.html

这里写图片描述
完成后,使用nginx –t 检查语法,nginx –s reload 重载配置。
注意:每次修改配置后,需要重载配置。测试如下:

2. https

根据前面说明,编写配置如下:
这里写图片描述
测试:
这里写图片描述

3. gzip

根据前面说明,编写配置如下:
这里写图片描述
测试
这里写图片描述

4. 访问加密与Status page

根据前面说明,编写配置如下:
这里写图片描述
测试:
这里写图片描述
输入用户、密码:
这里写图片描述
密钥文件使用httpd-tools提供的htpasswd工具生成

5. Rewrite

在主机配置段内添加一条指令:rewrite ~*/(.*).png /$1.jpg last;将所有以.png的URL重定向到同一目录下的jpg资源,可以重定向到其他目录下,目录下没有png格式图片,
这里写图片描述
访问时访问png格式图片(名称要相同)
这里写图片描述

6. Referer

使用另一个主机的referer.html引用当前主机的gif图片,引用如下:
这里写图片描述
测试:
这里写图片描述

7. Set、return与if

添加内容如下,val变量值与匹配值相同时,执行上下文内容
这里写图片描述
访问https://www.stu45.com/set
这里写图片描述

原创粉丝点击